From e011e2505089d649c39af48de2fd7a04a2be5284 Mon Sep 17 00:00:00 2001
From: Sean Morris <640101+seanmorris@users.noreply.github.com>
Date: Tue, 22 Oct 2024 19:44:42 -0400
Subject: [PATCH] Embeddable controls
---
demo-web/src/InstallDemo.js | 10 ++++++++++
demo-web/src/index.js | 8 +++++++-
docs/404.html | 2 +-
docs/asset-manifest.json | 6 +++---
docs/code-editor.html | 2 +-
docs/embedded-php.html | 2 +-
docs/home.html | 2 +-
docs/index.html | 2 +-
docs/install-demo.html | 2 +-
docs/select-framework.html | 2 +-
docs/static/js/{main.470b598f.js => main.e97dccb8.js} | 6 +++---
...98f.js.LICENSE.txt => main.e97dccb8.js.LICENSE.txt} | 0
.../js/{main.470b598f.js.map => main.e97dccb8.js.map} | 2 +-
13 files changed, 31 insertions(+), 15 deletions(-)
rename docs/static/js/{main.470b598f.js => main.e97dccb8.js} (98%)
rename docs/static/js/{main.470b598f.js.LICENSE.txt => main.e97dccb8.js.LICENSE.txt} (100%)
rename docs/static/js/{main.470b598f.js.map => main.e97dccb8.js.map} (54%)
diff --git a/demo-web/src/InstallDemo.js b/demo-web/src/InstallDemo.js
index a3c6ef88..8e496625 100644
--- a/demo-web/src/InstallDemo.js
+++ b/demo-web/src/InstallDemo.js
@@ -11,6 +11,16 @@ import BackIcon from './icons/back-icon-32.png'
import WwwIcon from './icons/www-icon-32.png'
import editorIcon from './icons/editor-icon-32.png';
+navigator.serviceWorker.register(process.env.PUBLIC_URL + `/cgi-worker.js`);
+setTimeout(() => {
+ if(!(navigator.serviceWorker && navigator.serviceWorker.controller))
+ {
+ window.location.reload()
+ }
+}, 350);
+
+(navigator.serviceWorker && navigator.serviceWorker.controller) || window.location.reload();
+
const sendMessage = sendMessageFor((`${window.location.origin}${process.env.PUBLIC_URL}/cgi-worker.mjs`))
const packages = {
diff --git a/demo-web/src/index.js b/demo-web/src/index.js
index 5227f8ba..e8379d2c 100644
--- a/demo-web/src/index.js
+++ b/demo-web/src/index.js
@@ -16,8 +16,14 @@ const params = new URLSearchParams(window.location.search);
if(!params.has('no-service-worker'))
{
navigator.serviceWorker.register(process.env.PUBLIC_URL + `/cgi-worker.js`);
+ setTimeout(() => {
+ if(!(navigator.serviceWorker && navigator.serviceWorker.controller))
+ {
+ window.location.reload()
+ }
+ }, 350);
+
navigator.serviceWorker.addEventListener('message', onMessage);
- setTimeout(() => navigator.serviceWorker.controller || window.location.reload(), 350);
}
const root = ReactDOM.createRoot(document.getElementById('root'));
diff --git a/docs/404.html b/docs/404.html
index aa0aa39c..6aa47434 100644
--- a/docs/404.html
+++ b/docs/404.html
@@ -1,4 +1,4 @@
-
php-wasmonsInFold), \" in folded code.\");\n annotation.text.push(summaryFoldedAnnotations);\n annotation.type.push(mostSevereAnnotationInFoldType);\n }\n }\n if (annotation.text.length === 0)\n return this.hide();\n var annotationMessages = { error: [], warning: [], info: [] };\n var iconClassName = gutter.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n for (var i = 0; i < annotation.text.length; i++) {\n var line = \" \").concat(annotation.text[i]);\n annotationMessages[annotation.type[i].replace(\"_fold\", \"\")].push(line);\n }\n var tooltipContent = [].concat(annotationMessages.error, annotationMessages.warning, annotationMessages.info).join(\"
\");\n this.setHtml(tooltipContent);\n this.$element.setAttribute(\"aria-live\", \"polite\");\n if (!this.isOpen) {\n this.setTheme(this.editor.renderer.theme);\n this.setClassName(\"ace_gutter-tooltip\");\n }\n this.show();\n this.editor._signal(\"showGutterTooltip\", this);\n };\n GutterTooltip.prototype.hideTooltip = function () {\n this.$element.removeAttribute(\"aria-live\");\n this.hide();\n this.editor._signal(\"hideGutterTooltip\", this);\n };\n GutterTooltip.annotationsToSummaryString = function (annotations) {\n var e_1, _a;\n var summary = [];\n var annotationTypes = ['error', 'warning', 'info'];\n try {\n for (var annotationTypes_1 = __values(annotationTypes), annotationTypes_1_1 = annotationTypes_1.next(); !annotationTypes_1_1.done; annotationTypes_1_1 = annotationTypes_1.next()) {\n var annotationType = annotationTypes_1_1.value;\n if (!annotations[annotationType].length)\n continue;\n var label = annotations[annotationType].length === 1 ? GutterTooltip.annotationLabels[annotationType].singular : GutterTooltip.annotationLabels[annotationType].plural;\n summary.push(\"\".concat(annotations[annotationType].length, \" \").concat(label));\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (annotationTypes_1_1 && !annotationTypes_1_1.done && (_a = annotationTypes_1.return)) _a.call(annotationTypes_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return summary.join(\", \");\n };\n return GutterTooltip;\n}(Tooltip));\nexports.GutterTooltip = GutterTooltip;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = /** @class */ (function () {\n function MouseEvent(domEvent, editor) {\n this.domEvent = domEvent;\n this.editor = editor;\n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n this.$pos = null;\n this.$inSelection = null;\n this.propagationStopped = false;\n this.defaultPrevented = false;\n }\n MouseEvent.prototype.stopPropagation = function () {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n MouseEvent.prototype.preventDefault = function () {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n MouseEvent.prototype.stop = function () {\n this.stopPropagation();\n this.preventDefault();\n };\n MouseEvent.prototype.getDocumentPosition = function () {\n if (this.$pos)\n return this.$pos;\n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n MouseEvent.prototype.getGutterRow = function () {\n var documentRow = this.getDocumentPosition().row;\n var screenRow = this.editor.session.documentToScreenRow(documentRow, 0);\n var screenTopRow = this.editor.session.documentToScreenRow(this.editor.renderer.$gutterLayer.$lines.get(0).row, 0);\n return screenRow - screenTopRow;\n };\n MouseEvent.prototype.inSelection = function () {\n if (this.$inSelection !== null)\n return this.$inSelection;\n var editor = this.editor;\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty())\n this.$inSelection = false;\n else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n return this.$inSelection;\n };\n MouseEvent.prototype.getButton = function () {\n return event.getButton(this.domEvent);\n };\n MouseEvent.prototype.getShiftKey = function () {\n return this.domEvent.shiftKey;\n };\n MouseEvent.prototype.getAccelKey = function () {\n return useragent.isMac ? this.domEvent.metaKey : this.domEvent.ctrlKey;\n };\n return MouseEvent;\n}());\nexports.MouseEvent = MouseEvent;\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\nfunction DragdropHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var dragImage = dom.createElement(\"div\");\n dragImage.style.cssText = \"top:-100px;position:absolute;z-index:2147483647;opacity:0.5\";\n dragImage.textContent = \"\\xa0\";\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.on(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor, counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n this.onDragStart = function (e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function () {\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n range = editor.getSelectionRange();\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n editor.container.appendChild(dragImage);\n dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0);\n setTimeout(function () {\n editor.container.removeChild(dragImage);\n });\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n isInternal = true;\n this.setState(\"drag\");\n };\n this.onDragEnd = function (e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\")\n editor.session.remove(editor.getSelectionRange());\n editor.$resetCursorStyle();\n }\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n this.onDragEnter = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker)\n addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragOver = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n if (onMouseMoveTimer !== null)\n onMouseMoveTimer = null;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragLeave = function (e) {\n counter--;\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n this.onDrop = function (e) {\n if (!dragCursor)\n return;\n var dataTransfer = e.dataTransfer;\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n }\n else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n }\n else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n clearDragMarker();\n return event.preventDefault(e);\n };\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler), editor);\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.moveCursorToPosition(cursor);\n cursorMovedTime = now;\n cursorPointOnCaretMoved = { x: x, y: y };\n }\n else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n }\n else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = { row: cursor.row, column: cursor.column };\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n }\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n }\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n if (vScroll || (hScroll && !vMovement)) {\n if (!autoScrollStartTime)\n autoScrollStartTime = now;\n else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n editor.renderer.scrollCursorIntoView(scrollCursor);\n }\n else {\n autoScrollStartTime = null;\n }\n }\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused())\n editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.selection.fromOrientedRange(range);\n if (editor.isFocused() && !isInternal)\n editor.$resetCursorStyle();\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n var onMouseMoveTimer = null;\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function () {\n if (onMouseMoveTimer != null && dragSelectionMarker)\n clearDragMarker();\n }, 20);\n }\n }\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function (type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n }\n catch (e) { }\n var dropEffect = \"none\";\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n else if (moveAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"move\";\n else if (copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n return dropEffect;\n }\n}\n(function () {\n this.dragWait = function () {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\n this.dragWaitEnd = function () {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n this.dragReadyEnd = function (e) {\n this.editor.$resetCursorStyle();\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n this.startDrag = function () {\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n this.onMouseDrag = function (e) {\n var target = this.editor.container;\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3)\n target.dragDrop();\n }\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n this.onMouseDown = function (e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget)\n eventTarget.unselectable = \"on\";\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n this.setState(\"dragWait\");\n }\n else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n}).call(DragdropHandler.prototype);\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/mouse/touch_handler\",[\"require\",\"exports\",\"module\",\"ace/mouse/mouse_event\",\"ace/lib/event\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar event = require(\"../lib/event\");\nvar dom = require(\"../lib/dom\");\nexports.addTouchListeners = function (el, editor) {\n var mode = \"scroll\";\n var startX;\n var startY;\n var touchStartT;\n var lastT;\n var longTouchTimer;\n var animationTimer;\n var animationSteps = 0;\n var pos;\n var clickCount = 0;\n var vX = 0;\n var vY = 0;\n var pressed;\n var contextMenu;\n function createContextMenu() {\n var clipboard = window.navigator && window.navigator.clipboard;\n var isOpen = false;\n var updateMenu = function () {\n var selected = editor.getCopyText();\n var hasUndo = editor.session.getUndoManager().hasUndo();\n contextMenu.replaceChild(dom.buildDom(isOpen ? [\"span\",\n !selected && [\"span\", { class: \"ace_mobile-button\", action: \"selectall\" }, \"Select All\"],\n selected && [\"span\", { class: \"ace_mobile-button\", action: \"copy\" }, \"Copy\"],\n selected && [\"span\", { class: \"ace_mobile-button\", action: \"cut\" }, \"Cut\"],\n clipboard && [\"span\", { class: \"ace_mobile-button\", action: \"paste\" }, \"Paste\"],\n hasUndo && [\"span\", { class: \"ace_mobile-button\", action: \"undo\" }, \"Undo\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"find\" }, \"Find\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"openCommandPalette\" }, \"Palette\"]\n ] : [\"span\"]), contextMenu.firstChild);\n };\n var handleClick = function (e) {\n var action = e.target.getAttribute(\"action\");\n if (action == \"more\" || !isOpen) {\n isOpen = !isOpen;\n return updateMenu();\n }\n if (action == \"paste\") {\n clipboard.readText().then(function (text) {\n editor.execCommand(action, text);\n });\n }\n else if (action) {\n if (action == \"cut\" || action == \"copy\") {\n if (clipboard)\n clipboard.writeText(editor.getCopyText());\n else\n document.execCommand(\"copy\");\n }\n editor.execCommand(action);\n }\n contextMenu.firstChild.style.display = \"none\";\n isOpen = false;\n if (action != \"openCommandPalette\")\n editor.focus();\n };\n contextMenu = dom.buildDom([\"div\",\n {\n class: \"ace_mobile-menu\",\n ontouchstart: function (e) {\n mode = \"menu\";\n e.stopPropagation();\n e.preventDefault();\n editor.textInput.focus();\n },\n ontouchend: function (e) {\n e.stopPropagation();\n e.preventDefault();\n handleClick(e);\n },\n onclick: handleClick\n },\n [\"span\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"more\" }, \"...\"]\n ], editor.container);\n }\n function showContextMenu() {\n if (!contextMenu)\n createContextMenu();\n var cursor = editor.selection.cursor;\n var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column);\n var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX;\n var scrollLeft = editor.renderer.scrollLeft;\n var rect = editor.container.getBoundingClientRect();\n contextMenu.style.top = pagePos.pageY - rect.top - 3 + \"px\";\n if (pagePos.pageX - rect.left < rect.width - 70) {\n contextMenu.style.left = \"\";\n contextMenu.style.right = \"10px\";\n }\n else {\n contextMenu.style.right = \"\";\n contextMenu.style.left = leftOffset + scrollLeft - rect.left + \"px\";\n }\n contextMenu.style.display = \"\";\n contextMenu.firstChild.style.display = \"none\";\n editor.on(\"input\", hideContextMenu);\n }\n function hideContextMenu(e) {\n if (contextMenu)\n contextMenu.style.display = \"none\";\n editor.off(\"input\", hideContextMenu);\n }\n function handleLongTap() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n var range = editor.selection.getRange();\n var inSelection = range.contains(pos.row, pos.column);\n if (range.isEmpty() || !inSelection) {\n editor.selection.moveToPosition(pos);\n editor.selection.selectWord();\n }\n mode = \"wait\";\n showContextMenu();\n }\n function switchToSelectionMode() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n editor.selection.moveToPosition(pos);\n var range = clickCount >= 2\n ? editor.selection.getLineRange(pos.row)\n : editor.session.getBracketRange(pos);\n if (range && !range.isEmpty()) {\n editor.selection.setRange(range);\n }\n else {\n editor.selection.selectWord();\n }\n mode = \"wait\";\n }\n event.addListener(el, \"contextmenu\", function (e) {\n if (!pressed)\n return;\n var textarea = editor.textInput.getElement();\n textarea.focus();\n }, editor);\n event.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n if (longTouchTimer || touches.length > 1) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n touchStartT = -1;\n mode = \"zoom\";\n return;\n }\n pressed = editor.$mouseHandler.isMousePressed = true;\n var h = editor.renderer.layerConfig.lineHeight;\n var w = editor.renderer.layerConfig.lineHeight;\n var t = e.timeStamp;\n lastT = t;\n var touchObj = touches[0];\n var x = touchObj.clientX;\n var y = touchObj.clientY;\n if (Math.abs(startX - x) + Math.abs(startY - y) > h)\n touchStartT = -1;\n startX = e.clientX = x;\n startY = e.clientY = y;\n vX = vY = 0;\n var ev = new MouseEvent(e, editor);\n pos = ev.getDocumentPosition();\n if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n clickCount++;\n e.preventDefault();\n e.button = 0;\n switchToSelectionMode();\n }\n else {\n clickCount = 0;\n var cursor = editor.selection.cursor;\n var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true);\n var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true);\n var rect = editor.renderer.scroller.getBoundingClientRect();\n var offsetTop = editor.renderer.layerConfig.offset;\n var offsetLeft = editor.renderer.scrollLeft;\n var weightedDistance = function (x, y) {\n x = x / w;\n y = y / h - 0.75;\n return x * x + y * y;\n };\n if (e.clientX < rect.left) {\n mode = \"zoom\";\n return;\n }\n var diff1 = weightedDistance(e.clientX - rect.left - cursorPos.left + offsetLeft, e.clientY - rect.top - cursorPos.top + offsetTop);\n var diff2 = weightedDistance(e.clientX - rect.left - anchorPos.left + offsetLeft, e.clientY - rect.top - anchorPos.top + offsetTop);\n if (diff1 < 3.5 && diff2 < 3.5)\n mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n if (diff2 < 3.5)\n mode = \"anchor\";\n else if (diff1 < 3.5)\n mode = \"cursor\";\n else\n mode = \"scroll\";\n longTouchTimer = setTimeout(handleLongTap, 450);\n }\n touchStartT = t;\n }, editor);\n event.addListener(el, \"touchend\", function (e) {\n pressed = editor.$mouseHandler.isMousePressed = false;\n if (animationTimer)\n clearInterval(animationTimer);\n if (mode == \"zoom\") {\n mode = \"\";\n animationSteps = 0;\n }\n else if (longTouchTimer) {\n editor.selection.moveToPosition(pos);\n animationSteps = 0;\n showContextMenu();\n }\n else if (mode == \"scroll\") {\n animate();\n hideContextMenu();\n }\n else {\n showContextMenu();\n }\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }, editor);\n event.addListener(el, \"touchmove\", function (e) {\n if (longTouchTimer) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }\n var touches = e.touches;\n if (touches.length > 1 || mode == \"zoom\")\n return;\n var touchObj = touches[0];\n var wheelX = startX - touchObj.clientX;\n var wheelY = startY - touchObj.clientY;\n if (mode == \"wait\") {\n if (wheelX * wheelX + wheelY * wheelY > 4)\n mode = \"cursor\";\n else\n return e.preventDefault();\n }\n startX = touchObj.clientX;\n startY = touchObj.clientY;\n e.clientX = touchObj.clientX;\n e.clientY = touchObj.clientY;\n var t = e.timeStamp;\n var dt = t - lastT;\n lastT = t;\n if (mode == \"scroll\") {\n var mouseEvent = new MouseEvent(e, editor);\n mouseEvent.speed = 1;\n mouseEvent.wheelX = wheelX;\n mouseEvent.wheelY = wheelY;\n if (10 * Math.abs(wheelX) < Math.abs(wheelY))\n wheelX = 0;\n if (10 * Math.abs(wheelY) < Math.abs(wheelX))\n wheelY = 0;\n if (dt != 0) {\n vX = wheelX / dt;\n vY = wheelY / dt;\n }\n editor._emit(\"mousewheel\", mouseEvent);\n if (!mouseEvent.propagationStopped) {\n vX = vY = 0;\n }\n }\n else {\n var ev = new MouseEvent(e, editor);\n var pos = ev.getDocumentPosition();\n if (mode == \"cursor\")\n editor.selection.moveCursorToPosition(pos);\n else if (mode == \"anchor\")\n editor.selection.setSelectionAnchor(pos.row, pos.column);\n editor.renderer.scrollCursorIntoView(pos);\n e.preventDefault();\n }\n }, editor);\n function animate() {\n animationSteps += 60;\n animationTimer = setInterval(function () {\n if (animationSteps-- <= 0) {\n clearInterval(animationTimer);\n animationTimer = null;\n }\n if (Math.abs(vX) < 0.01)\n vX = 0;\n if (Math.abs(vY) < 0.01)\n vY = 0;\n if (animationSteps < 20)\n vX = 0.9 * vX;\n if (animationSteps < 20)\n vY = 0.9 * vY;\n var oldScrollTop = editor.session.getScrollTop();\n editor.renderer.scrollBy(10 * vX, 10 * vY);\n if (oldScrollTop == editor.session.getScrollTop())\n animationSteps = 0;\n }, 10);\n }\n};\n\n});\n\nace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/mouse/touch_handler\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\nvar addTouchListeners = require(\"./touch_handler\").addTouchListeners;\nvar config = require(\"../config\");\nvar MouseHandler = /** @class */ (function () {\n function MouseHandler(editor) {\n var _self = this;\n this.editor = editor;\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n var focusEditor = function (e) {\n var windowBlurred = !document.hasFocus || !document.hasFocus()\n || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n if (windowBlurred)\n window.focus();\n editor.focus();\n setTimeout(function () {\n if (!editor.isFocused())\n editor.focus();\n });\n };\n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"), editor);\n event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"), editor);\n event.addMultiMouseDownListener([\n mouseTarget,\n editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n editor.textInput && editor.textInput.getElement()\n ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\", editor);\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"), editor);\n addTouchListeners(editor.container, editor);\n var gutterEl = editor.renderer.$gutter;\n event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"), editor);\n event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"), editor);\n event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"), editor);\n event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"), editor);\n event.addListener(mouseTarget, \"mousedown\", focusEditor, editor);\n event.addListener(gutterEl, \"mousedown\", focusEditor, editor);\n if (useragent.isIE && editor.renderer.scrollBarV) {\n event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor, editor);\n event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor, editor);\n }\n editor.on(\"mousemove\", function (e) {\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n return;\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n }\n else {\n renderer.setCursorStyle(\"\");\n }\n }, editor);\n }\n MouseHandler.prototype.onMouseEvent = function (name, e) {\n if (!this.editor.session)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n MouseHandler.prototype.onMouseMove = function (name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n MouseHandler.prototype.onMouseWheel = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n this.editor._emit(name, mouseEvent);\n };\n MouseHandler.prototype.setState = function (state) {\n this.state = state;\n };\n MouseHandler.prototype.captureMouse = function (ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n this.isMousePressed = true;\n var editor = this.editor;\n var renderer = this.editor.renderer;\n renderer.$isMousePressed = true;\n var self = this;\n var onMouseMove = function (e) {\n if (!e)\n return;\n if (useragent.isWebKit && !e.which && self.releaseMouse)\n return self.releaseMouse();\n self.x = e.clientX;\n self.y = e.clientY;\n mouseMoveHandler && mouseMoveHandler(e);\n self.mouseEvent = new MouseEvent(e, self.editor);\n self.$mouseMoved = true;\n };\n var onCaptureEnd = function (e) {\n editor.off(\"beforeEndOperation\", onOperationEnd);\n clearInterval(timerId);\n if (editor.session)\n onCaptureInterval();\n self[self.state + \"End\"] && self[self.state + \"End\"](e);\n self.state = \"\";\n self.isMousePressed = renderer.$isMousePressed = false;\n if (renderer.$keepTextAreaAtCursor)\n renderer.$moveTextAreaToCursor();\n self.$onCaptureMouseMove = self.releaseMouse = null;\n e && self.onMouseEvent(\"mouseup\", e);\n editor.endOperation();\n };\n var onCaptureInterval = function () {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function () { onCaptureEnd(ev); });\n }\n var onOperationEnd = function (e) {\n if (!self.releaseMouse)\n return;\n if (editor.curOp.command.name && editor.curOp.selectionChanged) {\n self[self.state + \"End\"] && self[self.state + \"End\"]();\n self.state = \"\";\n self.releaseMouse();\n }\n };\n editor.on(\"beforeEndOperation\", onOperationEnd);\n editor.startOperation({ command: { name: \"mouse\" } });\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n var timerId = setInterval(onCaptureInterval, 20);\n };\n MouseHandler.prototype.cancelContextMenu = function () {\n var stop = function (e) {\n if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n return;\n this.editor.off(\"nativecontextmenu\", stop);\n if (e && e.domEvent)\n event.stopEvent(e.domEvent);\n }.bind(this);\n setTimeout(stop, 10);\n this.editor.on(\"nativecontextmenu\", stop);\n };\n MouseHandler.prototype.destroy = function () {\n if (this.releaseMouse)\n this.releaseMouse();\n };\n return MouseHandler;\n}());\nMouseHandler.prototype.releaseMouse = null;\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n scrollSpeed: { initialValue: 2 },\n dragDelay: { initialValue: (useragent.isMac ? 150 : 0) },\n dragEnabled: { initialValue: true },\n focusTimeout: { initialValue: 0 },\n tooltipFollowsMouse: { initialValue: true }\n});\nexports.MouseHandler = MouseHandler;\n\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar FoldHandler = /** @class */ (function () {\n function FoldHandler(editor) {\n editor.on(\"click\", function (e) {\n var position = e.getDocumentPosition();\n var session = editor.session;\n var fold = session.getFoldAt(position.row, position.column, 1);\n if (fold) {\n if (e.getAccelKey())\n session.removeFold(fold);\n else\n session.expandFold(fold);\n e.stop();\n }\n var target = e.domEvent && e.domEvent.target;\n if (target && dom.hasCssClass(target, \"ace_inline_button\")) {\n if (dom.hasCssClass(target, \"ace_toggle_wrap\")) {\n session.setOption(\"wrap\", !session.getUseWrapMode());\n editor.renderer.scrollCursorIntoView();\n }\n }\n });\n editor.on(\"gutterclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n if (session.foldWidgets && session.foldWidgets[row])\n editor.session.onFoldWidgetClick(row, e);\n if (!editor.isFocused())\n editor.focus();\n e.stop();\n }\n });\n editor.on(\"gutterdblclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n var data = session.getParentFoldRangeData(row, true);\n var range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n if (fold) {\n session.removeFold(fold);\n }\n else {\n session.addFold(\"...\", range);\n editor.renderer.scrollCursorIntoView({ row: range.start.row, column: 0 });\n }\n }\n e.stop();\n }\n });\n }\n return FoldHandler;\n}());\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar keyUtil = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\nvar KeyBinding = /** @class */ (function () {\n function KeyBinding(editor) {\n this.$editor = editor;\n this.$data = { editor: editor };\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n }\n KeyBinding.prototype.setDefaultHandler = function (kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n KeyBinding.prototype.setKeyboardHandler = function (kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb)\n return;\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n this.removeKeyboardHandler(h[h.length - 1]);\n this.addKeyboardHandler(kb, 1);\n };\n KeyBinding.prototype.addKeyboardHandler = function (kb, pos) {\n if (!kb)\n return;\n if (typeof kb == \"function\" && !kb.handleKeyboard)\n kb.handleKeyboard = kb;\n var i = this.$handlers.indexOf(kb);\n if (i != -1)\n this.$handlers.splice(i, 1);\n if (pos == undefined)\n this.$handlers.push(kb);\n else\n this.$handlers.splice(pos, 0, kb);\n if (i == -1 && kb.attach)\n kb.attach(this.$editor);\n };\n KeyBinding.prototype.removeKeyboardHandler = function (kb) {\n var i = this.$handlers.indexOf(kb);\n if (i == -1)\n return false;\n this.$handlers.splice(i, 1);\n kb.detach && kb.detach(this.$editor);\n return true;\n };\n KeyBinding.prototype.getKeyboardHandler = function () {\n return this.$handlers[this.$handlers.length - 1];\n };\n KeyBinding.prototype.getStatusText = function () {\n var data = this.$data;\n var editor = data.editor;\n return this.$handlers.map(function (h) {\n return h.getStatusText && h.getStatusText(editor, data) || \"\";\n }).filter(Boolean).join(\" \");\n };\n KeyBinding.prototype.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(this.$data, hashId, keyString, keyCode, e);\n if (!toExecute || !toExecute.command)\n continue;\n if (toExecute.command == \"null\") {\n success = true;\n }\n else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n }\n if (success && e && hashId != -1 &&\n toExecute.passEvent != true && toExecute.command.passEvent != true) {\n event.stopEvent(e);\n }\n if (success)\n break;\n }\n if (!success && hashId == -1) {\n toExecute = { command: \"insertstring\" };\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n if (success && this.$editor._signal)\n this.$editor._signal(\"keyboardActivity\", toExecute);\n return success;\n };\n KeyBinding.prototype.onCommandKey = function (e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n return this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n KeyBinding.prototype.onTextInput = function (text) {\n return this.$callKeyboardHandlers(-1, text);\n };\n return KeyBinding;\n}());\nexports.KeyBinding = KeyBinding;\n\n});\n\nace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\nvar ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\nvar dir = 0, hiLevel = 0;\nvar lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false;\nvar impTab_LTR = [ [0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]\n];\nvar impTab_RTL = [ [2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]\n];\nvar LTR = 0, RTL = 1;\nvar L = 0;\nvar R = 1;\nvar EN = 2;\nvar AN = 3;\nvar ON = 4;\nvar B = 5;\nvar S = 6;\nvar AL = 7;\nvar WS = 8;\nvar CS = 9;\nvar ES = 10;\nvar ET = 11;\nvar NSM = 12;\nvar LRE = 13;\nvar RLE = 14;\nvar PDF = 15;\nvar LRO = 16;\nvar RLO = 17;\nvar BN = 18;\nvar UnicodeTBL00 = [\n BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S,\n WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS,\n EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN,\n BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON,\n ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON\n];\nvar UnicodeTBL20 = [\n WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS,\n ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS\n];\nfunction _computeLevels(chars, levels, len, charTypes) {\n var impTab = dir ? impTab_RTL : impTab_LTR, prevState = null, newClass = null, newLevel = null, newState = 0, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n if (!charTypes) {\n for (i = 0, charTypes = []; i < len; i++) {\n charTypes[i] = _getCharacterType(chars[i]);\n }\n }\n hiLevel = dir;\n lastArabic = false;\n hasUBAT_AL = false;\n hasUBAT_B = false;\n hasUBAT_S = false;\n for (ix = 0; ix < len; ix++) {\n prevState = newState;\n classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n newState = impTab[prevState][newClass];\n action = newState & 0xF0;\n newState &= 0x0F;\n levels[ix] = newLevel = impTab[newState][5];\n if (action > 0) {\n if (action == 0x10) {\n for (i = condPos; i < ix; i++) {\n levels[i] = 1;\n }\n condPos = -1;\n }\n else {\n condPos = -1;\n }\n }\n cond = impTab[newState][6];\n if (cond) {\n if (condPos == -1) {\n condPos = ix;\n }\n }\n else {\n if (condPos > -1) {\n for (i = condPos; i < ix; i++) {\n levels[i] = newLevel;\n }\n condPos = -1;\n }\n }\n if (charTypes[ix] == B) {\n levels[ix] = 0;\n }\n hiLevel |= newLevel;\n }\n if (hasUBAT_S) {\n for (i = 0; i < len; i++) {\n if (charTypes[i] == S) {\n levels[i] = dir;\n for (var j = i - 1; j >= 0; j--) {\n if (charTypes[j] == WS) {\n levels[j] = dir;\n }\n else {\n break;\n }\n }\n }\n }\n }\n}\nfunction _invertLevel(lev, levels, _array) {\n if (hiLevel < lev) {\n return;\n }\n if (lev == 1 && dir == RTL && !hasUBAT_B) {\n _array.reverse();\n return;\n }\n var len = _array.length, start = 0, end, lo, hi, tmp;\n while (start < len) {\n if (levels[start] >= lev) {\n end = start + 1;\n while (end < len && levels[end] >= lev) {\n end++;\n }\n for (lo = start, hi = end - 1; lo < hi; lo++, hi--) {\n tmp = _array[lo];\n _array[lo] = _array[hi];\n _array[hi] = tmp;\n }\n start = end;\n }\n start++;\n }\n}\nfunction _getCharClass(chars, types, classes, ix) {\n var cType = types[ix], wType, nType, len, i;\n switch (cType) {\n case L:\n case R:\n lastArabic = false;\n case ON:\n case AN:\n return cType;\n case EN:\n return lastArabic ? AN : EN;\n case AL:\n lastArabic = true;\n hasUBAT_AL = true;\n return R;\n case WS:\n return ON;\n case CS:\n if (ix < 1 || (ix + 1) >= types.length ||\n ((wType = classes[ix - 1]) != EN && wType != AN) ||\n ((nType = types[ix + 1]) != EN && nType != AN)) {\n return ON;\n }\n if (lastArabic) {\n nType = AN;\n }\n return nType == wType ? nType : ON;\n case ES:\n wType = ix > 0 ? classes[ix - 1] : B;\n if (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN) {\n return EN;\n }\n return ON;\n case ET:\n if (ix > 0 && classes[ix - 1] == EN) {\n return EN;\n }\n if (lastArabic) {\n return ON;\n }\n i = ix + 1;\n len = types.length;\n while (i < len && types[i] == ET) {\n i++;\n }\n if (i < len && types[i] == EN) {\n return EN;\n }\n return ON;\n case NSM:\n len = types.length;\n i = ix + 1;\n while (i < len && types[i] == NSM) {\n i++;\n }\n if (i < len) {\n var c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n wType = types[i];\n if (rtlCandidate && (wType == R || wType == AL)) {\n return R;\n }\n }\n if (ix < 1 || (wType = types[ix - 1]) == B) {\n return ON;\n }\n return classes[ix - 1];\n case B:\n lastArabic = false;\n hasUBAT_B = true;\n return dir;\n case S:\n hasUBAT_S = true;\n return ON;\n case LRE:\n case RLE:\n case LRO:\n case RLO:\n case PDF:\n lastArabic = false;\n case BN:\n return ON;\n }\n}\nfunction _getCharacterType(ch) {\n var uc = ch.charCodeAt(0), hi = uc >> 8;\n if (hi == 0) {\n return ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n }\n else if (hi == 5) {\n return (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n }\n else if (hi == 6) {\n if (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n return NSM;\n else if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n return AN;\n else if (uc == 0x066A)\n return ET;\n else if (/[\\u06f0-\\u06f9]/.test(ch))\n return EN;\n else\n return AL;\n }\n else if (hi == 0x20 && uc <= 0x205F) {\n return UnicodeTBL20[uc & 0xFF];\n }\n else if (hi == 0xFE) {\n return (uc >= 0xFE70 ? AL : ON);\n }\n return ON;\n}\nfunction _isArabicDiacritics(ch) {\n return (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\nexports.RLE = 7;\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function (text, textCharTypes, isRtl) {\n if (text.length < 2)\n return {};\n var chars = text.split(\"\"), logicalFromVisual = new Array(chars.length), bidiLevels = new Array(chars.length), levels = [];\n dir = isRtl ? RTL : LTR;\n _computeLevels(chars, levels, chars.length, textCharTypes);\n for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++)\n ;\n _invertLevel(2, levels, logicalFromVisual);\n _invertLevel(1, levels, logicalFromVisual);\n for (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n if (textCharTypes[i] === AN) {\n levels[i] = exports.AN;\n }\n else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE)\n || textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n levels[i] = exports.ON_R;\n }\n else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n levels[i - 1] = levels[i] = exports.R_H;\n i++;\n }\n }\n if (chars[chars.length - 1] === exports.DOT)\n levels[chars.length - 1] = exports.B;\n if (chars[0] === '\\u202B')\n levels[0] = exports.RLE;\n for (var i = 0; i < logicalFromVisual.length; i++) {\n bidiLevels[i] = levels[logicalFromVisual[i]];\n }\n return { 'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels };\n};\nexports.hasBidiCharacters = function (text, textCharTypes) {\n var ret = false;\n for (var i = 0; i < text.length; i++) {\n textCharTypes[i] = _getCharacterType(text.charAt(i));\n if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN))\n ret = true;\n }\n return ret;\n};\nexports.getVisualFromLogicalIdx = function (logIdx, rowMap) {\n for (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n if (rowMap.logicalFromVisual[i] == logIdx)\n return i;\n }\n return 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\nvar BidiHandler = /** @class */ (function () {\n function BidiHandler(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.$isRtl = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.EOF = \"\\xB6\";\n this.RLE = \"\\u202B\";\n this.contentWidth = 0;\n this.fontMetrics = null;\n this.rtlLineOffset = 0;\n this.wrapOffset = 0;\n this.isMoveLeftOperation = false;\n this.seenBidi = bidiRE.test(session.getValue());\n }\n BidiHandler.prototype.isBidiRow = function (screenRow, docRow, splitIndex) {\n if (!this.seenBidi)\n return false;\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n return this.bidiMap.bidiLevels;\n };\n BidiHandler.prototype.onChange = function (delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n }\n else {\n this.currentRow = null;\n }\n };\n BidiHandler.prototype.getDocumentRow = function () {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0)\n docRow = this.session.$docRowCache[index];\n }\n return docRow;\n };\n BidiHandler.prototype.getSplitIndex = function () {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex)\n break;\n prevIndex = currentIndex;\n splitIndex++;\n }\n }\n else {\n splitIndex = this.currentRow;\n }\n return splitIndex;\n };\n BidiHandler.prototype.updateRowLine = function (docRow, splitIndex) {\n if (docRow === undefined)\n docRow = this.getDocumentRow();\n var isLastRow = (docRow === this.session.getLength() - 1), endOfLine = isLastRow ? this.EOF : this.EOL;\n this.wrapIndent = 0;\n this.line = this.session.getLine(docRow);\n this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n if (splits) {\n if (splitIndex === undefined)\n splitIndex = this.getSplitIndex();\n if (splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n this.line = (splitIndex < splits.length) ?\n this.line.substring(splits[splitIndex - 1], splits[splitIndex]) :\n this.line.substring(splits[splits.length - 1]);\n }\n else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n if (splitIndex == splits.length) {\n this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT;\n }\n }\n }\n else {\n this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n }\n var session = this.session, shift = 0, size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function (ch, i) {\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n return ch;\n });\n if (this.isRtlDir) {\n this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line;\n this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n }\n };\n BidiHandler.prototype.updateBidiMap = function () {\n var textCharTypes = [];\n if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n }\n else {\n this.bidiMap = {};\n }\n };\n BidiHandler.prototype.markAsDirty = function () {\n this.currentRow = null;\n };\n BidiHandler.prototype.updateCharacterWidths = function (fontMetrics) {\n if (this.characterWidth === fontMetrics.$characterSize.width)\n return;\n this.fontMetrics = fontMetrics;\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n this.currentRow = null;\n };\n BidiHandler.prototype.setShowInvisibles = function (showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n BidiHandler.prototype.setEolChar = function (eolChar) {\n this.EOL = eolChar;\n };\n BidiHandler.prototype.setContentWidth = function (width) {\n this.contentWidth = width;\n };\n BidiHandler.prototype.isRtlLine = function (row) {\n if (this.$isRtl)\n return true;\n if (row != undefined)\n return (this.session.getLine(row).charAt(0) == this.RLE);\n else\n return this.isRtlDir;\n };\n BidiHandler.prototype.setRtlDirection = function (editor, isRtlDir) {\n var cursor = editor.getCursorPosition();\n for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE)\n editor.session.doc.removeInLine(row, 0, 1);\n else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE)\n editor.session.doc.insert({ column: 0, row: row }, editor.session.$bidiHandler.RLE);\n }\n };\n BidiHandler.prototype.getPosLeft = function (col) {\n col -= this.wrapIndent;\n var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0;\n var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap), levels = this.bidiMap.bidiLevels, left = 0;\n if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0)\n visualIdx++;\n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0))\n left += this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n if (this.isRtlDir)\n left += this.rtlLineOffset;\n return left;\n };\n BidiHandler.prototype.getSelections = function (startCol, endCol) {\n var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0, selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent, isSelected = false, isSelectedPrev = false, selectionStart = 0;\n if (this.wrapIndent)\n offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n }\n else if (!isSelected && isSelectedPrev) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n if (isSelected && (visIdx === levels.length)) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n if (this.isRtlDir) {\n for (var i = 0; i < selections.length; i++) {\n selections[i].left += this.rtlLineOffset;\n }\n }\n return selections;\n };\n BidiHandler.prototype.offsetToCol = function (posX) {\n if (this.isRtlDir)\n posX -= this.rtlLineOffset;\n var logicalIdx = 0, posX = Math.max(posX, 0), offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels, charWidth = this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n while (posX > offset + charWidth / 2) {\n offset += charWidth;\n if (visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)) {\n if (posX < offset)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)) {\n logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n }\n else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))) {\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n }\n else {\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n if (logicalIdx === 0 && this.isRtlDir)\n logicalIdx++;\n return (logicalIdx + this.wrapIndent);\n };\n return BidiHandler;\n}());\nexports.BidiHandler = BidiHandler;\n\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Selection = /** @class */ (function () {\n function Selection(session) {\n this.session = session;\n this.doc = session.getDocument();\n this.clearSelection();\n this.cursor = this.lead = this.doc.createAnchor(0, 0);\n this.anchor = this.doc.createAnchor(0, 0);\n this.$silent = false;\n var self = this;\n this.cursor.on(\"change\", function (e) {\n self.$cursorChanged = true;\n if (!self.$silent)\n self._emit(\"changeCursor\");\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n self.$desiredColumn = null;\n });\n this.anchor.on(\"change\", function () {\n self.$anchorChanged = true;\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n });\n }\n Selection.prototype.isEmpty = function () {\n return this.$isEmpty || (this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column);\n };\n Selection.prototype.isMultiLine = function () {\n return !this.$isEmpty && this.anchor.row != this.cursor.row;\n };\n Selection.prototype.getCursor = function () {\n return this.lead.getPosition();\n };\n Selection.prototype.setAnchor = function (row, column) {\n this.$isEmpty = false;\n this.anchor.setPosition(row, column);\n };\n Selection.prototype.getAnchor = function () {\n if (this.$isEmpty)\n return this.getSelectionLead();\n return this.anchor.getPosition();\n };\n Selection.prototype.getSelectionLead = function () {\n return this.lead.getPosition();\n };\n Selection.prototype.isBackwards = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n };\n Selection.prototype.getRange = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n if (this.$isEmpty)\n return Range.fromPoints(lead, lead);\n return this.isBackwards()\n ? Range.fromPoints(lead, anchor)\n : Range.fromPoints(anchor, lead);\n };\n Selection.prototype.clearSelection = function () {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n Selection.prototype.selectAll = function () {\n this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n };\n Selection.prototype.setRange = function (range, reverse) {\n var start = reverse ? range.end : range.start;\n var end = reverse ? range.start : range.end;\n this.$setSelection(start.row, start.column, end.row, end.column);\n };\n Selection.prototype.$setSelection = function (anchorRow, anchorColumn, cursorRow, cursorColumn) {\n if (this.$silent)\n return;\n var wasEmpty = this.$isEmpty;\n var wasMultiselect = this.inMultiSelectMode;\n this.$silent = true;\n this.$cursorChanged = this.$anchorChanged = false;\n this.anchor.setPosition(anchorRow, anchorColumn);\n this.cursor.setPosition(cursorRow, cursorColumn);\n this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n this.$silent = false;\n if (this.$cursorChanged)\n this._emit(\"changeCursor\");\n if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect)\n this._emit(\"changeSelection\");\n };\n Selection.prototype.$moveSelection = function (mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n this.setSelectionAnchor(lead.row, lead.column);\n mover.call(this);\n };\n Selection.prototype.selectTo = function (row, column) {\n this.$moveSelection(function () {\n this.moveCursorTo(row, column);\n });\n };\n Selection.prototype.selectToPosition = function (pos) {\n this.$moveSelection(function () {\n this.moveCursorToPosition(pos);\n });\n };\n Selection.prototype.moveTo = function (row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveToPosition = function (pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n Selection.prototype.selectUp = function () {\n this.$moveSelection(this.moveCursorUp);\n };\n Selection.prototype.selectDown = function () {\n this.$moveSelection(this.moveCursorDown);\n };\n Selection.prototype.selectRight = function () {\n this.$moveSelection(this.moveCursorRight);\n };\n Selection.prototype.selectLeft = function () {\n this.$moveSelection(this.moveCursorLeft);\n };\n Selection.prototype.selectLineStart = function () {\n this.$moveSelection(this.moveCursorLineStart);\n };\n Selection.prototype.selectLineEnd = function () {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n Selection.prototype.selectFileEnd = function () {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n Selection.prototype.selectFileStart = function () {\n this.$moveSelection(this.moveCursorFileStart);\n };\n Selection.prototype.selectWordRight = function () {\n this.$moveSelection(this.moveCursorWordRight);\n };\n Selection.prototype.selectWordLeft = function () {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n Selection.prototype.getWordRange = function (row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n return this.session.getWordRange(row, column);\n };\n Selection.prototype.selectWord = function () {\n this.setSelectionRange(this.getWordRange());\n };\n Selection.prototype.selectAWord = function () {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n Selection.prototype.getLineRange = function (row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n var foldLine = this.session.getFoldLine(rowStart);\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n }\n else {\n rowEnd = rowStart;\n }\n if (excludeLastChar === true)\n return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n else\n return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n Selection.prototype.selectLine = function () {\n this.setSelectionRange(this.getLineRange());\n };\n Selection.prototype.moveCursorUp = function () {\n this.moveCursorBy(-1, 0);\n };\n Selection.prototype.moveCursorDown = function () {\n this.moveCursorBy(1, 0);\n };\n Selection.prototype.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length - 1 == tabSize;\n };\n Selection.prototype.moveCursorLeft = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n }\n else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n }\n else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n Selection.prototype.moveCursorRight = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n }\n else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n }\n else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n Selection.prototype.moveCursorLineStart = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column);\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n Selection.prototype.moveCursorLineEnd = function () {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0)\n lineEnd.column = textEnd;\n }\n }\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n Selection.prototype.moveCursorFileEnd = function () {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveCursorFileStart = function () {\n this.moveCursorTo(0, 0);\n };\n Selection.prototype.moveCursorLongWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n if (this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1)\n this.moveCursorWordRight();\n return;\n }\n if (this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveCursorLongWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n var leftOfCursor = lang.stringReverse(str);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n if (this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0)\n this.moveCursorWordLeft();\n return;\n }\n if (this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n Selection.prototype.$shortWordEndIndex = function (rightOfCursor) {\n var index = 0, ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n tokenRe.lastIndex = 0;\n if (this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index < 1) {\n tokenRe.lastIndex = 0;\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index++;\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index > 2)\n break;\n }\n }\n }\n }\n }\n tokenRe.lastIndex = 0;\n return index;\n };\n Selection.prototype.moveCursorShortWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold)\n return this.moveCursorTo(fold.end.row, fold.end.column);\n if (column == line.length) {\n var l = this.doc.getLength();\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = \"\";\n column = 0;\n }\n var index = this.$shortWordEndIndex(rightOfCursor);\n this.moveCursorTo(row, column + index);\n };\n Selection.prototype.moveCursorShortWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1))\n return this.moveCursorTo(fold.start.row, fold.start.column);\n var line = this.session.getLine(row).substring(0, column);\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n column = line.length;\n if (!/\\s+$/.test(line))\n line = \"\";\n }\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n return this.moveCursorTo(row, column - index);\n };\n Selection.prototype.moveCursorWordRight = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n Selection.prototype.moveCursorWordLeft = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n Selection.prototype.moveCursorBy = function (rows, chars) {\n var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column);\n var offsetX;\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n }\n else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n if (this.$desiredColumn)\n screenPos.column = this.$desiredColumn;\n else\n this.$desiredColumn = screenPos.column;\n }\n if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) {\n var widget = this.session.lineWidgets[this.lead.row];\n if (rows < 0)\n rows -= widget.rowsAbove || 0;\n else if (rows > 0)\n rows += widget.rowCount - (widget.rowsAbove || 0);\n }\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n }\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n Selection.prototype.moveCursorToPosition = function (position) {\n this.moveCursorTo(position.row, position.column);\n };\n Selection.prototype.moveCursorTo = function (row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1)\n column = column - 1;\n else\n column = column + 1;\n }\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n if (!keepDesiredColumn)\n this.$desiredColumn = null;\n };\n Selection.prototype.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n Selection.prototype.detach = function () {\n this.lead.detach();\n this.anchor.detach();\n };\n Selection.prototype.fromOrientedRange = function (range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n Selection.prototype.toOrientedRange = function (range) {\n var r = this.getRange();\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n }\n else {\n range = r;\n }\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n Selection.prototype.getRangeOfMovements = function (func) {\n var start = this.getCursor();\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start, end);\n }\n catch (e) {\n return Range.fromPoints(start, start);\n }\n finally {\n this.moveCursorToPosition(start);\n }\n };\n Selection.prototype.toJSON = function () {\n if (this.rangeCount) {\n var data = this.ranges.map(function (r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n }\n else {\n var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n Selection.prototype.fromJSON = function (data) {\n if (data.start == undefined) {\n if (this.rangeList && data.length > 1) {\n this.toSingleRange(data[0]);\n for (var i = data.length; i--;) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards)\n r.cursor = r.start;\n this.addRange(r, true);\n }\n return;\n }\n else {\n data = data[0];\n }\n }\n if (this.rangeList)\n this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n Selection.prototype.isEqual = function (data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n return false;\n if (!data.length || !this.ranges)\n return this.getRange().isEqual(data);\n for (var i = this.ranges.length; i--;) {\n if (!this.ranges[i].isEqual(data[i]))\n return false;\n }\n return true;\n };\n return Selection;\n}());\nSelection.prototype.setSelectionAnchor = Selection.prototype.setAnchor;\nSelection.prototype.getSelectionAnchor = Selection.prototype.getAnchor;\nSelection.prototype.setSelectionRange = Selection.prototype.setRange;\noop.implement(Selection.prototype, EventEmitter);\nexports.Selection = Selection;\n\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/report_error\"], function(require, exports, module){\"use strict\";\nvar reportError = require(\"./lib/report_error\").reportError;\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = /** @class */ (function () {\n function Tokenizer(rules) {\n this.states = rules;\n this.regExps = {};\n this.matchMappings = {};\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = { defaultToken: \"text\" };\n var flag = \"g\";\n var splitterRurles = [];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken)\n mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive && flag.indexOf(\"i\") === -1)\n flag += \"i\";\n if (rule.unicode && flag.indexOf(\"u\") === -1)\n flag += \"u\";\n if (rule.regex == null)\n continue;\n if (rule.regex instanceof RegExp)\n rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n }\n else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", {\n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n }\n else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n }\n else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1)\n rule.onMatch = this.$applyToken;\n else\n rule.onMatch = rule.token;\n }\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function (match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n }\n else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n if (!rule.splitRegex && typeof rule.token != \"string\")\n splitterRurles.push(rule); // flag will be known only at the very end\n }\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch)\n rule.onMatch = null;\n }\n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n splitterRurles.forEach(function (rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n }\n Tokenizer.prototype.$setMaxTokenCount = function (m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n Tokenizer.prototype.$applyToken = function (str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\")\n return [{ type: types, value: str }];\n var tokens = [];\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n return tokens;\n };\n Tokenizer.prototype.$arrayTokens = function (str) {\n if (!str)\n return [];\n var values = this.splitRegex.exec(str);\n if (!values)\n return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n return tokens;\n };\n Tokenizer.prototype.removeCapturingGroups = function (src) {\n var r = src.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!<]|(\\()/g, function (x, y) { return y ? \"(?:\" : x; });\n return r;\n };\n Tokenizer.prototype.createSplitterRegexp = function (src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function (m, esc, parenOpen, parenClose, square, index) {\n if (inChClass) {\n inChClass = square != \"]\";\n }\n else if (square) {\n inChClass = true;\n }\n else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index + 1;\n lastCapture.stack = -1;\n }\n stack--;\n }\n else if (parenOpen) {\n stack++;\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n return m;\n });\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n if (src.charAt(0) != \"^\")\n src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\")\n src += \"$\";\n return new RegExp(src, (flag || \"\").replace(\"g\", \"\"));\n };\n Tokenizer.prototype.getLineTokens = function (line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n }\n else\n var stack = [];\n var currentState = startState || \"start\";\n var state = this.states[currentState];\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n var match, tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n var token = { type: null, value: \"\" };\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n if (token.type == type) {\n token.value += skipped;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: skipped };\n }\n }\n for (var i = 0; i < match.length - 2; i++) {\n if (match[i + 1] === undefined)\n continue;\n rule = state[mapping[i]];\n if (rule.onMatch)\n type = rule.onMatch(value, currentState, stack, line);\n else\n type = rule.token;\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n }\n else {\n currentState = rule.next(currentState, stack);\n }\n state = this.states[currentState];\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n if (rule.consumeLineEnd)\n lastIndex = index;\n break;\n }\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: value };\n }\n }\n else if (type) {\n if (token.type)\n tokens.push(token);\n token = { type: null, value: \"\" };\n for (var i = 0; i < type.length; i++)\n tokens.push(type[i]);\n }\n }\n if (lastIndex == line.length)\n break;\n lastIndex = index;\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n while (lastIndex < line.length) {\n if (token.type)\n tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 500),\n type: \"overflow\"\n };\n }\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n if (token.type)\n tokens.push(token);\n if (stack.length > 1) {\n if (stack[0] !== currentState)\n stack.unshift(\"#tmp\", currentState);\n }\n return {\n tokens: tokens,\n state: stack.length ? stack : currentState\n };\n };\n return Tokenizer;\n}());\nTokenizer.prototype.reportError = reportError;\nexports.Tokenizer = Tokenizer;\n\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nvar deepCopy = require(\"../lib/deep_copy\").deepCopy;\nvar TextHighlightRules = function () {\n this.$rules = {\n \"start\": [{\n token: \"empty_line\",\n regex: '^$'\n }, {\n defaultToken: \"text\"\n }]\n };\n};\n(function () {\n this.addRules = function (rules, prefix) {\n if (!prefix) {\n for (var key in rules)\n this.$rules[key] = rules[key];\n return;\n }\n for (var key in rules) {\n var state = rules[key];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0)\n rule.next = prefix + rule.next;\n }\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n rule.nextState = prefix + rule.nextState;\n }\n }\n this.$rules[prefix + key] = state;\n }\n };\n this.getRules = function () {\n return this.$rules;\n };\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\"\n ? new HighlightRules().getRules()\n : HighlightRules;\n if (states) {\n for (var i = 0; i < states.length; i++)\n states[i] = prefix + states[i];\n }\n else {\n states = [];\n for (var key in embedRules)\n states.push(prefix + key);\n }\n this.addRules(embedRules, prefix);\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n for (var i = 0; i < states.length; i++)\n addRules.apply(this.$rules[states[i]], deepCopy(escapeRules));\n }\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n };\n this.getEmbeds = function () {\n return this.$embeds;\n };\n var pushState = function (currentState, stack) {\n if (currentState != \"start\" || stack.length)\n stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n var popState = function (currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n this.normalizeRules = function () {\n var id = 0;\n var rules = this.$rules;\n function processState(key) {\n var state = rules[key];\n state.processed = true;\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next)\n rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n var next = rule.next || rule.push;\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\")\n stateName = stateName[0] || \"\";\n if (rules[stateName])\n stateName += id++;\n }\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n }\n else if (next == \"pop\") {\n rule.next = popState;\n }\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push)\n rules[r].push.apply(rules[r], rule.rules[r]);\n }\n else {\n rules[r] = rule.rules[r];\n }\n }\n }\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n if (includeName) {\n if (includeName === \"$self\")\n includeName = \"start\";\n if (Array.isArray(includeName))\n toInsert = includeName.map(function (x) { return rules[x]; });\n else\n toInsert = rules[includeName];\n }\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape)\n args = args.filter(function (x) { return !x.next; });\n state.splice.apply(state, args);\n i--;\n }\n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive);\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\n this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n this.$keywordList = [];\n Object.keys(map).forEach(function (className) {\n var a = map[className];\n var list = a.split(splitChar || \"|\");\n for (var i = list.length; i--;) {\n var word = list[i];\n this.$keywordList.push(word);\n if (ignoreCase)\n word = word.toLowerCase();\n keywords[word] = className;\n }\n }, this);\n map = null;\n return ignoreCase\n ? function (value) { return keywords[value.toLowerCase()] || defaultToken; }\n : function (value) { return keywords[value] || defaultToken; };\n };\n this.getKeywords = function () {\n return this.$keywords;\n };\n}).call(TextHighlightRules.prototype);\nexports.TextHighlightRules = TextHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar Behaviour = function () {\n this.$behaviours = {};\n};\n(function () {\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n this.$behaviours[name][action] = callback;\n };\n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n }\n else {\n var behaviours = mode.getBehaviours(filter);\n }\n this.addBehaviours(behaviours);\n };\n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n }\n else {\n var ret = {};\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n return ret;\n }\n };\n}).call(Behaviour.prototype);\nexports.Behaviour = Behaviour;\n\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar TokenIterator = /** @class */ (function () {\n function TokenIterator(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n }\n TokenIterator.prototype.stepBackward = function () {\n this.$tokenIndex -= 1;\n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.stepForward = function () {\n this.$tokenIndex += 1;\n var rowCount;\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount)\n rowCount = this.$session.getLength();\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.getCurrentTokenRow = function () {\n return this.$row;\n };\n TokenIterator.prototype.getCurrentTokenColumn = function () {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined)\n return column;\n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n return column;\n };\n TokenIterator.prototype.getCurrentTokenPosition = function () {\n return { row: this.$row, column: this.getCurrentTokenColumn() };\n };\n TokenIterator.prototype.getCurrentTokenRange = function () {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n return TokenIterator;\n}());\nexports.TokenIterator = TokenIterator;\n\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nvar SAFE_INSERT_IN_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"];\nvar context;\nvar contextCache = {};\nvar defaultQuotes = { '\"': '\"', \"'\": \"'\" };\nvar initContext = function (editor) {\n var id = -1;\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n contextCache = { rangeCount: editor.multiSelect.rangeCount };\n }\n if (contextCache[id])\n return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n};\nvar getWrapped = function (selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [\n 0,\n selection.start.column + 1,\n rowDiff,\n selection.end.column + (rowDiff ? 0 : 1)\n ]\n };\n};\nvar CstyleBehaviour = function (options) {\n options = options || {};\n this.add(\"braces\", \"insertion\", function (state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n }\n else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 }, '}');\n if (!openBracePos)\n return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n }\n else if (closing) {\n var next_indent = this.$getIndent(line);\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n var indent = next_indent + session.getTabString();\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n this.add(\"braces\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar == '}') {\n range.end.column++;\n return range;\n }\n else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n this.add(\"parens\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n }\n else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"parens\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"brackets\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n }\n else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"brackets\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1)\n return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n }\n else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column - 1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n return null;\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type))\n pair = false;\n }\n else {\n if (stringBefore && !stringAfter)\n return null; // wrap string with different quote\n if (stringBefore && stringAfter)\n return null; // do not pair quotes inside strings\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(rightChar);\n var pairQuotesAfter = session.$mode.$pairQuotesAfter;\n var shouldPairQuotes = pairQuotesAfter && pairQuotesAfter[quote] && pairQuotesAfter[quote].test(leftChar);\n if ((!shouldPairQuotes && isWordBefore) || isWordAfter)\n return null; // before or after alphanumeric\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n return null; // there is rightChar and it isn't closing\n var charBefore = line[cursor.column - 2];\n if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore)))\n return null;\n pair = true;\n }\n return {\n text: pair ? quote + quote : \"\",\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n if (options.closeDocComment !== false) {\n this.add(\"doc comment end\", \"insertion\", function (state, action, editor, session, text) {\n if (state === \"doc-start\" && (text === \"\\n\" || text === \"\\r\\n\") && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var nextLine = session.doc.getLine(cursor.row + 1);\n var indent = this.$getIndent(line);\n if (/\\s*\\*/.test(nextLine)) {\n if (/^\\s*\\*/.test(line)) {\n return {\n text: text + indent + \"* \",\n selection: [1, 3 + indent.length, 1, 3 + indent.length]\n };\n }\n else {\n return {\n text: text + indent + \" * \",\n selection: [1, 3 + indent.length, 1, 3 + indent.length]\n };\n }\n }\n if (/\\/\\*\\*/.test(line.substring(0, cursor.column))) {\n return {\n text: text + indent + \" * \" + text + \" \" + indent + \"*/\",\n selection: [1, 4 + indent.length, 1, 4 + indent.length]\n };\n }\n }\n });\n }\n};\nCstyleBehaviour.isSaneInsertion = function (editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n if (/[)}\\]]/.test(editor.session.getLine(cursor.row)[cursor.column]))\n return true;\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n return false;\n }\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row ||\n this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\nCstyleBehaviour.$matchTokenType = function (token, types) {\n return types.indexOf(token.type || token) > -1;\n};\nCstyleBehaviour.recordAutoInsert = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\n context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n};\nCstyleBehaviour.recordMaybeInsert = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isMaybeInsertedClosing(cursor, line))\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n};\nCstyleBehaviour.isAutoInsertedClosing = function (cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 &&\n cursor.row === context.autoInsertedRow &&\n bracket === context.autoInsertedLineEnd[0] &&\n line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\nCstyleBehaviour.isMaybeInsertedClosing = function (cursor, line) {\n return context.maybeInsertedBrackets > 0 &&\n cursor.row === context.maybeInsertedRow &&\n line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\nCstyleBehaviour.popAutoInsertedClosing = function () {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n};\nCstyleBehaviour.clearMaybeInsertedClosing = function () {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n};\noop.inherits(CstyleBehaviour, Behaviour);\nexports.CstyleBehaviour = CstyleBehaviour;\n\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar wordChars = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2];\nvar code = 0;\nvar str = [];\nfor (var i = 0; i < wordChars.length; i += 2) {\n str.push(code += wordChars[i]);\n if (wordChars[i + 1])\n str.push(45, code += wordChars[i + 1]);\n}\nexports.wordChars = String.fromCharCode.apply(null, str);\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar config = require(\"../config\");\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nvar Mode = function () {\n this.HighlightRules = TextHighlightRules;\n};\n(function () {\n this.$defaultBehaviour = new CstyleBehaviour();\n this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n this.getTokenizer = function () {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n return this.$tokenizer;\n };\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n this.toggleCommentLines = function (state, session, startRow, endRow) {\n var doc = session.doc;\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n if (!this.lineCommentStart) {\n if (!this.blockComment)\n return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n var comment = function (line, i) {\n if (testRemove(line, i))\n return;\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({ row: i, column: line.length }, lineCommentEnd);\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var uncomment = function (line, i) {\n var m;\n if (m = line.match(regexpEnd))\n doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart))\n doc.removeInLine(i, m[1].length, m[0].length);\n };\n var testRemove = function (line, row) {\n if (regexpStart.test(line))\n return true;\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\")\n return true;\n }\n };\n }\n else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n }\n else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n insertAtTabStop = session.getUseSoftTabs();\n var uncomment = function (line, i) {\n var m = line.match(regexpStart);\n if (!m)\n return;\n var start = m[1].length, end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n end--;\n doc.removeInLine(i, start, end);\n };\n var commentWithSpace = lineCommentStart + \" \";\n var comment = function (line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent))\n doc.insertInLine({ row: i, column: minIndent }, commentWithSpace);\n else\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var testRemove = function (line, i) {\n return regexpStart.test(line);\n };\n var shouldInsertSpace = function (line, before, after) {\n var spaces = 0;\n while (before-- && line.charAt(before) == \" \")\n spaces++;\n if (spaces % tabSize != 0)\n return false;\n var spaces = 0;\n while (line.charAt(after++) == \" \")\n spaces++;\n if (tabSize > 2)\n return spaces % tabSize != tabSize - 1;\n else\n return spaces % tabSize == 0;\n };\n }\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++)\n fun(doc.getLine(i), i);\n }\n var minEmptyLength = Infinity;\n iter(function (line, i) {\n var indent = line.search(/\\S/);\n if (indent !== -1) {\n if (indent < minIndent)\n minIndent = indent;\n if (shouldRemove && !testRemove(line, i))\n shouldRemove = false;\n }\n else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n if (insertAtTabStop && minIndent % tabSize != 0)\n minIndent = Math.floor(minIndent / tabSize) * tabSize;\n iter(shouldRemove ? uncomment : comment);\n };\n this.toggleBlockComment = function (state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment)\n return;\n if (!comment.start && comment[0])\n comment = comment[0];\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n token = iterator.stepBackward();\n }\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n token = iterator.stepForward();\n }\n if (endRange)\n session.remove(endRange);\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n }\n else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n if (initialRange.start.row == startRow)\n initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow)\n initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n this.getNextLineIndent = function (state, line, tab) {\n return this.$getIndent(line);\n };\n this.checkOutdent = function (state, line, input) {\n return false;\n };\n this.autoOutdent = function (state, doc, row) {\n };\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n this.createWorker = function (session) {\n return null;\n };\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n for (var i in mapping) {\n if (mapping[i]) {\n var Mode = mapping[i];\n var id = Mode.prototype.$id;\n var mode = config.$modes[id];\n if (!mode)\n config.$modes[id] = mode = new Mode();\n if (!config.$modes[i])\n config.$modes[i] = mode;\n this.$embeds.push(i);\n this.$modes[i] = mode;\n }\n }\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\",\n \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n for (var i = 0; i < delegations.length; i++) {\n (function (scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] = function () {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this));\n }\n };\n this.$delegator = function (method, args, defaultHandler) {\n var state = args[0] || \"start\";\n if (typeof state != \"string\") {\n if (Array.isArray(state[2])) {\n var language = state[2][state[2].length - 1];\n var mode = this.$modes[language];\n if (mode)\n return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n }\n state = state[0] || \"start\";\n }\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]])\n continue;\n var split = state.split(this.$embeds[i]);\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n this.transformAction = function (state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n this.getKeywords = function (append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer.rules;\n var completionKeywords = [];\n for (var rule in rules) {\n var ruleItr = rules[rule];\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token))\n completionKeywords.push(ruleItr[r].regex);\n }\n else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {\n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n this.completionKeywords = completionKeywords;\n }\n if (!append)\n return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n this.$createKeywordList = function () {\n if (!this.$highlightRules)\n this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n this.getCompletions = function (state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function (word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length &&\n position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\")\n throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array))\n throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end)\n throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start))\n throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n }\n else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n break;\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n }\n else {\n docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n }\n break;\n }\n};\n\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = /** @class */ (function () {\n function Anchor(doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n if (typeof column == \"undefined\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n }\n Anchor.prototype.getPosition = function () {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n Anchor.prototype.getDocument = function () {\n return this.document;\n };\n Anchor.prototype.onChange = function (delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row)\n return;\n if (delta.start.row > this.row)\n return;\n var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n Anchor.prototype.setPosition = function (row, column, noClip) {\n var pos;\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n }\n else {\n pos = this.$clipPositionToDocument(row, column);\n }\n if (this.row == pos.row && this.column == pos.column)\n return;\n var old = {\n row: this.row,\n column: this.column\n };\n this.row = pos.row;\n this.column = pos.column;\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n Anchor.prototype.detach = function () {\n this.document.off(\"change\", this.$onChange);\n };\n Anchor.prototype.attach = function (doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n Anchor.prototype.$clipPositionToDocument = function (row, column) {\n var pos = {};\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n }\n else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n }\n else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n if (column < 0)\n pos.column = 0;\n return pos;\n };\n return Anchor;\n}());\nAnchor.prototype.$insertRight = false;\noop.implement(Anchor.prototype, EventEmitter);\nfunction $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n}\nfunction $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n}\nexports.Anchor = Anchor;\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = /** @class */ (function () {\n function Document(textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n }\n else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n }\n else {\n this.insert({ row: 0, column: 0 }, textOrLines);\n }\n }\n Document.prototype.setValue = function (text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({ row: 0, column: 0 }, text || \"\");\n };\n Document.prototype.getValue = function () {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n Document.prototype.createAnchor = function (row, column) {\n return new Anchor(this, row, column);\n };\n Document.prototype.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n this._signal(\"changeNewLineMode\");\n };\n Document.prototype.getNewLineCharacter = function () {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n case \"unix\":\n return \"\\n\";\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n Document.prototype.setNewLineMode = function (newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n Document.prototype.getNewLineMode = function () {\n return this.$newLineMode;\n };\n Document.prototype.isNewLine = function (text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n Document.prototype.getLine = function (row) {\n return this.$lines[row] || \"\";\n };\n Document.prototype.getLines = function (firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n Document.prototype.getAllLines = function () {\n return this.getLines(0, this.getLength());\n };\n Document.prototype.getLength = function () {\n return this.$lines.length;\n };\n Document.prototype.getTextRange = function (range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n Document.prototype.getLinesForRange = function (range) {\n var lines;\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n }\n else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l)\n lines[l] = lines[l].substring(0, range.end.column);\n }\n return lines;\n };\n Document.prototype.insertLines = function (row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n Document.prototype.removeLines = function (firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n Document.prototype.insertNewLine = function (position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n Document.prototype.insert = function (position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n return this.insertMergedLines(position, this.$split(text));\n };\n Document.prototype.insertInLine = function (position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n return this.clonePos(end);\n };\n Document.prototype.clippedPos = function (row, column) {\n var length = this.getLength();\n if (row === undefined) {\n row = length;\n }\n else if (row < 0) {\n row = 0;\n }\n else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n var line = this.getLine(row);\n if (column == undefined)\n column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return { row: row, column: column };\n };\n Document.prototype.clonePos = function (pos) {\n return { row: pos.row, column: pos.column };\n };\n Document.prototype.pos = function (row, column) {\n return { row: row, column: column };\n };\n Document.prototype.$clipPosition = function (position) {\n var length = this.getLength();\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n }\n else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n return position;\n };\n Document.prototype.insertFullLines = function (row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n }\n else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n this.insertMergedLines({ row: row, column: column }, lines);\n };\n Document.prototype.insertMergedLines = function (position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n return this.clonePos(end);\n };\n Document.prototype.remove = function (range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n });\n return this.clonePos(start);\n };\n Document.prototype.removeInLine = function (row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n }, true);\n return this.clonePos(start);\n };\n Document.prototype.removeFullLines = function (firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n Document.prototype.removeNewLine = function (row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n Document.prototype.replace = function (range, text) {\n if (!(range instanceof Range))\n range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n return range.end;\n this.remove(range);\n var end;\n if (text) {\n end = this.insert(range.start, text);\n }\n else {\n end = range.start;\n }\n return end;\n };\n Document.prototype.applyDeltas = function (deltas) {\n for (var i = 0; i < deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n Document.prototype.revertDeltas = function (deltas) {\n for (var i = deltas.length - 1; i >= 0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n Document.prototype.applyDelta = function (delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n if (isInsert && delta.lines.length > 20000) {\n this.$splitAndapplyLargeDelta(delta, 20000);\n }\n else {\n applyDelta(this.$lines, delta, doNotValidate);\n this._signal(\"change\", delta);\n }\n };\n Document.prototype.$safeApplyDelta = function (delta) {\n var docLength = this.$lines.length;\n if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n || delta.action == \"insert\" && delta.start.row <= docLength) {\n this.applyDelta(delta);\n }\n };\n Document.prototype.$splitAndapplyLargeDelta = function (delta, MAX) {\n var lines = delta.lines;\n var l = lines.length - MAX + 1;\n var row = delta.start.row;\n var column = delta.start.column;\n for (var from = 0, to = 0; from < l; from = to) {\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n }\n delta.lines = lines.slice(from);\n delta.start.row = row + from;\n delta.start.column = column;\n this.applyDelta(delta, true);\n };\n Document.prototype.revertDelta = function (delta) {\n this.$safeApplyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n lines: delta.lines.slice()\n });\n };\n Document.prototype.indexToPosition = function (index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0)\n return { row: i, column: index + lines[i].length + newlineLength };\n }\n return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n };\n Document.prototype.positionToIndex = function (pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n for (var i = startRow || 0; i < row; ++i)\n index += lines[i].length + newlineLength;\n return index + pos.column;\n };\n Document.prototype.$split = function (text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n return Document;\n}());\nDocument.prototype.$autoNewLine = \"\";\nDocument.prototype.$newLineMode = \"auto\";\noop.implement(Document.prototype, EventEmitter);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar BackgroundTokenizer = /** @class */ (function () {\n function BackgroundTokenizer(tokenizer, editor) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n var self = this;\n this.$worker = function () {\n if (!self.running) {\n return;\n }\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n var startLine = currentLine;\n while (self.lines[currentLine])\n currentLine++;\n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n processedLines++;\n if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {\n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n self.currentLine = currentLine;\n if (endLine == -1)\n endLine = currentLine;\n if (startLine <= endLine)\n self.fireUpdateEvent(startLine, endLine);\n };\n }\n BackgroundTokenizer.prototype.setTokenizer = function (tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n this.start(0);\n };\n BackgroundTokenizer.prototype.setDocument = function (doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n this.stop();\n };\n BackgroundTokenizer.prototype.fireUpdateEvent = function (firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", { data: data });\n };\n BackgroundTokenizer.prototype.start = function (startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n BackgroundTokenizer.prototype.scheduleStart = function () {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n };\n BackgroundTokenizer.prototype.$updateOnChange = function (delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n this.lines[startRow] = null;\n }\n else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n this.stop();\n };\n BackgroundTokenizer.prototype.stop = function () {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n BackgroundTokenizer.prototype.getTokens = function (row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n BackgroundTokenizer.prototype.getState = function (row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n BackgroundTokenizer.prototype.$tokenizeRow = function (row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n var data = this.tokenizer.getLineTokens(line, state, row);\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1)\n this.currentLine = row + 1;\n }\n else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n return this.lines[row] = data.tokens;\n };\n BackgroundTokenizer.prototype.cleanup = function () {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.removeAllListeners();\n };\n return BackgroundTokenizer;\n}());\noop.implement(BackgroundTokenizer.prototype, EventEmitter);\nexports.BackgroundTokenizer = BackgroundTokenizer;\n\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar SearchHighlight = /** @class */ (function () {\n function SearchHighlight(regExp, clazz, type) {\n if (type === void 0) { type = \"text\"; }\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type;\n }\n SearchHighlight.prototype.setRegexp = function (regExp) {\n if (this.regExp + \"\" == regExp + \"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n SearchHighlight.prototype.update = function (html, markerLayer, session, config) {\n if (!this.regExp)\n return;\n var start = config.firstRow, end = config.lastRow;\n var renderedMarkerRanges = {};\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n if (ranges == null) {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function (match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n for (var j = ranges.length; j--;) {\n var rangeToAddMarkerTo = ranges[j].toScreenRange(session);\n var rangeAsString = rangeToAddMarkerTo.toString();\n if (renderedMarkerRanges[rangeAsString])\n continue;\n renderedMarkerRanges[rangeAsString] = true;\n markerLayer.drawSingleLineMarker(html, rangeToAddMarkerTo, this.clazz, config);\n }\n }\n };\n return SearchHighlight;\n}());\nSearchHighlight.prototype.MAX_RANGES = 500;\nexports.SearchHighlight = SearchHighlight;\n\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar UndoManager = /** @class */ (function () {\n function UndoManager() {\n this.$maxRev = 0;\n this.$fromUndo = false;\n this.$undoDepth = Infinity;\n this.reset();\n }\n UndoManager.prototype.addSession = function (session) {\n this.$session = session;\n };\n UndoManager.prototype.add = function (delta, allowMerge, session) {\n if (this.$fromUndo)\n return;\n if (delta == this.$lastDelta)\n return;\n if (!this.$keepRedoStack)\n this.$redoStack.length = 0;\n if (allowMerge === false || !this.lastDeltas) {\n this.lastDeltas = [];\n var undoStackLength = this.$undoStack.length;\n if (undoStackLength > this.$undoDepth - 1) {\n this.$undoStack.splice(0, undoStackLength - this.$undoDepth + 1);\n }\n this.$undoStack.push(this.lastDeltas);\n delta.id = this.$rev = ++this.$maxRev;\n }\n if (delta.action == \"remove\" || delta.action == \"insert\")\n this.$lastDelta = delta;\n this.lastDeltas.push(delta);\n };\n UndoManager.prototype.addSelection = function (selection, rev) {\n this.selections.push({\n value: selection,\n rev: rev || this.$rev\n });\n };\n UndoManager.prototype.startNewGroup = function () {\n this.lastDeltas = null;\n return this.$rev;\n };\n UndoManager.prototype.markIgnored = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id <= from)\n break;\n if (delta.id < to)\n delta.ignore = true;\n }\n this.lastDeltas = null;\n };\n UndoManager.prototype.getSelection = function (rev, after) {\n var stack = this.selections;\n for (var i = stack.length; i--;) {\n var selection = stack[i];\n if (selection.rev < rev) {\n if (after)\n selection = stack[i + 1];\n return selection;\n }\n }\n };\n UndoManager.prototype.getRevision = function () {\n return this.$rev;\n };\n UndoManager.prototype.getDeltas = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n var end = null, start = 0;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id < to && !end)\n end = i + 1;\n if (delta.id <= from) {\n start = i + 1;\n break;\n }\n }\n return stack.slice(start, end);\n };\n UndoManager.prototype.getChangedRanges = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n UndoManager.prototype.getChangedLines = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n UndoManager.prototype.undo = function (session, dontSelect) {\n this.lastDeltas = null;\n var stack = this.$undoStack;\n if (!rearrangeUndoStack(stack, stack.length))\n return;\n if (!session)\n session = this.$session;\n if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n this.$redoStack = [];\n this.$fromUndo = true;\n var deltaSet = stack.pop();\n var undoSelectionRange = null;\n if (deltaSet) {\n undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n this.$redoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return undoSelectionRange;\n };\n UndoManager.prototype.redo = function (session, dontSelect) {\n this.lastDeltas = null;\n if (!session)\n session = this.$session;\n this.$fromUndo = true;\n if (this.$redoStackBaseRev != this.$rev) {\n var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n rebaseRedoStack(this.$redoStack, diff);\n this.$redoStackBaseRev = this.$rev;\n this.$redoStack.forEach(function (x) {\n x[0].id = ++this.$maxRev;\n }, this);\n }\n var deltaSet = this.$redoStack.pop();\n var redoSelectionRange = null;\n if (deltaSet) {\n redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n this.$undoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return redoSelectionRange;\n };\n UndoManager.prototype.$syncRev = function () {\n var stack = this.$undoStack;\n var nextDelta = stack[stack.length - 1];\n var id = nextDelta && nextDelta[0].id || 0;\n this.$redoStackBaseRev = id;\n this.$rev = id;\n };\n UndoManager.prototype.reset = function () {\n this.lastDeltas = null;\n this.$lastDelta = null;\n this.$undoStack = [];\n this.$redoStack = [];\n this.$rev = 0;\n this.mark = 0;\n this.$redoStackBaseRev = this.$rev;\n this.selections = [];\n };\n UndoManager.prototype.canUndo = function () {\n return this.$undoStack.length > 0;\n };\n UndoManager.prototype.canRedo = function () {\n return this.$redoStack.length > 0;\n };\n UndoManager.prototype.bookmark = function (rev) {\n if (rev == undefined)\n rev = this.$rev;\n this.mark = rev;\n };\n UndoManager.prototype.isAtBookmark = function () {\n return this.$rev === this.mark;\n };\n UndoManager.prototype.toJSON = function () {\n return {\n $redoStack: this.$redoStack,\n $undoStack: this.$undoStack\n };\n };\n UndoManager.prototype.fromJSON = function (json) {\n this.reset();\n this.$undoStack = json.$undoStack;\n this.$redoStack = json.$redoStack;\n };\n UndoManager.prototype.$prettyPrint = function (delta) {\n if (delta)\n return stringifyDelta(delta);\n return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n };\n return UndoManager;\n}());\nUndoManager.prototype.hasUndo = UndoManager.prototype.canUndo;\nUndoManager.prototype.hasRedo = UndoManager.prototype.canRedo;\nUndoManager.prototype.isClean = UndoManager.prototype.isAtBookmark;\nUndoManager.prototype.markClean = UndoManager.prototype.bookmark;\nfunction rearrangeUndoStack(stack, pos) {\n for (var i = pos; i--;) {\n var deltaSet = stack[i];\n if (deltaSet && !deltaSet[0].ignore) {\n while (i < pos - 1) {\n var swapped = swapGroups(stack[i], stack[i + 1]);\n stack[i] = swapped[0];\n stack[i + 1] = swapped[1];\n i++;\n }\n return true;\n }\n }\n}\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\nfunction $updateMarkers(delta) {\n var isInsert = delta.action == \"insert\";\n var start = delta.start;\n var end = delta.end;\n var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n if (isInsert)\n end = start;\n for (var i in this.marks) {\n var point = this.marks[i];\n var cmp = comparePoints(point, start);\n if (cmp < 0) {\n continue; // delta starts after the range\n }\n if (cmp === 0) {\n if (isInsert) {\n if (point.bias == 1) {\n cmp = 1;\n }\n else {\n point.bias == -1;\n continue;\n }\n }\n }\n var cmp2 = isInsert ? cmp : comparePoints(point, end);\n if (cmp2 > 0) {\n point.row += rowShift;\n point.column += point.row == end.row ? colShift : 0;\n continue;\n }\n if (!isInsert && cmp2 <= 0) {\n point.row = start.row;\n point.column = start.column;\n if (cmp2 === 0)\n point.bias = 1;\n }\n }\n}\nfunction clonePos(pos) {\n return { row: pos.row, column: pos.column };\n}\nfunction cloneDelta(d) {\n return {\n start: clonePos(d.start),\n end: clonePos(d.end),\n action: d.action,\n lines: d.lines.slice()\n };\n}\nfunction stringifyDelta(d) {\n d = d || this;\n if (Array.isArray(d)) {\n return d.map(stringifyDelta).join(\"\\n\");\n }\n var type = \"\";\n if (d.action) {\n type = d.action == \"insert\" ? \"+\" : \"-\";\n type += \"[\" + d.lines + \"]\";\n }\n else if (d.value) {\n if (Array.isArray(d.value)) {\n type = d.value.map(stringifyRange).join(\"\\n\");\n }\n else {\n type = stringifyRange(d.value);\n }\n }\n if (d.start) {\n type += stringifyRange(d);\n }\n if (d.id || d.rev) {\n type += \"\\t(\" + (d.id || d.rev) + \")\";\n }\n return type;\n}\nfunction stringifyRange(r) {\n return r.start.row + \":\" + r.start.column\n + \"=>\" + r.end.row + \":\" + r.end.column;\n}\nfunction swap(d1, d2) {\n var i1 = d1.action == \"insert\";\n var i2 = d2.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (i1 && !i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && !i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n return [d2, d1];\n}\nfunction swapGroups(ds1, ds2) {\n for (var i = ds1.length; i--;) {\n for (var j = 0; j < ds2.length; j++) {\n if (!swap(ds1[i], ds2[j])) {\n while (i < ds1.length) {\n while (j--) {\n swap(ds2[j], ds1[i]);\n }\n j = ds2.length;\n i++;\n }\n return [ds1, ds2];\n }\n }\n }\n ds1.selectionBefore = ds2.selectionBefore =\n ds1.selectionAfter = ds2.selectionAfter = null;\n return [ds2, ds1];\n}\nfunction xform(d1, c1) {\n var i1 = d1.action == \"insert\";\n var i2 = c1.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d1.start, c1.start) < 0) {\n shift(c1, d1, 1);\n }\n else {\n shift(d1, c1, 1);\n }\n }\n else if (i1 && !i2) {\n if (cmp(d1.start, c1.end) >= 0) {\n shift(d1, c1, -1);\n }\n else if (cmp(d1.start, c1.start) <= 0) {\n shift(c1, d1, +1);\n }\n else {\n shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n shift(c1, d1, +1);\n }\n }\n else if (!i1 && i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.start, d1.start) <= 0) {\n shift(d1, c1, +1);\n }\n else {\n shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n shift(d1, c1, +1);\n }\n }\n else if (!i1 && !i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.end, d1.start) <= 0) {\n shift(d1, c1, -1);\n }\n else {\n var before, after;\n if (cmp(d1.start, c1.start) < 0) {\n before = d1;\n d1 = splitDelta(d1, c1.start);\n }\n if (cmp(d1.end, c1.end) > 0) {\n after = splitDelta(d1, c1.end);\n }\n shiftPos(c1.end, d1.start, d1.end, -1);\n if (after && !before) {\n d1.lines = after.lines;\n d1.start = after.start;\n d1.end = after.end;\n after = d1;\n }\n return [c1, before, after].filter(Boolean);\n }\n }\n return [c1, d1];\n}\nfunction shift(d1, d2, dir) {\n shiftPos(d1.start, d2.start, d2.end, dir);\n shiftPos(d1.end, d2.start, d2.end, dir);\n}\nfunction shiftPos(pos, start, end, dir) {\n if (pos.row == (dir == 1 ? start : end).row) {\n pos.column += dir * (end.column - start.column);\n }\n pos.row += dir * (end.row - start.row);\n}\nfunction splitDelta(c, pos) {\n var lines = c.lines;\n var end = c.end;\n c.end = clonePos(pos);\n var rowsBefore = c.end.row - c.start.row;\n var otherLines = lines.splice(rowsBefore, lines.length);\n var col = rowsBefore ? pos.column : pos.column - c.start.column;\n lines.push(otherLines[0].substring(0, col));\n otherLines[0] = otherLines[0].substr(col);\n var rest = {\n start: clonePos(pos),\n end: end,\n lines: otherLines,\n action: c.action\n };\n return rest;\n}\nfunction moveDeltasByOne(redoStack, d) {\n d = cloneDelta(d);\n for (var j = redoStack.length; j--;) {\n var deltaSet = redoStack[j];\n for (var i = 0; i < deltaSet.length; i++) {\n var x = deltaSet[i];\n var xformed = xform(x, d);\n d = xformed[0];\n if (xformed.length != 2) {\n if (xformed[2]) {\n deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n i++;\n }\n else if (!xformed[1]) {\n deltaSet.splice(i, 1);\n i--;\n }\n }\n }\n if (!deltaSet.length) {\n redoStack.splice(j, 1);\n }\n }\n return redoStack;\n}\nfunction rebaseRedoStack(redoStack, deltaSets) {\n for (var i = 0; i < deltaSets.length; i++) {\n var deltas = deltaSets[i];\n for (var j = 0; j < deltas.length; j++) {\n moveDeltasByOne(redoStack, deltas[j]);\n }\n }\n}\nexports.UndoManager = UndoManager;\n\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = /** @class */ (function () {\n function FoldLine(foldData, folds) {\n this.foldData = foldData;\n if (Array.isArray(folds)) {\n this.folds = folds;\n }\n else {\n folds = this.folds = [folds];\n }\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n this.folds.forEach(function (fold) {\n fold.setFoldLine(this);\n }, this);\n }\n FoldLine.prototype.shiftRow = function (shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function (fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n FoldLine.prototype.addFold = function (fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n this.folds.push(fold);\n this.folds.sort(function (a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n }\n else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n fold.foldLine = this;\n };\n FoldLine.prototype.containsRow = function (row) {\n return row >= this.start.row && row <= this.end.row;\n };\n FoldLine.prototype.walk = function (callback, endRow, endColumn) {\n var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true;\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n if (stop || cmp === 0) {\n return;\n }\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n FoldLine.prototype.getNextFoldTo = function (row, column) {\n var fold, cmp;\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n }\n else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n return null;\n };\n FoldLine.prototype.addRemoveChars = function (row, column, len) {\n var ret = this.getNextFoldTo(row, column), fold, folds;\n if (ret) {\n fold = ret.fold;\n if (ret.kind == \"inside\"\n && fold.start.column != column\n && fold.start.row != row) {\n window.console && window.console.log(row, column, fold);\n }\n else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n if (i === 0) {\n this.start.column += len;\n }\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n if (!fold.sameRow) {\n return;\n }\n fold.end.column += len;\n }\n this.end.column += len;\n }\n }\n };\n FoldLine.prototype.split = function (row, column) {\n var pos = this.getNextFoldTo(row, column);\n if (!pos || pos.kind == \"inside\")\n return null;\n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n FoldLine.prototype.merge = function (foldLineNext) {\n var folds = foldLineNext.folds;\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n FoldLine.prototype.toString = function () {\n var ret = [this.range.toString() + \": [\"];\n this.folds.forEach(function (fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n FoldLine.prototype.idxToPosition = function (idx) {\n var lastFoldEndColumn = 0;\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n idx -= fold.start.column - lastFoldEndColumn;\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n lastFoldEndColumn = fold.end.column;\n }\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n return FoldLine;\n}());\nexports.FoldLine = FoldLine;\n\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\nvar RangeList = /** @class */ (function () {\n function RangeList() {\n this.ranges = [];\n this.$bias = 1;\n }\n RangeList.prototype.pointIndex = function (pos, excludeEdges, startIndex) {\n var list = this.ranges;\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0)\n continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0)\n return excludeEdges && cmpStart !== 0 ? -i - 2 : i;\n if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n return i;\n return -i - 1;\n }\n return -i - 1;\n };\n RangeList.prototype.add = function (range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n else\n endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n RangeList.prototype.addList = function (list) {\n var removed = [];\n for (var i = list.length; i--;) {\n removed.push.apply(removed, this.add(list[i]));\n }\n return removed;\n };\n RangeList.prototype.substractPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n RangeList.prototype.merge = function () {\n var removed = [];\n var list = this.ranges;\n list = list.sort(function (a, b) {\n return comparePoints(a.start, b.start);\n });\n var next = list[0], range;\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0)\n continue;\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n continue;\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n this.ranges = list;\n return removed;\n };\n RangeList.prototype.contains = function (row, column) {\n return this.pointIndex({ row: row, column: column }) >= 0;\n };\n RangeList.prototype.containsPoint = function (pos) {\n return this.pointIndex(pos) >= 0;\n };\n RangeList.prototype.rangeAtPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n RangeList.prototype.clipRows = function (startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n return [];\n var startIndex = this.pointIndex({ row: startRow, column: 0 });\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({ row: endRow, column: 0 }, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n RangeList.prototype.removeAll = function () {\n return this.ranges.splice(0, this.ranges.length);\n };\n RangeList.prototype.attach = function (session) {\n if (this.session)\n this.detach();\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n this.session.on('change', this.onChange);\n };\n RangeList.prototype.detach = function () {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n RangeList.prototype.$onChange = function (delta) {\n var start = delta.start;\n var end = delta.end;\n var startRow = start.row;\n var endRow = end.row;\n var ranges = this.ranges;\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row >= startRow)\n break;\n }\n if (delta.action == \"insert\") {\n var lineDif = endRow - startRow;\n var colDiff = -start.column + end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > startRow)\n break;\n if (r.start.row == startRow && r.start.column >= start.column) {\n if (r.start.column == start.column && this.$bias <= 0) {\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$bias < 0) {\n continue;\n }\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column)\n r.end.column -= colDiff;\n }\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n }\n else {\n var lineDif = startRow - endRow;\n var colDiff = start.column - end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > endRow)\n break;\n if (r.end.row < endRow\n && (startRow < r.end.row\n || startRow == r.end.row && start.column < r.end.column)) {\n r.end.row = startRow;\n r.end.column = start.column;\n }\n else if (r.end.row == endRow) {\n if (r.end.column <= end.column) {\n if (lineDif || r.end.column > start.column) {\n r.end.column = start.column;\n r.end.row = start.row;\n }\n }\n else {\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n else if (r.end.row > endRow) {\n r.end.row += lineDif;\n }\n if (r.start.row < endRow\n && (startRow < r.start.row\n || startRow == r.start.row && start.column < r.start.column)) {\n r.start.row = startRow;\n r.start.column = start.column;\n }\n else if (r.start.row == endRow) {\n if (r.start.column <= end.column) {\n if (lineDif || r.start.column > start.column) {\n r.start.column = start.column;\n r.start.row = start.row;\n }\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n else if (r.start.row > endRow) {\n r.start.row += lineDif;\n }\n }\n }\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n return RangeList;\n}());\nRangeList.prototype.comparePoints = comparePoints;\nexports.RangeList = RangeList;\n\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range_list\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar RangeList = require(\"../range_list\").RangeList;\nvar Fold = /** @class */ (function (_super) {\n __extends(Fold, _super);\n function Fold(range, placeholder) {\n var _this = _super.call(this) || this;\n _this.foldLine = null;\n _this.placeholder = placeholder;\n _this.range = range;\n _this.start = range.start;\n _this.end = range.end;\n _this.sameRow = range.start.row == range.end.row;\n _this.subFolds = _this.ranges = [];\n return _this;\n }\n Fold.prototype.toString = function () {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n Fold.prototype.setFoldLine = function (foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function (fold) {\n fold.setFoldLine(foldLine);\n });\n };\n Fold.prototype.clone = function () {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function (subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n Fold.prototype.addSubFold = function (fold) {\n if (this.range.isEqual(fold))\n return;\n consumeRange(fold, this.start);\n var row = fold.start.row, column = fold.start.column;\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterStart = this.subFolds[i];\n var firstConsumed = 0;\n if (cmp == 0) {\n if (afterStart.range.containsRange(fold))\n return afterStart.addSubFold(fold);\n else\n firstConsumed = 1;\n }\n var row = fold.range.end.row, column = fold.range.end.column;\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n if (cmp == 0)\n j++;\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length;\n for (var k = firstConsumed; k < last; k++) {\n fold.addSubFold(consumedFolds[k]);\n }\n fold.setFoldLine(this.foldLine);\n return fold;\n };\n Fold.prototype.restoreRange = function (range) {\n return restoreRange(range, this.start);\n };\n return Fold;\n}(RangeList));\nfunction consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0)\n point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n if (point.row == 0)\n point.column += anchor.column;\n point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n}\nexports.Fold = Fold;\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\",\"ace/mouse/mouse_event\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar MouseEvent = require(\"../mouse/mouse_event\").MouseEvent;\nfunction Folding() {\n this.getFoldAt = function (row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine)\n return null;\n var folds = foldLine.folds;\n for (var i = 0; i < folds.length; i++) {\n var range = folds[i].range;\n if (range.contains(row, column)) {\n if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) {\n continue;\n }\n else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) {\n continue;\n }\n return folds[i];\n }\n }\n };\n this.getFoldsInRange = function (range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n start.column += 1;\n end.column -= 1;\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n if (cmp == 2) {\n continue;\n }\n else if (cmp == -2) {\n break;\n }\n var folds = foldLines[i].folds;\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n if (cmp == -2) {\n break;\n }\n else if (cmp == 2) {\n continue;\n }\n else \n if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n return foundFolds;\n };\n this.getFoldsInRangeList = function (ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function (range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n }\n else {\n var folds = this.getFoldsInRange(ranges);\n }\n return folds;\n };\n this.getAllFolds = function () {\n var folds = [];\n var foldLines = this.$foldData;\n for (var i = 0; i < foldLines.length; i++)\n for (var j = 0; j < foldLines[i].folds.length; j++)\n folds.push(foldLines[i].folds[j]);\n return folds;\n };\n this.getFoldStringAt = function (row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine)\n return null;\n var lastFold = {\n end: { column: 0 }\n };\n var str, fold;\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n str = this\n .getLine(fold.start.row)\n .substring(lastFold.end.column, fold.start.column);\n break;\n }\n else if (cmp === 0) {\n return null;\n }\n lastFold = fold;\n }\n if (!str)\n str = this.getLine(fold.start.row).substring(lastFold.end.column);\n if (trim == -1)\n return str.substring(0, column - lastFold.end.column);\n else if (trim == 1)\n return str.substring(column - lastFold.end.column);\n else\n return str;\n };\n this.getFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n }\n else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n return null;\n };\n this.getNextFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n return null;\n };\n this.getFoldedRowCount = function (first, last) {\n var foldData = this.$foldData, rowCount = last - first + 1;\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row;\n if (end >= last) {\n if (start < last) {\n if (start >= first)\n rowCount -= last - start;\n else\n rowCount = 0; // in one fold\n }\n break;\n }\n else if (end >= first) {\n if (start >= first) // fold inside range\n rowCount -= end - start;\n else\n rowCount -= end - first + 1;\n }\n }\n return rowCount;\n };\n this.$addFoldLine = function (foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function (a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n this.addFold = function (placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n if (placeholder instanceof Fold)\n fold = placeholder;\n else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold)\n return startFold.addSubFold(fold);\n if (startFold && !startFold.range.isStart(startRow, startColumn))\n this.removeFold(startFold);\n if (endFold && !endFold.range.isEnd(endRow, endColumn))\n this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n this.removeFolds(folds);\n if (!fold.collapseChildren) {\n folds.forEach(function (subFold) {\n fold.addSubFold(subFold);\n });\n }\n }\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n }\n else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n break;\n }\n else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n if (!added)\n foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n if (this.$useWrapMode)\n this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n else\n this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"add\" });\n return fold;\n };\n this.addFolds = function (folds) {\n folds.forEach(function (fold) {\n this.addFold(fold);\n }, this);\n };\n this.removeFold = function (fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n }\n else \n if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n }\n else \n if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n }\n else \n if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n }\n else \n {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n if (!this.$updating) {\n if (this.$useWrapMode)\n this.$updateWrapData(startRow, endRow);\n else\n this.$updateRowLengthCache(startRow, endRow);\n }\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n };\n this.removeFolds = function (folds) {\n var cloneFolds = [];\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n cloneFolds.forEach(function (fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n this.expandFold = function (fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function (subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1);\n }\n fold.subFolds = [];\n };\n this.expandFolds = function (folds) {\n folds.forEach(function (fold) {\n this.expandFold(fold);\n }, this);\n };\n this.unfold = function (location, expandInner) {\n var range, folds;\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n if (expandInner == null)\n expandInner = true;\n }\n else if (typeof location == \"number\") {\n range = new Range(location, 0, location, this.getLine(location).length);\n }\n else if (\"row\" in location) {\n range = Range.fromPoints(location, location);\n }\n else if (Array.isArray(location)) {\n folds = [];\n location.forEach(function (range) {\n folds = folds.concat(this.unfold(range));\n }, this);\n return folds;\n }\n else {\n range = location;\n }\n folds = this.getFoldsInRangeList(range);\n var outermostFolds = folds;\n while (folds.length == 1\n && Range.comparePoints(folds[0].start, range.start) < 0\n && Range.comparePoints(folds[0].end, range.end) > 0) {\n this.expandFolds(folds);\n folds = this.getFoldsInRangeList(range);\n }\n if (expandInner != false) {\n this.removeFolds(folds);\n }\n else {\n this.expandFolds(folds);\n }\n if (outermostFolds.length)\n return outermostFolds;\n };\n this.isRowFolded = function (docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n this.getRowFoldEnd = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n this.getRowFoldStart = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null)\n startRow = foldLine.start.row;\n if (startColumn == null)\n startColumn = 0;\n if (endRow == null)\n endRow = foldLine.end.row;\n if (endColumn == null)\n endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n if (row < startRow)\n return;\n if (row == startRow) {\n if (column < startColumn)\n return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n if (placeholder != null) {\n textLine += placeholder;\n }\n else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n this.getDisplayLine = function (row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n }\n else {\n return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn);\n }\n };\n this.$cloneFoldData = function () {\n var fd = [];\n fd = this.$foldData.map(function (foldLine) {\n var folds = foldLine.folds.map(function (fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n return fd;\n };\n this.toggleFold = function (tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n if (fold) {\n this.expandFold(fold);\n return;\n }\n else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n }\n else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n }\n else if (bracketPos = this.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 })) {\n if (range.comparePoint(bracketPos) == 1)\n range.end = bracketPos;\n else\n range.start = bracketPos;\n range.start.column++;\n }\n else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n }\n else {\n var folds = this.getFoldsInRange(range);\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n }\n else if (folds.length == 1) {\n fold = folds[0];\n }\n }\n if (!fold)\n fold = this.getFoldAt(range.start.row, range.start.column);\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n var placeholder = \"...\";\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4)\n return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n this.addFold(placeholder, range);\n };\n this.getCommentFoldRange = function (row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token && token.type;\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\")\n type += \"|doc-start|\\\\.doc\";\n var re = new RegExp(type);\n var range = new Range();\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type) && !/^comment.end/.test(token.type));\n token = iterator.stepForward();\n }\n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + (/^comment.start/.test(token.type) ? token.value.length : 2);\n iterator = new TokenIterator(this, row, column);\n if (dir != -1) {\n var lastRow = -1;\n do {\n token = iterator.stepForward();\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (!re.test(state))\n lastRow = iterator.$row;\n }\n else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type) && !/^comment.start/.test(token.type));\n token = iterator.stepBackward();\n }\n else\n token = iterator.getCurrentToken();\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn();\n if (!/^comment.end/.test(token.type)) {\n range.end.column += token.value.length - 2;\n }\n return range;\n }\n };\n this.foldAll = function (startRow, endRow, depth, test) {\n if (depth == undefined)\n depth = 100000; // JSON.stringify doesn't hanle Infinity\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets)\n return; // mode doesn't support folding\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null)\n foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\")\n continue;\n if (test && !test(row))\n continue;\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine()\n && range.end.row <= endRow\n && range.start.row >= startRow) {\n row = range.end.row;\n range.collapseChildren = depth;\n this.addFold(\"...\", range);\n }\n }\n };\n this.foldToLevel = function (level) {\n this.foldAll();\n while (level-- > 0)\n this.unfold(null, false);\n };\n this.foldAllComments = function () {\n var session = this;\n this.foldAll(null, null, null, function (row) {\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token.type == \"text\" && /^\\s+$/.test(token.value))\n continue;\n if (/comment/.test(token.type))\n return true;\n return false;\n }\n });\n };\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n this.setFoldStyle = function (style) {\n if (!this.$foldStyles[style])\n throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n if (this.$foldStyle == style)\n return;\n this.$foldStyle = style;\n if (style == \"manual\")\n this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n this.$setFolding = function (foldMode) {\n if (this.$foldMode == foldMode)\n return;\n this.$foldMode = foldMode;\n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || (ignoreCurrent && fw[row]))\n return {};\n var i = row - 1, firstRange;\n while (i >= 0) {\n var c = fw[i];\n if (c == null)\n c = fw[i] = this.getFoldWidget(i);\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange)\n firstRange = range;\n if (range && range.end.row >= row)\n break;\n }\n i--;\n }\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n this.onFoldWidgetClick = function (row, e) {\n if (e instanceof MouseEvent)\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n var range = this.$toggleFoldWidget(row, options);\n if (!range) {\n var el = (e.target || e.srcElement);\n if (el && /ace_fold-widget/.test(el.className))\n el.className += \" ace_invalid\";\n }\n };\n this.$toggleFoldWidget = function (row, options) {\n if (!this.getFoldWidget)\n return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n if (fold) {\n if (options.children || options.all)\n this.removeFold(fold);\n else\n this.expandFold(fold);\n return fold;\n }\n var range = this.getFoldWidgetRange(row, true);\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n }\n else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n }\n else if (range) {\n if (options.all)\n range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n return range;\n };\n this.toggleFoldWidget = function (toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n if (range)\n return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n if (fold) {\n this.removeFold(fold);\n }\n else {\n this.addFold(\"...\", range);\n }\n }\n };\n this.updateFoldWidgets = function (delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n }\n else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n this.tokenizerUpdateFoldWidgets = function (e) {\n var rows = e.data;\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first)\n this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n}\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nfunction BracketMatch() {\n this.findMatchingBracket = function (position, chr) {\n if (position.column == 0)\n return null;\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1);\n if (charBeforeCursor == \"\")\n return null;\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match)\n return null;\n if (match[1])\n return this.$findClosingBracket(match[1], position);\n else\n return this.$findOpeningBracket(match[2], position);\n };\n this.getBracketRange = function (pos) {\n var line = this.getLine(pos.row);\n var before = true, range;\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = { row: pos.row, column: pos.column + 1 };\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n if (!match)\n return null;\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(pos, bracketPos);\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n range.cursor = range.end;\n }\n else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(bracketPos, pos);\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n range.cursor = range.start;\n }\n return range;\n };\n this.getMatchingBracketRanges = function (pos, isBackwards) {\n var line = this.getLine(pos.row);\n var bracketsRegExp = /([\\(\\[\\{])|([\\)\\]\\}])/;\n var chr = !isBackwards && line.charAt(pos.column - 1);\n var match = chr && chr.match(bracketsRegExp);\n if (!match) {\n chr = (isBackwards === undefined || isBackwards) && line.charAt(pos.column);\n pos = {\n row: pos.row,\n column: pos.column + 1\n };\n match = chr && chr.match(bracketsRegExp);\n }\n if (!match)\n return null;\n var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column);\n var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos)\n : this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return [startRange];\n var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1);\n return [startRange, endRange];\n };\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\",\n \"<\": \">\",\n \">\": \"<\"\n };\n this.$findOpeningBracket = function (bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n .replace(/-close\\b/, \"-(close|open)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n while (true) {\n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n if (chr == openBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex -= 1;\n }\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n value = token.value;\n valueIndex = value.length - 1;\n }\n return null;\n };\n this.$findClosingBracket = function (bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n .replace(/-open\\b/, \"-(close|open)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n while (true) {\n var value = token.value;\n var valueLength = value.length;\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n if (chr == closingBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex += 1;\n }\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n valueIndex = 0;\n }\n return null;\n };\n this.getMatchingTags = function (pos) {\n var iterator = new TokenIterator(this, pos.row, pos.column);\n var token = this.$findTagName(iterator);\n if (!token)\n return;\n var prevToken = iterator.stepBackward();\n if (prevToken.value === '<') {\n return this.$findClosingTag(iterator, token);\n }\n else {\n return this.$findOpeningTag(iterator, token);\n }\n };\n this.$findTagName = function (iterator) {\n var token = iterator.getCurrentToken();\n var found = false;\n var backward = false;\n if (token && token.type.indexOf('tag-name') === -1) {\n do {\n if (backward)\n token = iterator.stepBackward();\n else\n token = iterator.stepForward();\n if (token) {\n if (token.value === \"/>\") {\n backward = true;\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n found = true;\n }\n }\n } while (token && !found);\n }\n return token;\n };\n this.$findClosingTag = function (iterator, token) {\n var prevToken;\n var currentTag = token.value;\n var tag = token.value;\n var depth = 0;\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n token = iterator.stepForward();\n var openTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n var foundOpenTagEnd = false;\n do {\n prevToken = token;\n token = iterator.stepForward();\n if (token) {\n if (token.value === '>' && !foundOpenTagEnd) {\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n foundOpenTagEnd = true;\n }\n if (token.type.indexOf('tag-name') !== -1) {\n currentTag = token.value;\n if (tag === currentTag) {\n if (prevToken.value === '<') {\n depth++;\n }\n else if (prevToken.value === '') {\n depth--;\n if (depth < 0) { //found closing tag\n iterator.stepBackward();\n var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2); //Range for \n token = iterator.stepForward();\n var closeTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n token = iterator.stepForward();\n if (token && token.value === '>') {\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n else {\n return;\n }\n }\n }\n }\n }\n else if (tag === currentTag && token.value === '/>') { // self-closing tag\n depth--;\n if (depth < 0) { //found self-closing tag end\n var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2);\n var closeTagName = closeTagStart;\n var closeTagEnd = closeTagName;\n var openTagEnd = new Range(openTagName.end.row, openTagName.end.column, openTagName.end.row, openTagName.end.column + 1);\n }\n }\n }\n } while (token && depth >= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n this.$findOpeningTag = function (iterator, token) {\n var prevToken = iterator.getCurrentToken();\n var tag = token.value;\n var depth = 0;\n var startRow = iterator.getCurrentTokenRow();\n var startColumn = iterator.getCurrentTokenColumn();\n var endColumn = startColumn + 2;\n var closeTagStart = new Range(startRow, startColumn, startRow, endColumn); //Range for \n iterator.stepForward();\n var closeTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n token = iterator.stepForward();\n if (!token || token.value !== \">\")\n return;\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n iterator.stepBackward();\n iterator.stepBackward();\n do {\n token = prevToken;\n startRow = iterator.getCurrentTokenRow();\n startColumn = iterator.getCurrentTokenColumn();\n endColumn = startColumn + token.value.length;\n prevToken = iterator.stepBackward();\n if (token) {\n if (token.type.indexOf('tag-name') !== -1) {\n if (tag === token.value) {\n if (prevToken.value === '<') {\n depth++;\n if (depth > 0) { //found opening tag\n var openTagName = new Range(startRow, startColumn, startRow, endColumn);\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for <\n do {\n token = iterator.stepForward();\n } while (token && token.value !== '>');\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n }\n else if (prevToken.value === '') {\n depth--;\n }\n }\n }\n else if (token.value === '/>') { // self-closing tag\n var stepCount = 0;\n var tmpToken = prevToken;\n while (tmpToken) {\n if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) {\n depth--;\n break;\n }\n else if (tmpToken.value === '<') {\n break;\n }\n tmpToken = iterator.stepBackward();\n stepCount++;\n }\n for (var i = 0; i < stepCount; i++) {\n iterator.stepForward();\n }\n }\n }\n } while (prevToken && depth <= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/undomanager\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar BidiHandler = require(\"./bidihandler\").BidiHandler;\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar EditSession = /** @class */ (function () {\n function EditSession(text, mode) {\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n this.$foldData = [];\n this.id = \"session\" + (++EditSession.$uid);\n this.$foldData.toString = function () {\n return this.join(\"\\n\");\n };\n this.bgTokenizer = new BackgroundTokenizer((new TextMode()).getTokenizer(), this);\n var _self = this;\n this.bgTokenizer.on(\"update\", function (e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n if (typeof text != \"object\" || !text.getLine)\n text = new Document(text);\n this.setDocument(text);\n this.selection = new Selection(this);\n this.$bidiHandler = new BidiHandler(this);\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n this.destroyed = false;\n }\n EditSession.prototype.setDocument = function (doc) {\n if (this.doc)\n this.doc.off(\"change\", this.$onChange);\n this.doc = doc;\n doc.on(\"change\", this.$onChange, true);\n this.bgTokenizer.setDocument(this.getDocument());\n this.resetCaches();\n };\n EditSession.prototype.getDocument = function () {\n return this.doc;\n };\n EditSession.prototype.$resetRowCache = function (docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n EditSession.prototype.$getRowCacheIndex = function (cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n while (low <= hi) {\n var mid = (low + hi) >> 1;\n var c = cacheArray[mid];\n if (val > c)\n low = mid + 1;\n else if (val < c)\n hi = mid - 1;\n else\n return mid;\n }\n return low - 1;\n };\n EditSession.prototype.resetCaches = function () {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (!this.destroyed)\n this.bgTokenizer.start(0);\n };\n EditSession.prototype.onChangeFold = function (e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n EditSession.prototype.onChange = function (delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n var removedFolds = this.$updateInternalDataOnChange(delta);\n if (!this.$fromUndo && this.$undoManager) {\n if (removedFolds && removedFolds.length) {\n this.$undoManager.add({\n action: \"removeFolds\",\n folds: removedFolds\n }, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n }\n this.$undoManager.add(delta, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n this.$informUndoManager.schedule();\n }\n this.bgTokenizer.$updateOnChange(delta);\n this._signal(\"change\", delta);\n };\n EditSession.prototype.setValue = function (text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n this.$resetRowCache(0);\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n EditSession.fromJSON = function (session) {\n session = JSON.parse(session);\n var undoManager = new UndoManager();\n undoManager.$undoStack = session.history.undo;\n undoManager.$redoStack = session.history.redo;\n undoManager.mark = session.history.mark;\n undoManager.$rev = session.history.rev;\n var editSession = new EditSession(session.value);\n session.folds.forEach(function (fold) {\n editSession.addFold(\"...\", Range.fromPoints(fold.start, fold.end));\n });\n editSession.setAnnotations(session.annotations);\n editSession.setBreakpoints(session.breakpoints);\n editSession.setMode(session.mode);\n editSession.setScrollLeft(session.scrollLeft);\n editSession.setScrollTop(session.scrollTop);\n editSession.setUndoManager(undoManager);\n editSession.selection.fromJSON(session.selection);\n return editSession;\n };\n EditSession.prototype.toJSON = function () {\n return {\n annotations: this.$annotations,\n breakpoints: this.$breakpoints,\n folds: this.getAllFolds().map(function (fold) {\n return fold.range;\n }),\n history: this.getUndoManager(),\n mode: this.$mode.$id,\n scrollLeft: this.$scrollLeft,\n scrollTop: this.$scrollTop,\n selection: this.selection.toJSON(),\n value: this.doc.getValue()\n };\n };\n EditSession.prototype.toString = function () {\n return this.doc.getValue();\n };\n EditSession.prototype.getSelection = function () {\n return this.selection;\n };\n EditSession.prototype.getState = function (row) {\n return this.bgTokenizer.getState(row);\n };\n EditSession.prototype.getTokens = function (row) {\n return this.bgTokenizer.getTokens(row);\n };\n EditSession.prototype.getTokenAt = function (row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token, c = 0;\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n }\n else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column)\n break;\n }\n }\n token = tokens[i];\n if (!token)\n return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n EditSession.prototype.setUndoManager = function (undoManager) {\n this.$undoManager = undoManager;\n if (this.$informUndoManager)\n this.$informUndoManager.cancel();\n if (undoManager) {\n var self = this;\n undoManager.addSession(this);\n this.$syncInformUndoManager = function () {\n self.$informUndoManager.cancel();\n self.mergeUndoDeltas = false;\n };\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n }\n else {\n this.$syncInformUndoManager = function () { };\n }\n };\n EditSession.prototype.markUndoGroup = function () {\n if (this.$syncInformUndoManager)\n this.$syncInformUndoManager();\n };\n EditSession.prototype.getUndoManager = function () {\n return this.$undoManager || this.$defaultUndoManager;\n };\n EditSession.prototype.getTabString = function () {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n }\n else {\n return \"\\t\";\n }\n };\n EditSession.prototype.setUseSoftTabs = function (val) {\n this.setOption(\"useSoftTabs\", val);\n };\n EditSession.prototype.getUseSoftTabs = function () {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n EditSession.prototype.setTabSize = function (tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n EditSession.prototype.getTabSize = function () {\n return this.$tabSize;\n };\n EditSession.prototype.isTabStop = function (position) {\n return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n };\n EditSession.prototype.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n EditSession.prototype.getNavigateWithinSoftTabs = function () {\n return this.$navigateWithinSoftTabs;\n };\n EditSession.prototype.setOverwrite = function (overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n EditSession.prototype.getOverwrite = function () {\n return this.$overwrite;\n };\n EditSession.prototype.toggleOverwrite = function () {\n this.setOverwrite(!this.$overwrite);\n };\n EditSession.prototype.addGutterDecoration = function (row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.removeGutterDecoration = function (row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.getBreakpoints = function () {\n return this.$breakpoints;\n };\n EditSession.prototype.setBreakpoints = function (rows) {\n this.$breakpoints = [];\n for (var i = 0; i < rows.length; i++) {\n this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n }\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.clearBreakpoints = function () {\n this.$breakpoints = [];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.setBreakpoint = function (row, className) {\n if (className === undefined)\n className = \"ace_breakpoint\";\n if (className)\n this.$breakpoints[row] = className;\n else\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.clearBreakpoint = function (row) {\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.addMarker = function (range, clazz, type, inFront) {\n var id = this.$markerId++;\n var marker = {\n range: range,\n type: type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz: clazz,\n inFront: !!inFront,\n id: id\n };\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return id;\n };\n EditSession.prototype.addDynamicMarker = function (marker, inFront) {\n if (!marker.update)\n return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return marker;\n };\n EditSession.prototype.removeMarker = function (markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker)\n return;\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n delete (markers[markerId]);\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n };\n EditSession.prototype.getMarkers = function (inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n EditSession.prototype.highlight = function (re) {\n if (!this.$searchHighlight) {\n var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n this.$searchHighlight = this.addDynamicMarker(highlight);\n }\n this.$searchHighlight.setRegexp(re);\n };\n EditSession.prototype.highlightLines = function (startRow, endRow, clazz, inFront) {\n if (typeof endRow != \"number\") {\n clazz = endRow;\n endRow = startRow;\n }\n if (!clazz)\n clazz = \"ace_step\";\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n EditSession.prototype.setAnnotations = function (annotations) {\n this.$annotations = annotations;\n this._signal(\"changeAnnotation\", {});\n };\n EditSession.prototype.getAnnotations = function () {\n return this.$annotations || [];\n };\n EditSession.prototype.clearAnnotations = function () {\n this.setAnnotations([]);\n };\n EditSession.prototype.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n if (match) {\n this.$autoNewLine = match[1];\n }\n else {\n this.$autoNewLine = \"\\n\";\n }\n };\n EditSession.prototype.getWordRange = function (row, column) {\n var line = this.getLine(row);\n var inToken = false;\n if (column > 0)\n inToken = !!line.charAt(column - 1).match(this.tokenRe);\n if (!inToken)\n inToken = !!line.charAt(column).match(this.tokenRe);\n if (inToken)\n var re = this.tokenRe;\n else if (/^\\s+$/.test(line.slice(column - 1, column + 1)))\n var re = /\\s/;\n else\n var re = this.nonTokenRe;\n var start = column;\n if (start > 0) {\n do {\n start--;\n } while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n return new Range(row, start, row, end);\n };\n EditSession.prototype.getAWordRange = function (row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n return wordRange;\n };\n EditSession.prototype.setNewLineMode = function (newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n EditSession.prototype.getNewLineMode = function () {\n return this.doc.getNewLineMode();\n };\n EditSession.prototype.setUseWorker = function (useWorker) { this.setOption(\"useWorker\", useWorker); };\n EditSession.prototype.getUseWorker = function () { return this.$useWorker; };\n EditSession.prototype.onReloadTokenizer = function (e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n EditSession.prototype.setMode = function (mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer)\n return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n }\n else {\n path = mode || \"ace/mode/text\";\n }\n if (!this.$modes[\"ace/mode/text\"])\n this.$modes[\"ace/mode/text\"] = new TextMode();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n this.$modeId = path;\n config.loadModule([\"mode\", path], function (m) {\n if (this.$modeId !== path)\n return cb && cb();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n }\n else if (m && m.Mode) {\n m = new m.Mode(options);\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n this.$onChangeMode(m);\n }\n cb && cb();\n }.bind(this));\n if (!this.$mode)\n this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n EditSession.prototype.$onChangeMode = function (mode, $isPlaceholder) {\n if (!$isPlaceholder)\n this.$modeId = mode.$id;\n if (this.$mode === mode)\n return;\n var oldMode = this.$mode;\n this.$mode = mode;\n this.$stopWorker();\n if (this.$useWorker)\n this.$startWorker();\n var tokenizer = mode.getTokenizer();\n if (tokenizer.on !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.on(\"update\", onReloadTokenizer);\n }\n this.bgTokenizer.setTokenizer(tokenizer);\n this.bgTokenizer.setDocument(this.getDocument());\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n if (!$isPlaceholder) {\n if (mode.attachToSession)\n mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n this._emit(\"changeMode\", { oldMode: oldMode, mode: mode });\n }\n };\n EditSession.prototype.$stopWorker = function () {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n EditSession.prototype.$startWorker = function () {\n try {\n this.$worker = this.$mode.createWorker(this);\n }\n catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n EditSession.prototype.getMode = function () {\n return this.$mode;\n };\n EditSession.prototype.setScrollTop = function (scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n EditSession.prototype.getScrollTop = function () {\n return this.$scrollTop;\n };\n EditSession.prototype.setScrollLeft = function (scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n EditSession.prototype.getScrollLeft = function () {\n return this.$scrollLeft;\n };\n EditSession.prototype.getScreenWidth = function () {\n this.$computeWidth();\n if (this.lineWidgets)\n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n EditSession.prototype.getLineWidgetMaxWidth = function () {\n if (this.lineWidgetsWidth != null)\n return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.screenWidth > width)\n width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n EditSession.prototype.$computeWidth = function (force) {\n if (this.$modified || force) {\n this.$modified = false;\n if (this.$useWrapMode)\n return this.screenWidth = this.$wrapLimit;\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len)\n break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (cache[i] == null)\n cache[i] = this.$getStringScreenWidth(lines[i])[0];\n if (cache[i] > longestScreenLine)\n longestScreenLine = cache[i];\n }\n this.screenWidth = longestScreenLine;\n }\n };\n EditSession.prototype.getLine = function (row) {\n return this.doc.getLine(row);\n };\n EditSession.prototype.getLines = function (firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n EditSession.prototype.getLength = function () {\n return this.doc.getLength();\n };\n EditSession.prototype.getTextRange = function (range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n EditSession.prototype.insert = function (position, text) {\n return this.doc.insert(position, text);\n };\n EditSession.prototype.remove = function (range) {\n return this.doc.remove(range);\n };\n EditSession.prototype.removeFullLines = function (firstRow, lastRow) {\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n EditSession.prototype.undoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.revertDelta(delta);\n }\n else if (delta.folds) {\n this.addFolds(delta.folds);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionBefore)\n this.selection.fromJSON(deltas.selectionBefore);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, true));\n }\n this.$fromUndo = false;\n };\n EditSession.prototype.redoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.$safeApplyDelta(delta);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionAfter)\n this.selection.fromJSON(deltas.selectionAfter);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, false));\n }\n this.$fromUndo = false;\n };\n EditSession.prototype.setUndoSelect = function (enable) {\n this.$undoSelect = enable;\n };\n EditSession.prototype.$getUndoSelection = function (deltas, isUndo) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n var range, point;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (!delta.start)\n continue; // skip folds\n if (!range) {\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n }\n else {\n range = Range.fromPoints(delta.start, delta.start);\n }\n continue;\n }\n if (isInsert(delta)) {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n point = delta.end;\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n }\n else {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n }\n }\n return range;\n };\n EditSession.prototype.replace = function (range, text) {\n return this.doc.replace(range, text);\n };\n EditSession.prototype.moveText = function (fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n var toRange = Range.fromPoints(toPosition, toPosition);\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n toRange.end.column += collDiff;\n }\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n toRange.end = this.insert(toRange.start, text);\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function (x) {\n x = x.clone();\n if (x.start.row == oldStart.row)\n x.start.column += collDiff;\n if (x.end.row == oldStart.row)\n x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n return toRange;\n };\n EditSession.prototype.indentRows = function (startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n for (var row = startRow; row <= endRow; row++)\n this.doc.insertInLine({ row: row, column: 0 }, indentString);\n };\n EditSession.prototype.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n for (var j = 0; j < size; ++j)\n if (line.charAt(j) != ' ')\n break;\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n }\n else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n this.remove(deleteRange);\n }\n };\n EditSession.prototype.$moveLines = function (firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0)\n return 0;\n var diff = row - firstRow;\n }\n else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength() - 1)\n return 0;\n var diff = row - lastRow;\n }\n else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function (x) {\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n var lines = dir == 0\n ? this.doc.getLines(firstRow, lastRow)\n : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow + diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n EditSession.prototype.moveLinesUp = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n EditSession.prototype.moveLinesDown = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n EditSession.prototype.duplicateLines = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n EditSession.prototype.$clipRowToDocument = function (row) {\n return Math.max(0, Math.min(row, this.doc.getLength() - 1));\n };\n EditSession.prototype.$clipColumnToRow = function (row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n EditSession.prototype.$clipPositionToDocument = function (row, column) {\n column = Math.max(0, column);\n if (row < 0) {\n row = 0;\n column = 0;\n }\n else {\n var len = this.doc.getLength();\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len - 1).length;\n }\n else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n return {\n row: row,\n column: column\n };\n };\n EditSession.prototype.$clipRangeToDocument = function (range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n }\n else {\n range.start.column = this.$clipColumnToRow(range.start.row, range.start.column);\n }\n var len = this.doc.getLength() - 1;\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n }\n else {\n range.end.column = this.$clipColumnToRow(range.end.row, range.end.column);\n }\n return range;\n };\n EditSession.prototype.setUseWrapMode = function (useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n this._signal(\"changeWrapMode\");\n }\n };\n EditSession.prototype.getUseWrapMode = function () {\n return this.$useWrapMode;\n };\n EditSession.prototype.setWrapLimitRange = function (min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = { min: min, max: max };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode)\n this._signal(\"changeWrapMode\");\n }\n };\n EditSession.prototype.adjustWrapLimit = function (desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0)\n limits = { min: $printMargin, max: $printMargin };\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n this._signal(\"changeWrapLimit\");\n }\n return true;\n }\n return false;\n };\n EditSession.prototype.$constrainWrapLimit = function (wrapLimit, min, max) {\n if (min)\n wrapLimit = Math.max(min, wrapLimit);\n if (max)\n wrapLimit = Math.min(max, wrapLimit);\n return wrapLimit;\n };\n EditSession.prototype.getWrapLimit = function () {\n return this.$wrapLimit;\n };\n EditSession.prototype.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n EditSession.prototype.getWrapLimitRange = function () {\n return {\n min: this.$wrapLimitRange.min,\n max: this.$wrapLimitRange.max\n };\n };\n EditSession.prototype.$updateInternalDataOnChange = function (delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n var foldLineBefore = this.getFoldLine(firstRow);\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n lastRow = firstRow;\n }\n else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n }\n else \n if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n }\n else {\n len = Math.abs(delta.start.column - delta.end.column);\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n this.$updating = false;\n if (useWrapMode)\n this.$updateWrapData(firstRow, lastRow);\n else\n this.$updateRowLengthCache(firstRow, lastRow);\n return removedFolds;\n };\n EditSession.prototype.$updateRowLengthCache = function (firstRow, lastRow, b) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n EditSession.prototype.$updateWrapData = function (firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row++;\n }\n else {\n tokens = [];\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n var walkTokens;\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n }\n else {\n walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1);\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n EditSession.prototype.$computeWrapSplits = function (tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n var isCode = this.$wrapAsCode;\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0)\n return indentation;\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE)\n indentation += 1;\n else if (token == TAB)\n indentation += tabSize;\n else if (token == TAB_SPACE)\n continue;\n else\n break;\n }\n }\n if (isCode && indentedSoftWrap !== false)\n indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n function addSplit(screenPos) {\n var len = screenPos - lastSplit;\n for (var i = lastSplit; i < screenPos; i++) {\n var ch = tokens[i];\n if (ch === 12 || ch === 2)\n len -= 1;\n }\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n var indent = 0;\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n split = lastSplit + wrapLimit;\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n addSplit(split);\n continue;\n }\n var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1);\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split--;\n }\n }\n else {\n while (split > minSplit && tokens[split] < SPACE) {\n split--;\n }\n }\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT)\n split--;\n addSplit(split - indent);\n }\n return splits;\n };\n EditSession.prototype.$getDisplayTokens = function (str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n }\n else if (c == 32) {\n arr.push(SPACE);\n }\n else if ((c > 39 && c < 48) || (c > 57 && c < 64)) {\n arr.push(PUNCTUATION);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n }\n else {\n arr.push(CHAR);\n }\n }\n return arr;\n };\n EditSession.prototype.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0)\n return [0, 0];\n if (maxScreenColumn == null)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n }\n else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n EditSession.prototype.getRowLength = function (row) {\n var h = 1;\n if (this.lineWidgets)\n h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n if (!this.$useWrapMode || !this.$wrapData[row])\n return h;\n else\n return this.$wrapData[row].length + h;\n };\n EditSession.prototype.getRowLineCount = function (row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n }\n else {\n return this.$wrapData[row].length + 1;\n }\n };\n EditSession.prototype.getRowWrapIndent = function (screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n }\n else {\n return 0;\n }\n };\n EditSession.prototype.getScreenLastRowColumn = function (screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n EditSession.prototype.getDocumentLastRowColumn = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n EditSession.prototype.getDocumentLastRowColumnPosition = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n EditSession.prototype.getRowSplitData = function (row) {\n if (!this.$useWrapMode) {\n return undefined;\n }\n else {\n return this.$wrapData[row];\n }\n };\n EditSession.prototype.getScreenTabSize = function (screenColumn) {\n return this.$tabSize - (screenColumn % this.$tabSize | 0);\n };\n EditSession.prototype.screenToDocumentRow = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n EditSession.prototype.screenToDocumentColumn = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n EditSession.prototype.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) {\n if (screenRow < 0)\n return { row: 0, column: 0 };\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n }\n else {\n row += rowLength;\n docRow++;\n if (docRow > foldStart) {\n docRow = foldLine.end.row + 1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n }\n else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n }\n else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n if (splits) {\n column = splits[splitIndex];\n if (splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column)\n docColumn = column - 1;\n if (foldLine)\n return foldLine.idxToPosition(docColumn);\n return { row: docRow, column: docColumn };\n };\n EditSession.prototype.documentToScreenPosition = function (docRow, docColumn) {\n if (typeof docColumn === \"undefined\")\n var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\n else\n pos = this.$clipPositionToDocument(docRow, docColumn);\n docRow = pos.row;\n docColumn = pos.column;\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n var rowEnd, row = 0;\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow)\n break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n else {\n rowEnd = row + 1;\n }\n screenRow += this.getRowLength(row);\n row = rowEnd;\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n var textLine = \"\";\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n }\n else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n var wrapIndent = 0;\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n if (wrapRow) {\n var screenRowOffset = 0;\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow++;\n screenRowOffset++;\n }\n textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length);\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove)\n screenRow += this.lineWidgets[row].rowsAbove;\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n EditSession.prototype.documentToScreenColumn = function (row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n EditSession.prototype.documentToScreenRow = function (docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n EditSession.prototype.getScreenLength = function () {\n var screenRows = 0;\n var fold = null;\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n }\n else {\n var lastRow = this.$wrapData.length;\n var row = 0, i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row : Infinity;\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row++;\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = this.$foldData[i++];\n foldStart = fold ? fold.start.row : Infinity;\n }\n }\n }\n if (this.lineWidgets)\n screenRows += this.$getWidgetScreenLength();\n return screenRows;\n };\n EditSession.prototype.$setFontMetrics = function (fm) {\n if (!this.$enableVarChar)\n return;\n this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0)\n return [0, 0];\n if (!maxScreenColumn)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else {\n screenColumn += fm.getCharacterWidth(c);\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n };\n EditSession.prototype.destroy = function () {\n if (!this.destroyed) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer.cleanup();\n this.destroyed = true;\n }\n this.$stopWorker();\n this.removeAllListeners();\n if (this.doc) {\n this.doc.off(\"change\", this.$onChange);\n }\n this.selection.detach();\n };\n return EditSession;\n}());\nEditSession.$uid = 0;\nEditSession.prototype.$modes = config.$modes;\nEditSession.prototype.getValue = EditSession.prototype.toString;\nEditSession.prototype.$defaultUndoManager = {\n undo: function () { },\n redo: function () { },\n hasUndo: function () { },\n hasRedo: function () { },\n reset: function () { },\n add: function () { },\n addSelection: function () { },\n startNewGroup: function () { },\n addSession: function () { }\n};\nEditSession.prototype.$overwrite = false;\nEditSession.prototype.$mode = null;\nEditSession.prototype.$modeId = null;\nEditSession.prototype.$scrollTop = 0;\nEditSession.prototype.$scrollLeft = 0;\nEditSession.prototype.$wrapLimit = 80;\nEditSession.prototype.$useWrapMode = false;\nEditSession.prototype.$wrapLimitRange = {\n min: null,\n max: null\n};\nEditSession.prototype.lineWidgets = null;\nEditSession.prototype.isFullWidth = isFullWidth;\noop.implement(EditSession.prototype, EventEmitter);\nvar CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12;\nfunction isFullWidth(c) {\n if (c < 0x1100)\n return false;\n return c >= 0x1100 && c <= 0x115F ||\n c >= 0x11A3 && c <= 0x11A7 ||\n c >= 0x11FA && c <= 0x11FF ||\n c >= 0x2329 && c <= 0x232A ||\n c >= 0x2E80 && c <= 0x2E99 ||\n c >= 0x2E9B && c <= 0x2EF3 ||\n c >= 0x2F00 && c <= 0x2FD5 ||\n c >= 0x2FF0 && c <= 0x2FFB ||\n c >= 0x3000 && c <= 0x303E ||\n c >= 0x3041 && c <= 0x3096 ||\n c >= 0x3099 && c <= 0x30FF ||\n c >= 0x3105 && c <= 0x312D ||\n c >= 0x3131 && c <= 0x318E ||\n c >= 0x3190 && c <= 0x31BA ||\n c >= 0x31C0 && c <= 0x31E3 ||\n c >= 0x31F0 && c <= 0x321E ||\n c >= 0x3220 && c <= 0x3247 ||\n c >= 0x3250 && c <= 0x32FE ||\n c >= 0x3300 && c <= 0x4DBF ||\n c >= 0x4E00 && c <= 0xA48C ||\n c >= 0xA490 && c <= 0xA4C6 ||\n c >= 0xA960 && c <= 0xA97C ||\n c >= 0xAC00 && c <= 0xD7A3 ||\n c >= 0xD7B0 && c <= 0xD7C6 ||\n c >= 0xD7CB && c <= 0xD7FB ||\n c >= 0xF900 && c <= 0xFAFF ||\n c >= 0xFE10 && c <= 0xFE19 ||\n c >= 0xFE30 && c <= 0xFE52 ||\n c >= 0xFE54 && c <= 0xFE66 ||\n c >= 0xFE68 && c <= 0xFE6B ||\n c >= 0xFF01 && c <= 0xFF60 ||\n c >= 0xFFE0 && c <= 0xFFE6;\n}\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\nconfig.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function (value) {\n if (!value || value == \"off\")\n value = false;\n else if (value == \"free\")\n value = true;\n else if (value == \"printMargin\")\n value = -1;\n else if (typeof value == \"string\")\n value = parseInt(value, 10) || false;\n if (this.$wrap == value)\n return;\n this.$wrap = value;\n if (!value) {\n this.setUseWrapMode(false);\n }\n else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function () {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1)\n return \"printMargin\";\n if (!this.getWrapLimitRange().min)\n return \"free\";\n return this.$wrap;\n }\n return \"off\";\n },\n handlesSet: true\n },\n wrapMethod: {\n set: function (val) {\n val = val == \"auto\"\n ? this.$mode.type != \"text\"\n : val != \"text\";\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: {\n set: function () {\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n },\n initialValue: true\n },\n firstLineNumber: {\n set: function () { this._signal(\"changeBreakpoint\"); },\n initialValue: 1\n },\n useWorker: {\n set: function (useWorker) {\n this.$useWorker = useWorker;\n this.$stopWorker();\n if (useWorker)\n this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: { initialValue: true },\n tabSize: {\n set: function (tabSize) {\n tabSize = parseInt(tabSize);\n if (tabSize > 0 && this.$tabSize !== tabSize) {\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n this._signal(\"changeTabSize\");\n }\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: { initialValue: false },\n foldStyle: {\n set: function (val) { this.setFoldStyle(val); },\n handlesSet: true\n },\n overwrite: {\n set: function (val) { this._signal(\"changeOverwrite\"); },\n initialValue: false\n },\n newLineMode: {\n set: function (val) { this.doc.setNewLineMode(val); },\n get: function () { return this.doc.getNewLineMode(); },\n handlesSet: true\n },\n mode: {\n set: function (val) { this.setMode(val); },\n get: function () { return this.$modeId; },\n handlesSet: true\n }\n});\nexports.EditSession = EditSession;\n\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = /** @class */ (function () {\n function Search() {\n this.$options = {};\n }\n Search.prototype.set = function (options) {\n oop.mixin(this.$options, options);\n return this;\n };\n Search.prototype.getOptions = function () {\n return lang.copyObject(this.$options);\n };\n Search.prototype.setOptions = function (options) {\n this.$options = options;\n };\n Search.prototype.find = function (session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator)\n return false;\n var firstRange = null;\n iterator.forEach(function (sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n if (sc == ec && options.start && options.start.start\n && options.skipCurrent != false && firstRange.isEqual(options.start)) {\n firstRange = null;\n return false;\n }\n return true;\n });\n return firstRange;\n };\n Search.prototype.findAll = function (session) {\n var options = this.$options;\n if (!options.needle)\n return [];\n this.$assembleRegExp(options);\n var range = options.range;\n var lines = range\n ? session.getLines(range.start.row, range.end.row)\n : session.doc.getAllLines();\n var ranges = [];\n var re = options.re;\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++)\n if (lines[row + j].search(re[j]) == -1)\n continue outer;\n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n if (prevRange && prevRange.end.row === row &&\n prevRange.end.column > startIndex) {\n continue;\n }\n ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex));\n if (len > 2)\n row = row + len - 2;\n }\n }\n else {\n for (var i = 0; i < lines.length; i++) {\n var matches = lang.getMatchOffsets(lines[i], re);\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.end.column;\n var i = 0, j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == 0)\n i++;\n var endRow = range.end.row - range.start.row;\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == endRow)\n j--;\n ranges = ranges.slice(i, j + 1);\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n return ranges;\n };\n Search.prototype.replace = function (input, replacement) {\n var options = this.$options;\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine)\n return replacement;\n if (!re)\n return;\n var match = re.exec(input);\n if (!match || match[0].length != input.length)\n return null;\n replacement = input.replace(re, replacement);\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n for (var i = Math.min(input.length, input.length); i--;) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch)\n replacement[i] = replacement[i].toUpperCase();\n else\n replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n return replacement;\n };\n Search.prototype.$assembleRegExp = function (options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp)\n return options.re = options.needle;\n var needle = options.needle;\n if (!options.needle)\n return options.re = false;\n if (options.$supportsUnicodeFlag === undefined) {\n options.$supportsUnicodeFlag = lang.supportsUnicodeFlag();\n }\n try {\n new RegExp(needle, \"u\");\n }\n catch (e) {\n options.$supportsUnicodeFlag = false; //left for backward compatibility with previous versions for cases like /ab\\{2}/gu\n }\n if (!options.regExp)\n needle = lang.escapeRegExp(needle);\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n if (options.$supportsUnicodeFlag) {\n modifier += \"u\";\n }\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine)\n return options.re = this.$assembleMultilineRegExp(needle, modifier);\n try {\n var re = new RegExp(needle, modifier);\n }\n catch (e) {\n re = false;\n }\n return options.re = re;\n };\n Search.prototype.$assembleMultilineRegExp = function (needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n for (var i = 0; i < parts.length; i++)\n try {\n re.push(new RegExp(parts[i], modifier));\n }\n catch (e) {\n return false;\n }\n return re;\n };\n Search.prototype.$matchIterator = function (session, options) {\n var re = this.$assembleRegExp(options);\n if (!re)\n return false;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n var range = options.range;\n var start = options.start;\n if (!start)\n start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n if (start.start)\n start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n if (backwards) {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row--; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n };\n }\n else {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row = row + 1; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n };\n }\n if (options.$isMultiLine) {\n var len = re.length;\n var forEachInLine = function (row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0 || startRow + len > session.getLength())\n return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1)\n return;\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1)\n return;\n }\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset)\n return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n return true;\n };\n }\n else if (backwards) {\n var forEachInLine = function (row, endIndex, callback) {\n var line = session.getLine(row);\n var matches = [];\n var m, last = 0;\n re.lastIndex = 0;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (!length) {\n if (last >= line.length)\n break;\n re.lastIndex = last += 1;\n }\n if (m.index + length > endIndex)\n break;\n matches.push(m.index, length);\n }\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length))\n return true;\n }\n };\n }\n else {\n var forEachInLine = function (row, startIndex, callback) {\n var line = session.getLine(row);\n var last;\n var m;\n re.lastIndex = startIndex;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row, last + length))\n return true;\n if (!length) {\n re.lastIndex = last += 1;\n if (last >= line.length)\n return false;\n }\n }\n };\n }\n return { forEach: forEach };\n };\n return Search;\n}());\nfunction addWordBoundary(needle, options) {\n var supportsLookbehind = lang.supportsLookbehind();\n function wordBoundary(c, firstChar) {\n if (firstChar === void 0) { firstChar = true; }\n var wordRegExp = supportsLookbehind && options.$supportsUnicodeFlag ? new RegExp(\"[\\\\p{L}\\\\p{N}_]\", \"u\") : new RegExp(\"\\\\w\");\n if (wordRegExp.test(c) || options.regExp) {\n if (supportsLookbehind && options.$supportsUnicodeFlag) {\n if (firstChar)\n return \"(?<=^|[^\\\\p{L}\\\\p{N}_])\";\n return \"(?=[^\\\\p{L}\\\\p{N}_]|$)\";\n }\n return \"\\\\b\";\n }\n return \"\";\n }\n var needleArray = Array.from(needle);\n var firstChar = needleArray[0];\n var lastChar = needleArray[needleArray.length - 1];\n return wordBoundary(firstChar) + needle + wordBoundary(lastChar, false);\n}\nexports.Search = Search;\n\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\nvar MultiHashHandler = /** @class */ (function () {\n function MultiHashHandler(config, platform) {\n this.$init(config, platform, false);\n }\n MultiHashHandler.prototype.$init = function (config, platform, $singleCommand) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = $singleCommand;\n };\n MultiHashHandler.prototype.addCommand = function (command) {\n if (this.commands[command.name])\n this.removeCommand(command);\n this.commands[command.name] = command;\n if (command.bindKey)\n this._buildKeyHash(command);\n };\n MultiHashHandler.prototype.removeCommand = function (command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand)\n delete this.commands[name];\n var ckb = this.commandKeyBinding;\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n if (cmdGroup == command) {\n delete ckb[keyId];\n }\n else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1)\n ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n MultiHashHandler.prototype.bindKey = function (key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined)\n position = key.position;\n key = key[this.platform];\n }\n if (!key)\n return;\n if (typeof command == \"function\")\n return this.addCommand({ exec: command, bindKey: key, name: command.name || key });\n key.split(\"|\").forEach(function (keyPart) {\n var chain = \"\";\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function (keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n MultiHashHandler.prototype._addCommandToBinding = function (keyId, command, position) {\n var ckb = this.commandKeyBinding, i;\n if (!command) {\n delete ckb[keyId];\n }\n else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n }\n else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n }\n else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n var commands = ckb[keyId];\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position)\n break;\n }\n commands.splice(i, 0, command);\n }\n };\n MultiHashHandler.prototype.addCommands = function (commands) {\n commands && Object.keys(commands).forEach(function (name) {\n var command = commands[name];\n if (!command)\n return;\n if (typeof command === \"string\")\n return this.bindKey(command, name);\n if (typeof command === \"function\")\n command = { exec: command };\n if (typeof command !== \"object\")\n return;\n if (!command.name)\n command.name = name;\n this.addCommand(command);\n }, this);\n };\n MultiHashHandler.prototype.removeCommands = function (commands) {\n Object.keys(commands).forEach(function (name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n MultiHashHandler.prototype.bindKeys = function (keyList) {\n Object.keys(keyList).forEach(function (key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n MultiHashHandler.prototype._buildKeyHash = function (command) {\n this.bindKey(command.bindKey, command);\n };\n MultiHashHandler.prototype.parseKeys = function (keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function (x) { return x; });\n var key = parts.pop();\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode])\n key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n else if (!parts.length)\n return { key: key, hashId: -1 };\n else if (parts.length == 1 && parts[0] == \"shift\")\n return { key: key.toUpperCase(), hashId: -1 };\n var hashId = 0;\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n if (modifier == null) {\n if (typeof console != \"undefined\")\n console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n hashId |= modifier;\n }\n return { key: key, hashId: hashId };\n };\n MultiHashHandler.prototype.findKeyCommand = function (hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n MultiHashHandler.prototype.handleKeyboard = function (data, hashId, keyString, keyCode) {\n if (keyCode < 0)\n return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return { command: \"null\" };\n }\n }\n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1)\n data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0)\n data.$keyChain = \"\"; // reset keyChain\n }\n return { command: command };\n };\n MultiHashHandler.prototype.getStatusText = function (editor, data) {\n return data.$keyChain || \"\";\n };\n return MultiHashHandler;\n}());\nfunction getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position\n || (command.isDefault ? -100 : 0);\n}\nvar HashHandler = /** @class */ (function (_super) {\n __extends(HashHandler, _super);\n function HashHandler(config, platform) {\n var _this = _super.call(this, config, platform) || this;\n _this.$singleCommand = true;\n return _this;\n }\n return HashHandler;\n}(MultiHashHandler));\nHashHandler.call = function (thisArg, config, platform) {\n MultiHashHandler.prototype.$init.call(thisArg, config, platform, true);\n};\nMultiHashHandler.call = function (thisArg, config, platform) {\n MultiHashHandler.prototype.$init.call(thisArg, config, platform, false);\n};\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CommandManager = /** @class */ (function (_super) {\n __extends(CommandManager, _super);\n function CommandManager(platform, commands) {\n var _this = _super.call(this, commands, platform) || this;\n _this.byName = _this.commands;\n _this.setDefaultHandler(\"exec\", function (e) {\n if (!e.args) {\n return e.command.exec(e.editor, {}, e.event, true);\n }\n return e.command.exec(e.editor, e.args, e.event, false);\n });\n return _this;\n }\n CommandManager.prototype.exec = function (command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--;) {\n if (this.exec(command[i], editor, args))\n return true;\n }\n return false;\n }\n if (typeof command === \"string\")\n command = this.commands[command];\n if (!command)\n return false;\n if (editor && editor.$readOnly && !command.readOnly)\n return false;\n if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor))\n return false;\n var e = { editor: editor, command: command, args: args };\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n return e.returnValue === false ? false : true;\n };\n CommandManager.prototype.toggleRecording = function (editor) {\n if (this.$inReplay)\n return;\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.off(\"exec\", this.$addCommandToMacro);\n if (!this.macro.length)\n this.macro = this.oldMacro;\n return this.recording = false;\n }\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function (e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n CommandManager.prototype.replay = function (editor) {\n if (this.$inReplay || !this.macro)\n return;\n if (this.recording)\n return this.toggleRecording(editor);\n try {\n this.$inReplay = true;\n this.macro.forEach(function (x) {\n if (typeof x == \"string\")\n this.exec(x, editor);\n else\n this.exec(x[0], editor, x[1]);\n }, this);\n }\n finally {\n this.$inReplay = false;\n }\n };\n CommandManager.prototype.trimMacro = function (m) {\n return m.map(function (x) {\n if (typeof x[0] != \"string\")\n x[0] = x[0].name;\n if (!x[1])\n x = x[0];\n return x;\n });\n };\n return CommandManager;\n}(MultiHashHandler));\noop.implement(CommandManager.prototype, EventEmitter);\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\nfunction bindKey(win, mac) {\n return { win: win, mac: mac };\n}\nexports.commands = [{\n name: \"showSettingsMenu\",\n description: \"Show settings menu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/settings_menu\", function (module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n }, {\n name: \"goToNextError\",\n description: \"Go to next error\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"goToPreviousError\",\n description: \"Go to previous error\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selectall\",\n description: \"Select all\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function (editor) { editor.selectAll(); },\n readOnly: true\n }, {\n name: \"centerselection\",\n description: \"Center selection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function (editor) { editor.centerSelection(); },\n readOnly: true\n }, {\n name: \"gotoline\",\n description: \"Go to line...\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function (editor, line) {\n if (typeof line === \"number\" && !isNaN(line))\n editor.gotoLine(line);\n editor.prompt({ $type: \"gotoLine\" });\n },\n readOnly: true\n }, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function (editor) { editor.session.toggleFold(false); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function (editor) { editor.session.toggleFold(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleFoldWidget\",\n description: \"Toggle fold widget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleParentFoldWidget\",\n description: \"Toggle parent fold widget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldall\",\n description: \"Fold all\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAll(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldAllComments\",\n description: \"Fold all comments\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAllComments(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldOther\",\n description: \"Fold other\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function (editor) {\n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfoldall\",\n description: \"Unfold all\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function (editor) { editor.session.unfold(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findnext\",\n description: \"Find next\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function (editor) { editor.findNext(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findprevious\",\n description: \"Find previous\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function (editor) { editor.findPrevious(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"selectOrFindNext\",\n description: \"Select or find next\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findNext();\n },\n readOnly: true\n }, {\n name: \"selectOrFindPrevious\",\n description: \"Select or find previous\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findPrevious();\n },\n readOnly: true\n }, {\n name: \"find\",\n description: \"Find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor); });\n },\n readOnly: true\n }, {\n name: \"overwrite\",\n description: \"Overwrite\",\n bindKey: \"Insert\",\n exec: function (editor) { editor.toggleOverwrite(); },\n readOnly: true\n }, {\n name: \"selecttostart\",\n description: \"Select to start\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function (editor) { editor.getSelection().selectFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotostart\",\n description: \"Go to start\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function (editor) { editor.navigateFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectup\",\n description: \"Select up\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function (editor) { editor.getSelection().selectUp(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golineup\",\n description: \"Go line up\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function (editor, args) { editor.navigateUp(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttoend\",\n description: \"Select to end\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function (editor) { editor.getSelection().selectFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotoend\",\n description: \"Go to end\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function (editor) { editor.navigateFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectdown\",\n description: \"Select down\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function (editor) { editor.getSelection().selectDown(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golinedown\",\n description: \"Go line down\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function (editor, args) { editor.navigateDown(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordleft\",\n description: \"Select word left\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function (editor) { editor.getSelection().selectWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordleft\",\n description: \"Go to word left\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function (editor) { editor.navigateWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolinestart\",\n description: \"Select to line start\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolinestart\",\n description: \"Go to line start\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function (editor) { editor.navigateLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectleft\",\n description: \"Select left\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function (editor) { editor.getSelection().selectLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoleft\",\n description: \"Go to left\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function (editor, args) { editor.navigateLeft(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordright\",\n description: \"Select word right\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordright\",\n description: \"Go to word right\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function (editor) { editor.navigateWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolineend\",\n description: \"Select to line end\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolineend\",\n description: \"Go to line end\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function (editor) { editor.navigateLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectright\",\n description: \"Select right\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoright\",\n description: \"Go to right\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function (editor, args) { editor.navigateRight(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectpagedown\",\n description: \"Select page down\",\n bindKey: \"Shift-PageDown\",\n exec: function (editor) { editor.selectPageDown(); },\n readOnly: true\n }, {\n name: \"pagedown\",\n description: \"Page down\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function (editor) { editor.scrollPageDown(); },\n readOnly: true\n }, {\n name: \"gotopagedown\",\n description: \"Go to page down\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function (editor) { editor.gotoPageDown(); },\n readOnly: true\n }, {\n name: \"selectpageup\",\n description: \"Select page up\",\n bindKey: \"Shift-PageUp\",\n exec: function (editor) { editor.selectPageUp(); },\n readOnly: true\n }, {\n name: \"pageup\",\n description: \"Page up\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function (editor) { editor.scrollPageUp(); },\n readOnly: true\n }, {\n name: \"gotopageup\",\n description: \"Go to page up\",\n bindKey: \"PageUp\",\n exec: function (editor) { editor.gotoPageUp(); },\n readOnly: true\n }, {\n name: \"scrollup\",\n description: \"Scroll up\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function (e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"scrolldown\",\n description: \"Scroll down\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function (e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"selectlinestart\",\n description: \"Select line start\",\n bindKey: \"Shift-Home\",\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectlineend\",\n description: \"Select line end\",\n bindKey: \"Shift-End\",\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"togglerecording\",\n description: \"Toggle recording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function (editor) { editor.commands.toggleRecording(editor); },\n readOnly: true\n }, {\n name: \"replaymacro\",\n description: \"Replay macro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function (editor) { editor.commands.replay(editor); },\n readOnly: true\n }, {\n name: \"jumptomatching\",\n description: \"Jump to matching\",\n bindKey: bindKey(\"Ctrl-\\\\|Ctrl-P\", \"Command-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selecttomatching\",\n description: \"Select to matching\",\n bindKey: bindKey(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\", \"Command-Shift-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"expandToMatching\",\n description: \"Expand to matching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function (editor) { editor.jumpToMatching(true, true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"passKeysToBrowser\",\n description: \"Pass keys to browser\",\n bindKey: bindKey(null, null),\n exec: function () { },\n passEvent: true,\n readOnly: true\n }, {\n name: \"copy\",\n description: \"Copy\",\n exec: function (editor) {\n },\n readOnly: true\n },\n {\n name: \"cut\",\n description: \"Cut\",\n exec: function (editor) {\n var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n editor._emit(\"cut\", range);\n if (!range.isEmpty())\n editor.session.remove(range);\n editor.clearSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"paste\",\n description: \"Paste\",\n exec: function (editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"removeline\",\n description: \"Remove line\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function (editor) { editor.removeLines(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"duplicateSelection\",\n description: \"Duplicate selection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function (editor) { editor.duplicateSelection(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"sortlines\",\n description: \"Sort lines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function (editor) { editor.sortLines(); },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"togglecomment\",\n description: \"Toggle comment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function (editor) { editor.toggleCommentLines(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"toggleBlockComment\",\n description: \"Toggle block comment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function (editor) { editor.toggleBlockComment(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"modifyNumberUp\",\n description: \"Modify number up\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function (editor) { editor.modifyNumber(1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"modifyNumberDown\",\n description: \"Modify number down\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function (editor) { editor.modifyNumber(-1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"replace\",\n description: \"Replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor, true); });\n }\n }, {\n name: \"undo\",\n description: \"Undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function (editor) { editor.undo(); }\n }, {\n name: \"redo\",\n description: \"Redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function (editor) { editor.redo(); }\n }, {\n name: \"copylinesup\",\n description: \"Copy lines up\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function (editor) { editor.copyLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesup\",\n description: \"Move lines up\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function (editor) { editor.moveLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"copylinesdown\",\n description: \"Copy lines down\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function (editor) { editor.copyLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesdown\",\n description: \"Move lines down\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function (editor) { editor.moveLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"del\",\n description: \"Delete\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function (editor) { editor.remove(\"right\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"backspace\",\n description: \"Backspace\",\n bindKey: bindKey(\"Shift-Backspace|Backspace\", \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),\n exec: function (editor) { editor.remove(\"left\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"cut_or_delete\",\n description: \"Cut or delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function (editor) {\n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n }\n else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestart\",\n description: \"Remove to line start\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function (editor) { editor.removeToLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineend\",\n description: \"Remove to line end\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function (editor) { editor.removeToLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestarthard\",\n description: \"Remove to line start hard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineendhard\",\n description: \"Remove to line end hard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordleft\",\n description: \"Remove word left\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function (editor) { editor.removeWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordright\",\n description: \"Remove word right\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function (editor) { editor.removeWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"outdent\",\n description: \"Outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"indent\",\n description: \"Indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function (editor) { editor.indent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockoutdent\",\n description: \"Block outdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockindent\",\n description: \"Block indent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function (editor) { editor.blockIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"insertstring\",\n description: \"Insert string\",\n exec: function (editor, str) { editor.insert(str); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"inserttext\",\n description: \"Insert text\",\n exec: function (editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"splitline\",\n description: \"Split line\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function (editor) { editor.splitLine(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"transposeletters\",\n description: \"Transpose letters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function (editor) { editor.transposeLetters(); },\n multiSelectAction: function (editor) { editor.transposeSelections(1); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"touppercase\",\n description: \"To uppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function (editor) { editor.toUpperCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"tolowercase\",\n description: \"To lowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function (editor) { editor.toLowerCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"autoindent\",\n description: \"Auto Indent\",\n bindKey: bindKey(null, null),\n exec: function (editor) { editor.autoIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"animate\"\n }, {\n name: \"expandtoline\",\n description: \"Expand to line\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"openlink\",\n bindKey: bindKey(\"Ctrl+F3\", \"F3\"),\n exec: function (editor) { editor.openLink(); }\n }, {\n name: \"joinlines\",\n description: \"Join lines\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n insertLine += curLine;\n }\n if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n }\n else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n }, {\n name: \"invertSelection\",\n description: \"Invert selection\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n for (var i = 0; i < ranges.length; i++) {\n if (i == (ranges.length - 1)) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n }\n else {\n newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n editor.exitMultiSelectMode();\n editor.clearSelection();\n for (var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n }, {\n name: \"addLineAfter\",\n description: \"Add new line after the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n editor.navigateLineEnd();\n editor.insert(\"\\n\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"addLineBefore\",\n description: \"Add new line before the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n var cursor = editor.getCursorPosition();\n editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE);\n editor.insert(\"\\n\");\n if (cursor.row === 0)\n editor.navigateUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"openCommandPallete\",\n exec: function (editor) {\n console.warn(\"This is an obsolete command. Please use `openCommandPalette` instead.\");\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n }, {\n name: \"openCommandPalette\",\n description: \"Open command palette\",\n bindKey: bindKey(\"F1\", \"F1\"),\n exec: function (editor) {\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n }, {\n name: \"modeSelect\",\n description: \"Change language mode...\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n editor.prompt({ $type: \"modes\" });\n },\n readOnly: true\n }];\nfor (var i = 1; i < 9; i++) {\n exports.commands.push({\n name: \"foldToLevel\" + i,\n description: \"Fold To Level \" + i,\n level: i,\n exec: function (editor) { editor.session.foldToLevel(this.level); },\n scrollIntoView: \"center\",\n readOnly: true\n });\n}\n\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar LineWidgets = /** @class */ (function () {\n function LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n }\n LineWidgets.prototype.getRowLength = function (row) {\n var h;\n if (this.lineWidgets)\n h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else\n h = 0;\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n }\n else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n LineWidgets.prototype.$getWidgetScreenLength = function () {\n var screenRows = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.rowCount && !w.hidden)\n screenRows += w.rowCount;\n });\n return screenRows;\n };\n LineWidgets.prototype.$onChangeEditor = function (e) {\n this.attach(e.editor);\n };\n LineWidgets.prototype.attach = function (editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this)\n editor.widgetManager.detach();\n if (this.editor == editor)\n return;\n this.detach();\n this.editor = editor;\n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n LineWidgets.prototype.detach = function (e) {\n var editor = this.editor;\n if (!editor)\n return;\n this.editor = null;\n editor.widgetManager = null;\n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function (w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n LineWidgets.prototype.updateOnFold = function (e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action)\n return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i])\n lineWidgets[i].hidden = hide;\n }\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start])\n lineWidgets[start] = lineWidgets[end];\n else\n lineWidgets[end].hidden = hide;\n }\n else {\n if (lineWidgets[start] == lineWidgets[end])\n lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n LineWidgets.prototype.updateOnChange = function (delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n }\n else if (delta.action == \"remove\") {\n var removed = lineWidgets.splice(startRow + 1, len);\n if (!lineWidgets[startRow] && removed[removed.length - 1]) {\n lineWidgets[startRow] = removed.pop();\n }\n removed.forEach(function (w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n }\n else {\n var args = new Array(len);\n if (lineWidgets[startRow] && lineWidgets[startRow].column != null) {\n if (delta.start.column > lineWidgets[startRow].column)\n startRow++;\n }\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\n }\n };\n LineWidgets.prototype.$updateRows = function () {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var noWidgets = true;\n lineWidgets.forEach(function (w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets)\n this.session.lineWidgets = null;\n };\n LineWidgets.prototype.$registerLineWidget = function (w) {\n if (!this.session.lineWidgets)\n this.session.lineWidgets = new Array(this.session.getLength());\n var old = this.session.lineWidgets[w.row];\n if (old) {\n w.$oldWidget = old;\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n this.session.lineWidgets[w.row] = w;\n return w;\n };\n LineWidgets.prototype.addLineWidget = function (w) {\n this.$registerLineWidget(w);\n w.session = this.session;\n if (!this.editor)\n return w;\n var renderer = this.editor.renderer;\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n if (w.text && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.textContent = w.text;\n }\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n if (w.className) {\n dom.addCssClass(w.el, w.className);\n }\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = 5;\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n if (!w.coverGutter) {\n w.el.style.zIndex = 3;\n }\n if (w.pixelHeight == null) {\n w.pixelHeight = w.el.offsetHeight;\n }\n }\n if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n }\n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n lineWidgets[fold.start.row] = w;\n else\n w.hidden = true;\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n LineWidgets.prototype.removeLineWidget = function (w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode)\n w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy)\n try {\n w.editor.destroy();\n }\n catch (e) { }\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row];\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget)\n this.onWidgetChanged(w.$oldWidget);\n }\n else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n w1 = w1.$oldWidget;\n }\n }\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n };\n LineWidgets.prototype.getWidgetsAtRow = function (row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n return list;\n };\n LineWidgets.prototype.onWidgetChanged = function (w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n LineWidgets.prototype.measureWidgets = function (e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n if (!changedWidgets || !changedWidgets.length)\n return;\n var min = Infinity;\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.session != this.session)\n continue;\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w)\n continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n w.h = w.el.offsetHeight;\n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n var rowCount = w.h / config.lineHeight;\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0)\n rowCount = 0;\n }\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min)\n min = w.row;\n }\n }\n if (min != Infinity) {\n this.session._emit(\"changeFold\", { data: { start: { row: min } } });\n this.session.lineWidgetWidth = null;\n }\n this.session._changedWidgets = [];\n };\n LineWidgets.prototype.renderWidgets = function (e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n while (first > 0 && !lineWidgets[first])\n first--;\n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n renderer.$cursorLayer.config = config;\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n var top = renderer.$cursorLayer.getPixelPosition({ row: i, column: 0 }, true).top;\n if (!w.coverLine)\n top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth)\n left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n }\n else {\n w.el.style.right = \"\";\n }\n }\n };\n return LineWidgets;\n}());\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/keyboard/gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/mouse/default_gutter_handler\"], function(require, exports, module){\"use strict\";\nvar keys = require('../lib/keys');\nvar GutterTooltip = require(\"../mouse/default_gutter_handler\").GutterTooltip;\nvar GutterKeyboardHandler = /** @class */ (function () {\n function GutterKeyboardHandler(editor) {\n this.editor = editor;\n this.gutterLayer = editor.renderer.$gutterLayer;\n this.element = editor.renderer.$gutter;\n this.lines = editor.renderer.$gutterLayer.$lines;\n this.activeRowIndex = null;\n this.activeLane = null;\n this.annotationTooltip = new GutterTooltip(this.editor);\n }\n GutterKeyboardHandler.prototype.addListener = function () {\n this.element.addEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n this.element.addEventListener(\"focusout\", this.$blurGutter.bind(this));\n this.editor.on(\"mousewheel\", this.$blurGutter.bind(this));\n };\n GutterKeyboardHandler.prototype.removeListener = function () {\n this.element.removeEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n this.element.removeEventListener(\"focusout\", this.$blurGutter.bind(this));\n this.editor.off(\"mousewheel\", this.$blurGutter.bind(this));\n };\n GutterKeyboardHandler.prototype.$onGutterKeyDown = function (e) {\n if (this.annotationTooltip.isOpen) {\n e.preventDefault();\n if (e.keyCode === keys[\"escape\"])\n this.annotationTooltip.hideTooltip();\n return;\n }\n if (e.target === this.element) {\n if (e.keyCode != keys[\"enter\"]) {\n return;\n }\n e.preventDefault();\n var row = this.editor.getCursorPosition().row;\n if (!this.editor.isRowVisible(row))\n this.editor.scrollToLine(row, true, true);\n setTimeout(function () {\n var index = this.$rowToRowIndex(this.gutterLayer.$cursorCell.row);\n var nearestFoldIndex = this.$findNearestFoldWidget(index);\n var nearestAnnotationIndex = this.$findNearestAnnotation(index);\n if (nearestFoldIndex === null && nearestAnnotationIndex === null)\n return;\n if (nearestFoldIndex === null && nearestAnnotationIndex !== null) {\n this.activeRowIndex = nearestAnnotationIndex;\n this.activeLane = \"annotation\";\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n if (nearestFoldIndex !== null && nearestAnnotationIndex === null) {\n this.activeRowIndex = nearestFoldIndex;\n this.activeLane = \"fold\";\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n if (Math.abs(nearestAnnotationIndex - index) < Math.abs(nearestFoldIndex - index)) {\n this.activeRowIndex = nearestAnnotationIndex;\n this.activeLane = \"annotation\";\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n else {\n this.activeRowIndex = nearestFoldIndex;\n this.activeLane = \"fold\";\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n }.bind(this), 10);\n return;\n }\n this.$handleGutterKeyboardInteraction(e);\n setTimeout(function () {\n this.editor._signal(\"gutterkeydown\", new GutterKeyboardEvent(e, this));\n }.bind(this), 10);\n };\n GutterKeyboardHandler.prototype.$handleGutterKeyboardInteraction = function (e) {\n if (e.keyCode === keys[\"tab\"]) {\n e.preventDefault();\n return;\n }\n if (e.keyCode === keys[\"escape\"]) {\n e.preventDefault();\n this.$blurGutter();\n this.element.focus();\n this.lane = null;\n return;\n }\n if (e.keyCode === keys[\"up\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetUp();\n break;\n case \"annotation\":\n this.$moveAnnotationUp();\n break;\n }\n return;\n }\n if (e.keyCode === keys[\"down\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetDown();\n break;\n case \"annotation\":\n this.$moveAnnotationDown();\n break;\n }\n return;\n }\n if (e.keyCode === keys[\"left\"]) {\n e.preventDefault();\n this.$switchLane(\"annotation\");\n return;\n }\n if (e.keyCode === keys[\"right\"]) {\n e.preventDefault();\n this.$switchLane(\"fold\");\n return;\n }\n if (e.keyCode === keys[\"enter\"] || e.keyCode === keys[\"space\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'start') {\n var rowFoldingWidget = this.$rowIndexToRow(this.activeRowIndex);\n this.editor.session.onFoldWidgetClick(this.$rowIndexToRow(this.activeRowIndex), e);\n setTimeout(function () {\n if (this.$rowIndexToRow(this.activeRowIndex) !== rowFoldingWidget) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = this.$rowToRowIndex(rowFoldingWidget);\n this.$focusFoldWidget(this.activeRowIndex);\n }\n }.bind(this), 10);\n break;\n }\n else if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'end') {\n break;\n }\n return;\n case \"annotation\":\n var gutterElement = this.lines.cells[this.activeRowIndex].element.childNodes[2];\n var rect = gutterElement.getBoundingClientRect();\n var style = this.annotationTooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n this.annotationTooltip.showTooltip(this.$rowIndexToRow(this.activeRowIndex));\n break;\n }\n return;\n }\n };\n GutterKeyboardHandler.prototype.$blurGutter = function () {\n if (this.activeRowIndex !== null) {\n switch (this.activeLane) {\n case \"fold\":\n this.$blurFoldWidget(this.activeRowIndex);\n break;\n case \"annotation\":\n this.$blurAnnotation(this.activeRowIndex);\n break;\n }\n }\n if (this.annotationTooltip.isOpen)\n this.annotationTooltip.hideTooltip();\n return;\n };\n GutterKeyboardHandler.prototype.$isFoldWidgetVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = this.$getFoldWidget(index).style.display !== \"none\";\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$isAnnotationVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = this.$getAnnotation(index).style.display !== \"none\";\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$getFoldWidget = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[1];\n };\n GutterKeyboardHandler.prototype.$getAnnotation = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[2];\n };\n GutterKeyboardHandler.prototype.$findNearestFoldWidget = function (index) {\n if (this.$isFoldWidgetVisible(index))\n return index;\n var i = 0;\n while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n i++;\n if (index - i >= 0 && this.$isFoldWidgetVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isFoldWidgetVisible(index + i))\n return index + i;\n }\n return null;\n };\n GutterKeyboardHandler.prototype.$findNearestAnnotation = function (index) {\n if (this.$isAnnotationVisible(index))\n return index;\n var i = 0;\n while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n i++;\n if (index - i >= 0 && this.$isAnnotationVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isAnnotationVisible(index + i))\n return index + i;\n }\n return null;\n };\n GutterKeyboardHandler.prototype.$focusFoldWidget = function (index) {\n if (index == null)\n return;\n var foldWidget = this.$getFoldWidget(index);\n foldWidget.classList.add(this.editor.renderer.keyboardFocusClassName);\n foldWidget.focus();\n };\n GutterKeyboardHandler.prototype.$focusAnnotation = function (index) {\n if (index == null)\n return;\n var annotation = this.$getAnnotation(index);\n annotation.classList.add(this.editor.renderer.keyboardFocusClassName);\n annotation.focus();\n };\n GutterKeyboardHandler.prototype.$blurFoldWidget = function (index) {\n var foldWidget = this.$getFoldWidget(index);\n foldWidget.classList.remove(this.editor.renderer.keyboardFocusClassName);\n foldWidget.blur();\n };\n GutterKeyboardHandler.prototype.$blurAnnotation = function (index) {\n var annotation = this.$getAnnotation(index);\n annotation.classList.remove(this.editor.renderer.keyboardFocusClassName);\n annotation.blur();\n };\n GutterKeyboardHandler.prototype.$moveFoldWidgetUp = function () {\n var index = this.activeRowIndex;\n while (index > 0) {\n index--;\n if (this.$isFoldWidgetVisible(index)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveFoldWidgetDown = function () {\n var index = this.activeRowIndex;\n while (index < this.lines.getLength() - 1) {\n index++;\n if (this.$isFoldWidgetVisible(index)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveAnnotationUp = function () {\n var index = this.activeRowIndex;\n while (index > 0) {\n index--;\n if (this.$isAnnotationVisible(index)) {\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveAnnotationDown = function () {\n var index = this.activeRowIndex;\n while (index < this.lines.getLength() - 1) {\n index++;\n if (this.$isAnnotationVisible(index)) {\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$switchLane = function (desinationLane) {\n switch (desinationLane) {\n case \"annotation\":\n if (this.activeLane === \"annotation\") {\n break;\n }\n var annotationIndex = this.$findNearestAnnotation(this.activeRowIndex);\n if (annotationIndex == null) {\n break;\n }\n this.activeLane = \"annotation\";\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = annotationIndex;\n this.$focusAnnotation(this.activeRowIndex);\n break;\n case \"fold\":\n if (this.activeLane === \"fold\") {\n break;\n }\n var foldWidgetIndex = this.$findNearestFoldWidget(this.activeRowIndex);\n if (foldWidgetIndex == null) {\n break;\n }\n this.activeLane = \"fold\";\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = foldWidgetIndex;\n this.$focusFoldWidget(this.activeRowIndex);\n break;\n }\n return;\n };\n GutterKeyboardHandler.prototype.$rowIndexToRow = function (index) {\n var cell = this.lines.get(index);\n if (cell)\n return cell.row;\n return null;\n };\n GutterKeyboardHandler.prototype.$rowToRowIndex = function (row) {\n for (var i = 0; i < this.lines.getLength(); i++) {\n var cell = this.lines.get(i);\n if (cell.row == row)\n return i;\n }\n return null;\n };\n return GutterKeyboardHandler;\n}());\nexports.GutterKeyboardHandler = GutterKeyboardHandler;\nvar GutterKeyboardEvent = /** @class */ (function () {\n function GutterKeyboardEvent(domEvent, gutterKeyboardHandler) {\n this.gutterKeyboardHandler = gutterKeyboardHandler;\n this.domEvent = domEvent;\n }\n GutterKeyboardEvent.prototype.getKey = function () {\n return keys.keyCodeToString(this.domEvent.keyCode);\n };\n GutterKeyboardEvent.prototype.getRow = function () {\n return this.gutterKeyboardHandler.$rowIndexToRow(this.gutterKeyboardHandler.activeRowIndex);\n };\n GutterKeyboardEvent.prototype.isInAnnotationLane = function () {\n return this.gutterKeyboardHandler.activeLane === \"annotation\";\n };\n GutterKeyboardEvent.prototype.isInFoldLane = function () {\n return this.gutterKeyboardHandler.activeLane === \"fold\";\n };\n return GutterKeyboardEvent;\n}());\nexports.GutterKeyboardEvent = GutterKeyboardEvent;\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/line_widgets\",\"ace/keyboard/gutter_handler\",\"ace/config\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\nvar LineWidgets = require(\"./line_widgets\").LineWidgets;\nvar GutterKeyboardHandler = require(\"./keyboard/gutter_handler\").GutterKeyboardHandler;\nvar nls = require(\"./config\").nls;\nvar clipboard = require(\"./clipboard\");\nvar keys = require('./lib/keys');\nvar Editor = /** @class */ (function () {\n function Editor(renderer, session, options) {\n this.$toDestroy = [];\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.id = \"editor\" + (++Editor.$uid);\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n if (typeof document == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n this.keyBinding = new KeyBinding(this);\n this.$search = new Search().set({\n wrap: true\n });\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n this.$initOperationListeners();\n this._$emitInputEvent = lang.delayedCall(function () {\n this._signal(\"input\", {});\n if (this.session && !this.session.destroyed)\n this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n this.on(\"change\", function (_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n this.setSession(session || options && options.session || new EditSession(\"\"));\n config.resetOptions(this);\n if (options)\n this.setOptions(options);\n config._signal(\"editor\", this);\n }\n Editor.prototype.$initOperationListeners = function () {\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n this.on(\"change\", function () {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n this.curOp.docChanged = true;\n }.bind(this), true);\n this.on(\"changeSelection\", function () {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n this.curOp.selectionChanged = true;\n }.bind(this), true);\n };\n Editor.prototype.startOperation = function (commandEvent) {\n if (this.curOp) {\n if (!commandEvent || this.curOp.command)\n return;\n this.prevOp = this.curOp;\n }\n if (!commandEvent) {\n this.previousCommand = null;\n commandEvent = {};\n }\n this.$opResetTimer.schedule();\n this.curOp = this.session.curOp = {\n command: commandEvent.command || {},\n args: commandEvent.args,\n scrollTop: this.renderer.scrollTop\n };\n this.curOp.selectionBefore = this.selection.toJSON();\n };\n Editor.prototype.endOperation = function (e) {\n if (this.curOp && this.session) {\n if (e && e.returnValue === false || !this.session)\n return (this.curOp = null);\n if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\")\n return;\n this._signal(\"beforeEndOperation\");\n if (!this.curOp)\n return;\n var command = this.curOp.command;\n var scrollIntoView = command && command.scrollIntoView;\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n break;\n default:\n break;\n }\n if (scrollIntoView == \"animate\")\n this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n var sel = this.selection.toJSON();\n this.curOp.selectionAfter = sel;\n this.$lastSel = this.selection.toJSON();\n this.session.getUndoManager().addSelection(sel);\n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n Editor.prototype.$historyTracker = function (e) {\n if (!this.$mergeUndoDeltas)\n return;\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && (e.command.name == prev.command.name);\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined)\n this.mergeNextCommand = true;\n shouldMerge = shouldMerge\n && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n this.mergeNextCommand = true;\n }\n else {\n shouldMerge = shouldMerge\n && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n if (this.$mergeUndoDeltas != \"always\"\n && Date.now() - this.sequenceStartTime > 2000) {\n shouldMerge = false; // the sequence is too long\n }\n if (shouldMerge)\n this.session.mergeUndoDeltas = true;\n else if (mergeableCommands.indexOf(e.command.name) !== -1)\n this.sequenceStartTime = Date.now();\n };\n Editor.prototype.setKeyboardHandler = function (keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n this.$keybindingId = keyboardHandler;\n var _self = this;\n config.loadModule([\"keybinding\", keyboardHandler], function (module) {\n if (_self.$keybindingId == keyboardHandler)\n _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n }\n else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n Editor.prototype.getKeyboardHandler = function () {\n return this.keyBinding.getKeyboardHandler();\n };\n Editor.prototype.setSession = function (session) {\n if (this.session == session)\n return;\n if (this.curOp)\n this.endOperation();\n this.curOp = {};\n var oldSession = this.session;\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n this.session = session;\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.onChangeMode();\n this.onCursorChange();\n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n }\n else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n this.curOp = null;\n oldSession && oldSession._signal(\"changeEditor\", { oldEditor: this });\n session && session._signal(\"changeEditor\", { editor: this });\n if (session && !session.destroyed)\n session.bgTokenizer.scheduleStart();\n };\n Editor.prototype.getSession = function () {\n return this.session;\n };\n Editor.prototype.setValue = function (val, cursorPos) {\n this.session.doc.setValue(val);\n if (!cursorPos)\n this.selectAll();\n else if (cursorPos == 1)\n this.navigateFileEnd();\n else if (cursorPos == -1)\n this.navigateFileStart();\n return val;\n };\n Editor.prototype.getValue = function () {\n return this.session.getValue();\n };\n Editor.prototype.getSelection = function () {\n return this.selection;\n };\n Editor.prototype.resize = function (force) {\n this.renderer.onResize(force);\n };\n Editor.prototype.setTheme = function (theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n Editor.prototype.getTheme = function () {\n return this.renderer.getTheme();\n };\n Editor.prototype.setStyle = function (style) {\n this.renderer.setStyle(style);\n };\n Editor.prototype.unsetStyle = function (style) {\n this.renderer.unsetStyle(style);\n };\n Editor.prototype.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container).fontSize;\n };\n Editor.prototype.setFontSize = function (size) {\n this.setOption(\"fontSize\", size);\n };\n Editor.prototype.$highlightBrackets = function () {\n if (this.$highlightPending) {\n return;\n }\n var self = this;\n this.$highlightPending = true;\n setTimeout(function () {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || session.destroyed)\n return;\n if (session.$bracketHighlight) {\n session.$bracketHighlight.markerIds.forEach(function (id) {\n session.removeMarker(id);\n });\n session.$bracketHighlight = null;\n }\n var pos = self.getCursorPosition();\n var handler = self.getKeyboardHandler();\n var isBackwards = handler && handler.$getDirectionForHighlight && handler.$getDirectionForHighlight(self);\n var ranges = session.getMatchingBracketRanges(pos, isBackwards);\n if (!ranges) {\n var iterator = new TokenIterator(session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n if (token && /\\b(?:tag-open|tag-name)/.test(token.type)) {\n var tagNamesRanges = session.getMatchingTags(pos);\n if (tagNamesRanges)\n ranges = [tagNamesRanges.openTagName, tagNamesRanges.closeTagName];\n }\n }\n if (!ranges && session.$mode.getMatching)\n ranges = session.$mode.getMatching(self.session);\n if (!ranges) {\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n return;\n }\n var markerType = \"ace_bracket\";\n if (!Array.isArray(ranges)) {\n ranges = [ranges];\n }\n else if (ranges.length == 1) {\n markerType = \"ace_error_bracket\";\n }\n if (ranges.length == 2) {\n if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0)\n ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)];\n else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0)\n ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)];\n }\n session.$bracketHighlight = {\n ranges: ranges,\n markerIds: ranges.map(function (range) {\n return session.addMarker(range, markerType, \"text\");\n })\n };\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n }, 50);\n };\n Editor.prototype.focus = function () {\n this.textInput.focus();\n };\n Editor.prototype.isFocused = function () {\n return this.textInput.isFocused();\n };\n Editor.prototype.blur = function () {\n this.textInput.blur();\n };\n Editor.prototype.onFocus = function (e) {\n if (this.$isFocused)\n return;\n this.$isFocused = true;\n this.renderer.showCursor();\n this.renderer.visualizeFocus();\n this._emit(\"focus\", e);\n };\n Editor.prototype.onBlur = function (e) {\n if (!this.$isFocused)\n return;\n this.$isFocused = false;\n this.renderer.hideCursor();\n this.renderer.visualizeBlur();\n this._emit(\"blur\", e);\n };\n Editor.prototype.$cursorChange = function () {\n this.renderer.updateCursor();\n this.$highlightBrackets();\n this.$updateHighlightActiveLine();\n };\n Editor.prototype.onDocumentChange = function (delta) {\n var wrap = this.session.$useWrapMode;\n var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n this.renderer.updateLines(delta.start.row, lastRow, wrap);\n this._signal(\"change\", delta);\n this.$cursorChange();\n };\n Editor.prototype.onTokenizerUpdate = function (e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n Editor.prototype.onScrollTopChange = function () {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n Editor.prototype.onScrollLeftChange = function () {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n Editor.prototype.onCursorChange = function () {\n this.$cursorChange();\n this._signal(\"changeSelection\");\n };\n Editor.prototype.$updateHighlightActiveLine = function () {\n var session = this.getSession();\n var highlight;\n if (this.$highlightActiveLine) {\n if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine())\n highlight = this.getCursorPosition();\n if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty())\n highlight = false;\n if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n highlight = false;\n }\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n }\n else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n }\n else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n session._signal(\"changeBackMarker\");\n }\n };\n Editor.prototype.onSelectionChange = function (e) {\n var session = this.session;\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n }\n else {\n this.$updateHighlightActiveLine();\n }\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n this._signal(\"changeSelection\");\n };\n Editor.prototype.$getSelectionHighLightRegexp = function () {\n var session = this.session;\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine())\n return;\n var startColumn = selection.start.column;\n var endColumn = selection.end.column;\n var line = session.getLine(selection.start.row);\n var needle = line.substring(startColumn, endColumn);\n if (needle.length > 5000 || !/[\\w\\d]/.test(needle))\n return;\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n if (!re.test(wordWithBoundary))\n return;\n return re;\n };\n Editor.prototype.onChangeFrontMarker = function () {\n this.renderer.updateFrontMarkers();\n };\n Editor.prototype.onChangeBackMarker = function () {\n this.renderer.updateBackMarkers();\n };\n Editor.prototype.onChangeBreakpoint = function () {\n this.renderer.updateBreakpoints();\n };\n Editor.prototype.onChangeAnnotation = function () {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n Editor.prototype.onChangeMode = function (e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n Editor.prototype.onChangeWrapLimit = function () {\n this.renderer.updateFull();\n };\n Editor.prototype.onChangeWrapMode = function () {\n this.renderer.onResize(true);\n };\n Editor.prototype.onChangeFold = function () {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n Editor.prototype.getSelectedText = function () {\n return this.session.getTextRange(this.getSelectionRange());\n };\n Editor.prototype.getCopyText = function () {\n var text = this.getSelectedText();\n var nl = this.session.doc.getNewLineCharacter();\n var copyLine = false;\n if (!text && this.$copyWithEmptySelection) {\n copyLine = true;\n var ranges = this.selection.getAllRanges();\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (i && ranges[i - 1].start.row == range.start.row)\n continue;\n text += this.session.getLine(range.start.row) + nl;\n }\n }\n var e = { text: text };\n this._signal(\"copy\", e);\n clipboard.lineMode = copyLine ? e.text : false;\n return e.text;\n };\n Editor.prototype.onCopy = function () {\n this.commands.exec(\"copy\", this);\n };\n Editor.prototype.onCut = function () {\n this.commands.exec(\"cut\", this);\n };\n Editor.prototype.onPaste = function (text, event) {\n var e = { text: text, event: event };\n this.commands.exec(\"paste\", this, e);\n };\n Editor.prototype.$handlePaste = function (e) {\n if (typeof e == \"string\")\n e = { text: e };\n this._signal(\"paste\", e);\n var text = e.text;\n var lineMode = text === clipboard.lineMode;\n var session = this.session;\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n if (lineMode)\n session.insert({ row: this.selection.lead.row, column: 0 }, text);\n else\n this.insert(text);\n }\n else if (lineMode) {\n this.selection.rangeList.ranges.forEach(function (range) {\n session.insert({ row: range.start.row, column: 0 }, text);\n });\n }\n else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]);\n if (lines.length != ranges.length || isFullLine)\n return this.commands.exec(\"insertstring\", this, text);\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty())\n session.remove(range);\n session.insert(range.start, lines[i]);\n }\n }\n };\n Editor.prototype.execCommand = function (command, args) {\n return this.commands.exec(command, this, args);\n };\n Editor.prototype.insert = function (text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n if (transform) {\n if (text !== transform.text) {\n if (!this.inVirtualSelectionMode) {\n this.session.mergeUndoDeltas = false;\n this.mergeNextCommand = false;\n }\n }\n text = transform.text;\n }\n }\n if (text == \"\\t\")\n text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n }\n else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = new Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n this.clearSelection();\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n session.insert(cursor, text);\n if (transform && transform.selection) {\n if (transform.selection.length == 2) { // Transform relative to the current column\n this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1]));\n }\n else { // Transform relative to the current row.\n this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3]));\n }\n }\n if (this.$enableAutoIndent) {\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n session.insert({ row: cursor.row + 1, column: 0 }, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n }\n };\n Editor.prototype.autoIndent = function () {\n var session = this.session;\n var mode = session.getMode();\n var startRow, endRow;\n if (this.selection.isEmpty()) {\n startRow = 0;\n endRow = session.doc.getLength() - 1;\n }\n else {\n var selectedRange = this.getSelectionRange();\n startRow = selectedRange.start.row;\n endRow = selectedRange.end.row;\n }\n var prevLineState = \"\";\n var prevLine = \"\";\n var lineIndent = \"\";\n var line, currIndent, range;\n var tab = session.getTabString();\n for (var row = startRow; row <= endRow; row++) {\n if (row > 0) {\n prevLineState = session.getState(row - 1);\n prevLine = session.getLine(row - 1);\n lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab);\n }\n line = session.getLine(row);\n currIndent = mode.$getIndent(line);\n if (lineIndent !== currIndent) {\n if (currIndent.length > 0) {\n range = new Range(row, 0, row, currIndent.length);\n session.remove(range);\n }\n if (lineIndent.length > 0) {\n session.insert({ row: row, column: 0 }, lineIndent);\n }\n }\n mode.autoOutdent(prevLineState, session, row);\n }\n };\n Editor.prototype.onTextInput = function (text, composition) {\n if (!composition)\n return this.keyBinding.onTextInput(text);\n this.startOperation({ command: { name: \"insertstring\" } });\n var applyComposition = this.applyComposition.bind(this, text, composition);\n if (this.selection.rangeCount)\n this.forEachSelection(applyComposition);\n else\n applyComposition();\n this.endOperation();\n };\n Editor.prototype.applyComposition = function (text, composition) {\n if (composition.extendLeft || composition.extendRight) {\n var r = this.selection.getRange();\n r.start.column -= composition.extendLeft;\n r.end.column += composition.extendRight;\n if (r.start.column < 0) {\n r.start.row--;\n r.start.column += this.session.getLine(r.start.row).length + 1;\n }\n this.selection.setRange(r);\n if (!text && !r.isEmpty())\n this.remove();\n }\n if (text || !this.selection.isEmpty())\n this.insert(text, true);\n if (composition.restoreStart || composition.restoreEnd) {\n var r = this.selection.getRange();\n r.start.column -= composition.restoreStart;\n r.end.column -= composition.restoreEnd;\n this.selection.setRange(r);\n }\n };\n Editor.prototype.onCommandKey = function (e, hashId, keyCode) {\n return this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n Editor.prototype.setOverwrite = function (overwrite) {\n this.session.setOverwrite(overwrite);\n };\n Editor.prototype.getOverwrite = function () {\n return this.session.getOverwrite();\n };\n Editor.prototype.toggleOverwrite = function () {\n this.session.toggleOverwrite();\n };\n Editor.prototype.setScrollSpeed = function (speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n Editor.prototype.getScrollSpeed = function () {\n return this.getOption(\"scrollSpeed\");\n };\n Editor.prototype.setDragDelay = function (dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n Editor.prototype.getDragDelay = function () {\n return this.getOption(\"dragDelay\");\n };\n Editor.prototype.setSelectionStyle = function (val) {\n this.setOption(\"selectionStyle\", val);\n };\n Editor.prototype.getSelectionStyle = function () {\n return this.getOption(\"selectionStyle\");\n };\n Editor.prototype.setHighlightActiveLine = function (shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n Editor.prototype.getHighlightActiveLine = function () {\n return this.getOption(\"highlightActiveLine\");\n };\n Editor.prototype.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n Editor.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n Editor.prototype.setHighlightSelectedWord = function (shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n Editor.prototype.getHighlightSelectedWord = function () {\n return this.$highlightSelectedWord;\n };\n Editor.prototype.setAnimatedScroll = function (shouldAnimate) {\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n Editor.prototype.getAnimatedScroll = function () {\n return this.renderer.getAnimatedScroll();\n };\n Editor.prototype.setShowInvisibles = function (showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n Editor.prototype.getShowInvisibles = function () {\n return this.renderer.getShowInvisibles();\n };\n Editor.prototype.setDisplayIndentGuides = function (display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n Editor.prototype.getDisplayIndentGuides = function () {\n return this.renderer.getDisplayIndentGuides();\n };\n Editor.prototype.setHighlightIndentGuides = function (highlight) {\n this.renderer.setHighlightIndentGuides(highlight);\n };\n Editor.prototype.getHighlightIndentGuides = function () {\n return this.renderer.getHighlightIndentGuides();\n };\n Editor.prototype.setShowPrintMargin = function (showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n Editor.prototype.getShowPrintMargin = function () {\n return this.renderer.getShowPrintMargin();\n };\n Editor.prototype.setPrintMarginColumn = function (showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n Editor.prototype.getPrintMarginColumn = function () {\n return this.renderer.getPrintMarginColumn();\n };\n Editor.prototype.setReadOnly = function (readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n Editor.prototype.getReadOnly = function () {\n return this.getOption(\"readOnly\");\n };\n Editor.prototype.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n Editor.prototype.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n Editor.prototype.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n Editor.prototype.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n Editor.prototype.setShowFoldWidgets = function (show) {\n this.setOption(\"showFoldWidgets\", show);\n };\n Editor.prototype.getShowFoldWidgets = function () {\n return this.getOption(\"showFoldWidgets\");\n };\n Editor.prototype.setFadeFoldWidgets = function (fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n Editor.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n Editor.prototype.remove = function (dir) {\n if (this.selection.isEmpty()) {\n if (dir == \"left\")\n this.selection.selectLeft();\n else\n this.selection.selectRight();\n }\n var range = this.getSelectionRange();\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n if (new_range)\n range = new_range;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n Editor.prototype.removeWordRight = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeWordLeft = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeToLineStart = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineStart();\n if (this.selection.isEmpty())\n this.selection.selectLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeToLineEnd = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineEnd();\n var range = this.getSelectionRange();\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n Editor.prototype.splitLine = function () {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n Editor.prototype.setGhostText = function (text, position) {\n if (!this.session.widgetManager) {\n this.session.widgetManager = new LineWidgets(this.session);\n this.session.widgetManager.attach(this);\n }\n this.renderer.setGhostText(text, position);\n };\n Editor.prototype.removeGhostText = function () {\n if (!this.session.widgetManager)\n return;\n this.renderer.removeGhostText();\n };\n Editor.prototype.transposeLetters = function () {\n if (!this.selection.isEmpty()) {\n return;\n }\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0)\n return;\n var line = this.session.getLine(cursor.row);\n var swap, range;\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column - 1);\n range = new Range(cursor.row, column - 1, cursor.row, column + 1);\n }\n else {\n swap = line.charAt(column - 1) + line.charAt(column - 2);\n range = new Range(cursor.row, column - 2, cursor.row, column);\n }\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n Editor.prototype.toLowerCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n Editor.prototype.toUpperCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n Editor.prototype.indent = function () {\n var session = this.session;\n var range = this.getSelectionRange();\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n if (this.session.getUseSoftTabs()) {\n var count = (size - column % size);\n var indentString = lang.stringRepeat(\" \", count);\n }\n else {\n var count = column % size;\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n return this.insert(indentString);\n };\n Editor.prototype.blockIndent = function () {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n Editor.prototype.blockOutdent = function () {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n Editor.prototype.sortLines = function () {\n var rows = this.$getSelectedRows();\n var session = this.session;\n var lines = [];\n for (var i = rows.first; i <= rows.last; i++)\n lines.push(session.getLine(i));\n lines.sort(function (a, b) {\n if (a.toLowerCase() < b.toLowerCase())\n return -1;\n if (a.toLowerCase() > b.toLowerCase())\n return 1;\n return 0;\n });\n var deleteRange = new Range(0, 0, 0, 0);\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i - rows.first]);\n }\n };\n Editor.prototype.toggleCommentLines = function () {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n Editor.prototype.toggleBlockComment = function () {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n Editor.prototype.getNumberAt = function (row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n var s = this.session.getLine(row);\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n if (m.index <= column && m.index + m[0].length >= column) {\n var number = {\n value: m[0],\n start: m.index,\n end: m.index + m[0].length\n };\n return number;\n }\n }\n return null;\n };\n Editor.prototype.modifyNumber = function (amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column - 1, row, column);\n var c = this.session.getTextRange(charRange);\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n if (fp !== nr.end && column < fp) {\n amount *= Math.pow(10, nr.end - column - 1);\n }\n else {\n amount *= Math.pow(10, nr.end - column);\n }\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length));\n }\n }\n else {\n this.toggleWord();\n }\n };\n Editor.prototype.toggleWord = function () {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n this.selection.selectWord();\n var currentState = this.getSelectedText();\n var currWordStart = this.selection.getWordRange().start.column;\n var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n var delta = column - currWordStart - 1;\n if (delta < 0)\n delta = 0;\n var curLength = 0, itLength = 0;\n var that = this;\n if (currentState.match(/[A-Za-z0-9_]+/)) {\n wordParts.forEach(function (item, i) {\n itLength = curLength + item.length;\n if (delta >= curLength && delta <= itLength) {\n currentState = item;\n that.selection.clearSelection();\n that.moveCursorTo(row, curLength + currWordStart);\n that.selection.selectTo(row, itLength + currWordStart);\n }\n curLength = itLength;\n });\n }\n var wordPairs = this.$toggleWordPairs;\n var reg;\n for (var i = 0; i < wordPairs.length; i++) {\n var item = wordPairs[i];\n for (var j = 0; j <= 1; j++) {\n var negate = +!j;\n var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n if (firstCondition) {\n var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n if (secondCondition) {\n reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n var res = item[negate];\n if (result.toUpperCase() == result) {\n res = res.toUpperCase();\n }\n else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n }\n return res;\n });\n this.insert(reg);\n reg = \"\";\n }\n }\n }\n }\n };\n Editor.prototype.findLinkAt = function (row, column) {\n var e_1, _a;\n var line = this.session.getLine(row);\n var wordParts = line.split(/((?:https?|ftp):\\/\\/[\\S]+)/);\n var columnPosition = column;\n if (columnPosition < 0)\n columnPosition = 0;\n var previousPosition = 0, currentPosition = 0, match;\n try {\n for (var wordParts_1 = __values(wordParts), wordParts_1_1 = wordParts_1.next(); !wordParts_1_1.done; wordParts_1_1 = wordParts_1.next()) {\n var item = wordParts_1_1.value;\n currentPosition = previousPosition + item.length;\n if (columnPosition >= previousPosition && columnPosition <= currentPosition) {\n if (item.match(/((?:https?|ftp):\\/\\/[\\S]+)/)) {\n match = item.replace(/[\\s:.,'\";}\\]]+$/, \"\");\n break;\n }\n }\n previousPosition = currentPosition;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (wordParts_1_1 && !wordParts_1_1.done && (_a = wordParts_1.return)) _a.call(wordParts_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return match;\n };\n Editor.prototype.openLink = function () {\n var cursor = this.selection.getCursor();\n var url = this.findLinkAt(cursor.row, cursor.column);\n if (url)\n window.open(url, '_blank');\n return url != null;\n };\n Editor.prototype.removeLines = function () {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n Editor.prototype.duplicateSelection = function () {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n }\n else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range), false);\n range.start = point;\n range.end = endPoint;\n sel.setSelectionRange(range, reverse);\n }\n };\n Editor.prototype.moveLinesDown = function () {\n this.$moveLines(1, false);\n };\n Editor.prototype.moveLinesUp = function () {\n this.$moveLines(-1, false);\n };\n Editor.prototype.moveText = function (range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n Editor.prototype.copyLinesUp = function () {\n this.$moveLines(-1, true);\n };\n Editor.prototype.copyLinesDown = function () {\n this.$moveLines(1, true);\n };\n Editor.prototype.$moveLines = function (dir, copy) {\n var rows, moved;\n var selection = this.selection;\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1)\n moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n }\n else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n while (++i < l) {\n if (totalDiff)\n ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last)\n break;\n else if (!copy && subRows.first > last + 1)\n break;\n last = subRows.last;\n }\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1)\n rangeIndex = i + 1;\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n if (!copy)\n diff = 0;\n totalDiff += diff;\n }\n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n Editor.prototype.$getSelectedRows = function (range) {\n range = (range || this.getSelectionRange()).collapseRows();\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n Editor.prototype.onCompositionStart = function (compositionState) {\n this.renderer.showComposition(compositionState);\n };\n Editor.prototype.onCompositionUpdate = function (text) {\n this.renderer.setCompositionText(text);\n };\n Editor.prototype.onCompositionEnd = function () {\n this.renderer.hideComposition();\n };\n Editor.prototype.getFirstVisibleRow = function () {\n return this.renderer.getFirstVisibleRow();\n };\n Editor.prototype.getLastVisibleRow = function () {\n return this.renderer.getLastVisibleRow();\n };\n Editor.prototype.isRowVisible = function (row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n Editor.prototype.isRowFullyVisible = function (row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n Editor.prototype.$getVisibleRowCount = function () {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n Editor.prototype.$moveByPage = function (dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n if (select === true) {\n this.selection.$moveSelection(function () {\n this.moveCursorBy(rows, 0);\n });\n }\n else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n var scrollTop = renderer.scrollTop;\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null)\n renderer.scrollCursorIntoView(null, 0.5);\n renderer.animateScrolling(scrollTop);\n };\n Editor.prototype.selectPageDown = function () {\n this.$moveByPage(1, true);\n };\n Editor.prototype.selectPageUp = function () {\n this.$moveByPage(-1, true);\n };\n Editor.prototype.gotoPageDown = function () {\n this.$moveByPage(1, false);\n };\n Editor.prototype.gotoPageUp = function () {\n this.$moveByPage(-1, false);\n };\n Editor.prototype.scrollPageDown = function () {\n this.$moveByPage(1);\n };\n Editor.prototype.scrollPageUp = function () {\n this.$moveByPage(-1);\n };\n Editor.prototype.scrollToRow = function (row) {\n this.renderer.scrollToRow(row);\n };\n Editor.prototype.scrollToLine = function (line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n Editor.prototype.centerSelection = function () {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n Editor.prototype.getCursorPosition = function () {\n return this.selection.getCursor();\n };\n Editor.prototype.getCursorPositionScreen = function () {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n Editor.prototype.getSelectionRange = function () {\n return this.selection.getRange();\n };\n Editor.prototype.selectAll = function () {\n this.selection.selectAll();\n };\n Editor.prototype.clearSelection = function () {\n this.selection.clearSelection();\n };\n Editor.prototype.moveCursorTo = function (row, column) {\n this.selection.moveCursorTo(row, column);\n };\n Editor.prototype.moveCursorToPosition = function (pos) {\n this.selection.moveCursorToPosition(pos);\n };\n Editor.prototype.jumpToMatching = function (select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var tokenCount = 0;\n if (prevToken && prevToken.type.indexOf('tag-name') !== -1) {\n prevToken = iterator.stepBackward();\n }\n var token = prevToken || iterator.stepForward();\n if (!token)\n return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n if (prevToken.value === '<' && tokenCount > 1) {\n depth[token.value]++;\n }\n else if (prevToken.value === '') {\n depth[token.value]--;\n }\n if (depth[token.value] === -1) {\n matchType = 'tag';\n found = true;\n }\n }\n if (!found) {\n prevToken = token;\n tokenCount++;\n token = iterator.stepForward();\n i = 0;\n }\n } while (token && !found);\n if (!matchType)\n return;\n var range, pos;\n if (matchType === 'bracket') {\n range = this.session.getBracketRange(cursor);\n if (!range) {\n range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1);\n pos = range.start;\n if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column)\n < 2)\n range = this.session.getBracketRange(pos);\n }\n }\n else if (matchType === 'tag') {\n if (!token || token.type.indexOf('tag-name') === -1)\n return;\n range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2);\n if (range.compare(cursor.row, cursor.column) === 0) {\n var tagsRanges = this.session.getMatchingTags(cursor);\n if (tagsRanges) {\n if (tagsRanges.openTag.contains(cursor.row, cursor.column)) {\n range = tagsRanges.closeTag;\n pos = range.start;\n }\n else {\n range = tagsRanges.openTag;\n if (tagsRanges.closeTag.start.row === cursor.row && tagsRanges.closeTag.start.column\n === cursor.column)\n pos = range.end;\n else\n pos = range.start;\n }\n }\n }\n pos = pos || range.start;\n }\n pos = range && range.cursor || pos;\n if (pos) {\n if (select) {\n if (range && expand) {\n this.selection.setRange(range);\n }\n else if (range && range.isEqual(this.getSelectionRange())) {\n this.clearSelection();\n }\n else {\n this.selection.selectTo(pos.row, pos.column);\n }\n }\n else {\n this.selection.moveTo(pos.row, pos.column);\n }\n }\n };\n Editor.prototype.gotoLine = function (lineNumber, column, animate) {\n this.selection.clearSelection();\n this.session.unfold({ row: lineNumber - 1, column: column || 0 });\n this.exitMultiSelectMode && this.exitMultiSelectMode();\n this.moveCursorTo(lineNumber - 1, column || 0);\n if (!this.isRowFullyVisible(lineNumber - 1))\n this.scrollToLine(lineNumber - 1, true, animate);\n };\n Editor.prototype.navigateTo = function (row, column) {\n this.selection.moveTo(row, column);\n };\n Editor.prototype.navigateUp = function (times) {\n if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n var selectionStart = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionStart);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(-times || -1, 0);\n };\n Editor.prototype.navigateDown = function (times) {\n if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n var selectionEnd = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionEnd);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(times || 1, 0);\n };\n Editor.prototype.navigateLeft = function (times) {\n if (!this.selection.isEmpty()) {\n var selectionStart = this.getSelectionRange().start;\n this.moveCursorToPosition(selectionStart);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorLeft();\n }\n }\n this.clearSelection();\n };\n Editor.prototype.navigateRight = function (times) {\n if (!this.selection.isEmpty()) {\n var selectionEnd = this.getSelectionRange().end;\n this.moveCursorToPosition(selectionEnd);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorRight();\n }\n }\n this.clearSelection();\n };\n Editor.prototype.navigateLineStart = function () {\n this.selection.moveCursorLineStart();\n this.clearSelection();\n };\n Editor.prototype.navigateLineEnd = function () {\n this.selection.moveCursorLineEnd();\n this.clearSelection();\n };\n Editor.prototype.navigateFileEnd = function () {\n this.selection.moveCursorFileEnd();\n this.clearSelection();\n };\n Editor.prototype.navigateFileStart = function () {\n this.selection.moveCursorFileStart();\n this.clearSelection();\n };\n Editor.prototype.navigateWordRight = function () {\n this.selection.moveCursorWordRight();\n this.clearSelection();\n };\n Editor.prototype.navigateWordLeft = function () {\n this.selection.moveCursorWordLeft();\n this.clearSelection();\n };\n Editor.prototype.replace = function (replacement, options) {\n if (options)\n this.$search.set(options);\n var range = this.$search.find(this.session);\n var replaced = 0;\n if (!range)\n return replaced;\n if (this.$tryReplace(range, replacement)) {\n replaced = 1;\n }\n this.selection.setSelectionRange(range);\n this.renderer.scrollSelectionIntoView(range.start, range.end);\n return replaced;\n };\n Editor.prototype.replaceAll = function (replacement, options) {\n if (options) {\n this.$search.set(options);\n }\n var ranges = this.$search.findAll(this.session);\n var replaced = 0;\n if (!ranges.length)\n return replaced;\n var selection = this.getSelectionRange();\n this.selection.moveTo(0, 0);\n for (var i = ranges.length - 1; i >= 0; --i) {\n if (this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n this.selection.setSelectionRange(selection);\n return replaced;\n };\n Editor.prototype.$tryReplace = function (range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n }\n else {\n return null;\n }\n };\n Editor.prototype.getLastSearchOptions = function () {\n return this.$search.getOptions();\n };\n Editor.prototype.find = function (needle, options, animate) {\n if (!options)\n options = {};\n if (typeof needle == \"string\" || needle instanceof RegExp)\n options.needle = needle;\n else if (typeof needle == \"object\")\n oop.mixin(options, needle);\n var range = this.selection.getRange();\n if (options.needle == null) {\n needle = this.session.getTextRange(range)\n || this.$search.$options.needle;\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n this.$search.set({ needle: needle });\n }\n this.$search.set(options);\n if (!options.start)\n this.$search.set({ start: range });\n var newRange = this.$search.find(this.session);\n if (options.preventScroll)\n return newRange;\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n if (options.backwards)\n range.start = range.end;\n else\n range.end = range.start;\n this.selection.setRange(range);\n };\n Editor.prototype.findNext = function (options, animate) {\n this.find({ skipCurrent: true, backwards: false }, options, animate);\n };\n Editor.prototype.findPrevious = function (options, animate) {\n this.find(options, { skipCurrent: true, backwards: true }, animate);\n };\n Editor.prototype.revealRange = function (range, animate) {\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false)\n this.renderer.animateScrolling(scrollTop);\n };\n Editor.prototype.undo = function () {\n this.session.getUndoManager().undo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n Editor.prototype.redo = function () {\n this.session.getUndoManager().redo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n Editor.prototype.destroy = function () {\n if (this.$toDestroy) {\n this.$toDestroy.forEach(function (el) {\n el.destroy();\n });\n this.$toDestroy = null;\n }\n if (this.$mouseHandler)\n this.$mouseHandler.destroy();\n this.renderer.destroy();\n this._signal(\"destroy\", this);\n if (this.session)\n this.session.destroy();\n if (this._$emitInputEvent)\n this._$emitInputEvent.cancel();\n this.removeAllListeners();\n };\n Editor.prototype.setAutoScrollEditorIntoView = function (enable) {\n if (!enable)\n return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor)\n this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function () {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function () {\n if (shouldScroll)\n rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function () {\n if (shouldScroll && rect && (self.isFocused()\n || self.searchBox && self.searchBox.isFocused())) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n }\n else if (pos.top < config.height &&\n pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n }\n else {\n shouldScroll = null;\n }\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n shouldScroll = rect = null;\n }\n });\n this.setAutoScrollEditorIntoView = function (enable) {\n if (enable)\n return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n Editor.prototype.$resetCursorStyle = function () {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer)\n return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n Editor.prototype.prompt = function (message, options, callback) {\n var editor = this;\n config.loadModule(\"ace/ext/prompt\", function (module) {\n module.prompt(editor, message, options, callback);\n });\n };\n return Editor;\n}());\nEditor.$uid = 0;\nEditor.prototype.curOp = null;\nEditor.prototype.prevOp = {};\nEditor.prototype.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\nEditor.prototype.$toggleWordPairs = [\n [\"first\", \"last\"],\n [\"true\", \"false\"],\n [\"yes\", \"no\"],\n [\"width\", \"height\"],\n [\"top\", \"bottom\"],\n [\"right\", \"left\"],\n [\"on\", \"off\"],\n [\"x\", \"y\"],\n [\"get\", \"set\"],\n [\"max\", \"min\"],\n [\"horizontal\", \"vertical\"],\n [\"show\", \"hide\"],\n [\"add\", \"remove\"],\n [\"up\", \"down\"],\n [\"before\", \"after\"],\n [\"even\", \"odd\"],\n [\"in\", \"out\"],\n [\"inside\", \"outside\"],\n [\"next\", \"previous\"],\n [\"increase\", \"decrease\"],\n [\"attach\", \"detach\"],\n [\"&&\", \"||\"],\n [\"==\", \"!=\"]\n];\noop.implement(Editor.prototype, EventEmitter);\nconfig.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function (style) {\n this.onSelectionChange();\n this._signal(\"changeSelectionStyle\", { data: style });\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function () { this.$updateHighlightActiveLine(); },\n initialValue: true\n },\n highlightSelectedWord: {\n set: function (shouldHighlight) { this.$onSelectionChange(); },\n initialValue: true\n },\n readOnly: {\n set: function (readOnly) {\n this.textInput.setReadOnly(readOnly);\n this.$resetCursorStyle();\n },\n initialValue: false\n },\n copyWithEmptySelection: {\n set: function (value) {\n this.textInput.setCopyWithEmptySelection(value);\n },\n initialValue: false\n },\n cursorStyle: {\n set: function (val) { this.$resetCursorStyle(); },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: { initialValue: true },\n wrapBehavioursEnabled: { initialValue: true },\n enableAutoIndent: { initialValue: true },\n autoScrollEditorIntoView: {\n set: function (val) { this.setAutoScrollEditorIntoView(val); }\n },\n keyboardHandler: {\n set: function (val) { this.setKeyboardHandler(val); },\n get: function () { return this.$keybindingId; },\n handlesSet: true\n },\n value: {\n set: function (val) { this.session.setValue(val); },\n get: function () { return this.getValue(); },\n handlesSet: true,\n hidden: true\n },\n session: {\n set: function (val) { this.setSession(val); },\n get: function () { return this.session; },\n handlesSet: true,\n hidden: true\n },\n showLineNumbers: {\n set: function (show) {\n this.renderer.$gutterLayer.setShowLineNumbers(show);\n this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n if (show && this.$relativeLineNumbers)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n },\n initialValue: true\n },\n relativeLineNumbers: {\n set: function (value) {\n if (this.$showLineNumbers && value)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n }\n },\n placeholder: {\n set: function (message) {\n if (!this.$updatePlaceholder) {\n this.$updatePlaceholder = function () {\n var hasValue = this.session && (this.renderer.$composition ||\n this.session.getLength() > 1 || this.session.getLine(0).length > 0);\n if (hasValue && this.renderer.placeholderNode) {\n this.renderer.off(\"afterRender\", this.$updatePlaceholder);\n dom.removeCssClass(this.container, \"ace_hasPlaceholder\");\n this.renderer.placeholderNode.remove();\n this.renderer.placeholderNode = null;\n }\n else if (!hasValue && !this.renderer.placeholderNode) {\n this.renderer.on(\"afterRender\", this.$updatePlaceholder);\n dom.addCssClass(this.container, \"ace_hasPlaceholder\");\n var el = dom.createElement(\"div\");\n el.className = \"ace_placeholder\";\n el.textContent = this.$placeholder || \"\";\n this.renderer.placeholderNode = el;\n this.renderer.content.appendChild(this.renderer.placeholderNode);\n }\n else if (!hasValue && this.renderer.placeholderNode) {\n this.renderer.placeholderNode.textContent = this.$placeholder || \"\";\n }\n }.bind(this);\n this.on(\"input\", this.$updatePlaceholder);\n }\n this.$updatePlaceholder();\n }\n },\n enableKeyboardAccessibility: {\n set: function (value) {\n var blurCommand = {\n name: \"blurTextInput\",\n description: \"Set focus to the editor content div to allow tabbing through the page\",\n bindKey: \"Esc\",\n exec: function (editor) {\n editor.blur();\n editor.renderer.scroller.focus();\n },\n readOnly: true\n };\n var focusOnEnterKeyup = function (e) {\n if (e.target == this.renderer.scroller && e.keyCode === keys['enter']) {\n e.preventDefault();\n var row = this.getCursorPosition().row;\n if (!this.isRowVisible(row))\n this.scrollToLine(row, true, true);\n this.focus();\n }\n };\n var gutterKeyboardHandler;\n if (value) {\n this.renderer.enableKeyboardAccessibility = true;\n this.renderer.keyboardFocusClassName = \"ace_keyboard-focus\";\n this.textInput.getElement().setAttribute(\"tabindex\", -1);\n this.textInput.setNumberOfExtraLines(useragent.isWin ? 3 : 0);\n this.renderer.scroller.setAttribute(\"tabindex\", 0);\n this.renderer.scroller.setAttribute(\"role\", \"group\");\n this.renderer.scroller.setAttribute(\"aria-roledescription\", nls(\"editor\"));\n this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.setAttribute(\"aria-label\", nls(\"Editor content, press Enter to start editing, press Escape to exit\"));\n this.renderer.scroller.addEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.addCommand(blurCommand);\n this.renderer.$gutter.setAttribute(\"tabindex\", 0);\n this.renderer.$gutter.setAttribute(\"aria-hidden\", false);\n this.renderer.$gutter.setAttribute(\"role\", \"group\");\n this.renderer.$gutter.setAttribute(\"aria-roledescription\", nls(\"editor\"));\n this.renderer.$gutter.setAttribute(\"aria-label\", nls(\"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\"));\n this.renderer.$gutter.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.content.setAttribute(\"aria-hidden\", true);\n if (!gutterKeyboardHandler)\n gutterKeyboardHandler = new GutterKeyboardHandler(this);\n gutterKeyboardHandler.addListener();\n }\n else {\n this.renderer.enableKeyboardAccessibility = false;\n this.textInput.getElement().setAttribute(\"tabindex\", 0);\n this.textInput.setNumberOfExtraLines(0);\n this.renderer.scroller.setAttribute(\"tabindex\", -1);\n this.renderer.scroller.removeAttribute(\"role\");\n this.renderer.scroller.removeAttribute(\"aria-roledescription\");\n this.renderer.scroller.classList.remove(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.removeAttribute(\"aria-label\");\n this.renderer.scroller.removeEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.removeCommand(blurCommand);\n this.renderer.content.removeAttribute(\"aria-hidden\");\n this.renderer.$gutter.setAttribute(\"tabindex\", -1);\n this.renderer.$gutter.setAttribute(\"aria-hidden\", true);\n this.renderer.$gutter.removeAttribute(\"role\");\n this.renderer.$gutter.removeAttribute(\"aria-roledescription\");\n this.renderer.$gutter.removeAttribute(\"aria-label\");\n this.renderer.$gutter.classList.remove(this.renderer.keyboardFocusClassName);\n if (gutterKeyboardHandler)\n gutterKeyboardHandler.removeListener();\n }\n },\n initialValue: false\n },\n customScrollbar: \"renderer\",\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n displayIndentGuides: \"renderer\",\n highlightIndentGuides: \"renderer\",\n showGutter: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n hasCssTransforms: \"renderer\",\n maxPixelHeight: \"renderer\",\n useTextareaForIME: \"renderer\",\n useResizeObserver: \"renderer\",\n useSvgGutterIcons: \"renderer\",\n showFoldedAnnotations: \"renderer\",\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimeout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n navigateWithinSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n});\nvar relativeNumberRenderer = {\n getText: function (session, row) {\n return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n },\n getWidth: function (session, lastLineNumber, config) {\n return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth;\n },\n update: function (e, editor) {\n editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n },\n attach: function (editor) {\n editor.renderer.$gutterLayer.$renderer = this;\n editor.on(\"changeSelection\", this.update);\n this.update(null, editor);\n },\n detach: function (editor) {\n if (editor.renderer.$gutterLayer.$renderer == this)\n editor.renderer.$gutterLayer.$renderer = null;\n editor.off(\"changeSelection\", this.update);\n this.update(null, editor);\n }\n};\nexports.Editor = Editor;\n\n});\n\nace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Lines = /** @class */ (function () {\n function Lines(element, canvasHeight) {\n this.element = element;\n this.canvasHeight = canvasHeight || 500000;\n this.element.style.height = (this.canvasHeight * 2) + \"px\";\n this.cells = [];\n this.cellCache = [];\n this.$offsetCoefficient = 0;\n }\n Lines.prototype.moveContainer = function (config) {\n dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n };\n Lines.prototype.pageChanged = function (oldConfig, newConfig) {\n return (Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !==\n Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight));\n };\n Lines.prototype.computeLineTop = function (row, config, session) {\n var screenTop = config.firstRowScreen * config.lineHeight;\n var screenPage = Math.floor(screenTop / this.canvasHeight);\n var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n return lineTop - (screenPage * this.canvasHeight);\n };\n Lines.prototype.computeLineHeight = function (row, config, session) {\n return config.lineHeight * session.getRowLineCount(row);\n };\n Lines.prototype.getLength = function () {\n return this.cells.length;\n };\n Lines.prototype.get = function (index) {\n return this.cells[index];\n };\n Lines.prototype.shift = function () {\n this.$cacheCell(this.cells.shift());\n };\n Lines.prototype.pop = function () {\n this.$cacheCell(this.cells.pop());\n };\n Lines.prototype.push = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.push.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n this.element.appendChild(fragment);\n }\n else {\n this.cells.push(cell);\n this.element.appendChild(cell.element);\n }\n };\n Lines.prototype.unshift = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.unshift.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n if (this.element.firstChild)\n this.element.insertBefore(fragment, this.element.firstChild);\n else\n this.element.appendChild(fragment);\n }\n else {\n this.cells.unshift(cell);\n this.element.insertAdjacentElement(\"afterbegin\", cell.element);\n }\n };\n Lines.prototype.last = function () {\n if (this.cells.length)\n return this.cells[this.cells.length - 1];\n else\n return null;\n };\n Lines.prototype.$cacheCell = function (cell) {\n if (!cell)\n return;\n cell.element.remove();\n this.cellCache.push(cell);\n };\n Lines.prototype.createCell = function (row, config, session, initElement) {\n var cell = this.cellCache.pop();\n if (!cell) {\n var element = dom.createElement(\"div\");\n if (initElement)\n initElement(element);\n this.element.appendChild(element);\n cell = {\n element: element,\n text: \"\",\n row: row\n };\n }\n cell.row = row;\n return cell;\n };\n return Lines;\n}());\nexports.Lines = Lines;\n\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Lines = require(\"./lines\").Lines;\nvar nls = require(\"../config\").nls;\nvar Gutter = /** @class */ (function () {\n function Gutter(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_gutter-layer\";\n parentEl.appendChild(this.element);\n this.setShowFoldWidgets(this.$showFoldWidgets);\n this.gutterWidth = 0;\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n this.$lines = new Lines(this.element);\n this.$lines.$offsetCoefficient = 1;\n }\n Gutter.prototype.setSession = function (session) {\n if (this.session)\n this.session.off(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session)\n session.on(\"change\", this.$updateAnnotations);\n };\n Gutter.prototype.addGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n Gutter.prototype.removeGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\n Gutter.prototype.setAnnotations = function (annotations) {\n this.$annotations = [];\n for (var i = 0; i < annotations.length; i++) {\n var annotation = annotations[i];\n var row = annotation.row;\n var rowInfo = this.$annotations[row];\n if (!rowInfo)\n rowInfo = this.$annotations[row] = { text: [], type: [] };\n var annoText = annotation.text;\n var annoType = annotation.type;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n if (rowInfo.text.indexOf(annoText) === -1) {\n rowInfo.text.push(annoText);\n rowInfo.type.push(annoType);\n }\n var className = annotation.className;\n if (className)\n rowInfo.className = className;\n else if (annoType == \"error\")\n rowInfo.className = \" ace_error\";\n else if (annoType == \"warning\" && rowInfo.className != \" ace_error\")\n rowInfo.className = \" ace_warning\";\n else if (annoType == \"info\" && (!rowInfo.className))\n rowInfo.className = \" ace_info\";\n }\n };\n Gutter.prototype.$updateAnnotations = function (delta) {\n if (!this.$annotations.length)\n return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n }\n else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\n }\n else {\n var args = new Array(len + 1);\n args.unshift(firstRow, 1);\n this.$annotations.splice.apply(this.$annotations, args);\n }\n };\n Gutter.prototype.update = function (config) {\n this.config = config;\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n session.getLength() - 1);\n this.oldLastRow = lastRow;\n this.config = config;\n this.$lines.moveContainer(config);\n this.$updateCursorRow();\n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var cell = null;\n var index = -1;\n var row = firstRow;\n while (true) {\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n if (row > lastRow) {\n while (this.$lines.getLength() > index + 1)\n this.$lines.pop();\n break;\n }\n cell = this.$lines.get(++index);\n if (cell) {\n cell.row = row;\n }\n else {\n cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$lines.push(cell);\n }\n this.$renderCell(cell, config, fold, row);\n row++;\n }\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n Gutter.prototype.$updateGutterWidth = function (config) {\n var session = this.session;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var firstLineNumber = session.$firstLineNumber;\n var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n if (this.$fixedWidth || session.$useWrapMode)\n lastLineText = session.getLength() + firstLineNumber - 1;\n var gutterWidth = gutterRenderer\n ? gutterRenderer.getWidth(session, lastLineText, config)\n : lastLineText.toString().length * config.characterWidth;\n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth;\n this.element.parentNode.style.width =\n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._signal(\"changeGutterWidth\", gutterWidth);\n }\n };\n Gutter.prototype.$updateCursorRow = function () {\n if (!this.$highlightGutterLine)\n return;\n var position = this.session.selection.getCursor();\n if (this.$cursorRow === position.row)\n return;\n this.$cursorRow = position.row;\n };\n Gutter.prototype.updateLineHighlight = function () {\n if (!this.$highlightGutterLine)\n return;\n var row = this.session.selection.cursor.row;\n this.$cursorRow = row;\n if (this.$cursorCell && this.$cursorCell.row == row)\n return;\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n var cells = this.$lines.cells;\n this.$cursorCell = null;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (cell.row >= this.$cursorRow) {\n if (cell.row > this.$cursorRow) {\n var fold = this.session.getFoldLine(this.$cursorRow);\n if (i > 0 && fold && fold.start.row == cells[i - 1].row)\n cell = cells[i - 1];\n else\n break;\n }\n cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n this.$cursorCell = cell;\n break;\n }\n }\n };\n Gutter.prototype.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n this.$updateCursorRow();\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n this.session.getLength() - 1);\n var oldLastRow = this.oldLastRow;\n this.oldLastRow = lastRow;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldLastRow > lastRow)\n for (var row = this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (lastRow > oldLastRow) {\n this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n }\n this.updateLineHighlight();\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n Gutter.prototype.$renderLines = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$renderCell(cell, config, foldLine, row);\n fragment.push(cell);\n row++;\n }\n return fragment;\n };\n Gutter.prototype.$renderCell = function (cell, config, fold, row) {\n var element = cell.element;\n var session = this.session;\n var textNode = element.childNodes[0];\n var foldWidget = element.childNodes[1];\n var annotationNode = element.childNodes[2];\n var annotationIconNode = annotationNode.firstChild;\n var firstLineNumber = session.$firstLineNumber;\n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n var lineHeight = config.lineHeight + \"px\";\n var className = this.$useSvgGutterIcons ? \"ace_gutter-cell_svg-icons \" : \"ace_gutter-cell \";\n var iconClassName = this.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n var rowText = (gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber).toString();\n if (this.$highlightGutterLine) {\n if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) {\n className += \"ace_gutter-active-line \";\n if (this.$cursorCell != cell) {\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n this.$cursorCell = cell;\n }\n }\n }\n if (breakpoints[row])\n className += breakpoints[row];\n if (decorations[row])\n className += decorations[row];\n if (this.$annotations[row] && row !== foldStart)\n className += this.$annotations[row].className;\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null)\n c = foldWidgets[row] = session.getFoldWidget(row);\n }\n if (c) {\n var foldClass = \"ace_fold-widget ace_\" + c;\n var isClosedFold = c == \"start\" && row == foldStart && row < fold.end.row;\n if (isClosedFold) {\n foldClass += \" ace_closed\";\n var foldAnnotationClass = '';\n var annotationInFold = false;\n for (var i = row + 1; i <= fold.end.row; i++) {\n if (!this.$annotations[i])\n continue;\n if (this.$annotations[i].className === \" ace_error\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_error_fold\";\n break;\n }\n if (this.$annotations[i].className === \" ace_warning\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_warning_fold\";\n continue;\n }\n }\n className += foldAnnotationClass;\n }\n else\n foldClass += \" ace_open\";\n if (foldWidget.className != foldClass)\n foldWidget.className = foldClass;\n dom.setStyle(foldWidget.style, \"height\", lineHeight);\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n foldWidget.setAttribute(\"role\", \"button\");\n foldWidget.setAttribute(\"tabindex\", \"-1\");\n var foldRange = session.getFoldWidgetRange(row);\n if (foldRange)\n foldWidget.setAttribute(\"aria-label\", nls(\"Toggle code folding, rows $0 through $1\", [foldRange.start.row + 1, foldRange.end.row + 1]));\n else {\n if (fold)\n foldWidget.setAttribute(\"aria-label\", nls(\"Toggle code folding, rows $0 through $1\", [fold.start.row + 1, fold.end.row + 1]));\n else\n foldWidget.setAttribute(\"aria-label\", nls(\"Toggle code folding, row $0\", [row + 1]));\n }\n if (isClosedFold) {\n foldWidget.setAttribute(\"aria-expanded\", \"false\");\n foldWidget.setAttribute(\"title\", nls(\"Unfold code\"));\n }\n else {\n foldWidget.setAttribute(\"aria-expanded\", \"true\");\n foldWidget.setAttribute(\"title\", nls(\"Fold code\"));\n }\n }\n else {\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n foldWidget.setAttribute(\"tabindex\", \"0\");\n foldWidget.removeAttribute(\"role\");\n foldWidget.removeAttribute(\"aria-label\");\n }\n }\n if (annotationInFold && this.$showFoldedAnnotations) {\n annotationNode.className = \"ace_gutter_annotation\";\n annotationIconNode.className = iconClassName;\n annotationIconNode.className += foldAnnotationClass;\n dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n dom.setStyle(annotationNode.style, \"display\", \"block\");\n dom.setStyle(annotationNode.style, \"height\", lineHeight);\n annotationNode.setAttribute(\"aria-label\", nls(\"Read annotations row $0\", [rowText]));\n annotationNode.setAttribute(\"tabindex\", \"-1\");\n annotationNode.setAttribute(\"role\", \"button\");\n }\n else if (this.$annotations[row]) {\n annotationNode.className = \"ace_gutter_annotation\";\n annotationIconNode.className = iconClassName;\n if (this.$useSvgGutterIcons)\n annotationIconNode.className += this.$annotations[row].className;\n else\n element.classList.add(this.$annotations[row].className.replace(\" \", \"\"));\n dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n dom.setStyle(annotationNode.style, \"display\", \"block\");\n dom.setStyle(annotationNode.style, \"height\", lineHeight);\n annotationNode.setAttribute(\"aria-label\", nls(\"Read annotations row $0\", [rowText]));\n annotationNode.setAttribute(\"tabindex\", \"-1\");\n annotationNode.setAttribute(\"role\", \"button\");\n }\n else {\n dom.setStyle(annotationNode.style, \"display\", \"none\");\n annotationNode.removeAttribute(\"aria-label\");\n annotationNode.removeAttribute(\"role\");\n annotationNode.setAttribute(\"tabindex\", \"0\");\n }\n if (rowText !== textNode.data) {\n textNode.data = rowText;\n }\n if (element.className != className)\n element.className = className;\n dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n cell.text = rowText;\n if (annotationNode.style.display === \"none\" && foldWidget.style.display === \"none\")\n cell.element.setAttribute(\"aria-hidden\", true);\n else\n cell.element.setAttribute(\"aria-hidden\", false);\n return cell;\n };\n Gutter.prototype.setHighlightGutterLine = function (highlightGutterLine) {\n this.$highlightGutterLine = highlightGutterLine;\n };\n Gutter.prototype.setShowLineNumbers = function (show) {\n this.$renderer = !show && {\n getWidth: function () { return 0; },\n getText: function () { return \"\"; }\n };\n };\n Gutter.prototype.getShowLineNumbers = function () {\n return this.$showLineNumbers;\n };\n Gutter.prototype.setShowFoldWidgets = function (show) {\n if (show)\n dom.addCssClass(this.element, \"ace_folding-enabled\");\n else\n dom.removeCssClass(this.element, \"ace_folding-enabled\");\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n Gutter.prototype.getShowFoldWidgets = function () {\n return this.$showFoldWidgets;\n };\n Gutter.prototype.$computePadding = function () {\n if (!this.element.firstChild)\n return { left: 0, right: 0 };\n var style = dom.computedStyle(this.element.firstChild);\n this.$padding = {};\n this.$padding.left = (parseInt(style.borderLeftWidth) || 0)\n + (parseInt(style.paddingLeft) || 0) + 1;\n this.$padding.right = (parseInt(style.borderRightWidth) || 0)\n + (parseInt(style.paddingRight) || 0);\n return this.$padding;\n };\n Gutter.prototype.getRegion = function (point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left)\n return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n return \"foldWidgets\";\n };\n return Gutter;\n}());\nGutter.prototype.$fixedWidth = false;\nGutter.prototype.$highlightGutterLine = true;\nGutter.prototype.$renderer = \"\";\nGutter.prototype.$showLineNumbers = true;\nGutter.prototype.$showFoldWidgets = true;\noop.implement(Gutter.prototype, EventEmitter);\nfunction onCreateCell(element) {\n var textNode = document.createTextNode('');\n element.appendChild(textNode);\n var foldWidget = dom.createElement(\"span\");\n element.appendChild(foldWidget);\n var annotationNode = dom.createElement(\"span\");\n element.appendChild(annotationNode);\n var annotationIconNode = dom.createElement(\"span\");\n annotationNode.appendChild(annotationIconNode);\n return element;\n}\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\nvar Marker = /** @class */ (function () {\n function Marker(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n }\n Marker.prototype.setPadding = function (padding) {\n this.$padding = padding;\n };\n Marker.prototype.setSession = function (session) {\n this.session = session;\n };\n Marker.prototype.setMarkers = function (markers) {\n this.markers = markers;\n };\n Marker.prototype.elt = function (className, css) {\n var x = this.i != -1 && this.element.childNodes[this.i];\n if (!x) {\n x = document.createElement(\"div\");\n this.element.appendChild(x);\n this.i = -1;\n }\n else {\n this.i++;\n }\n x.style.cssText = css;\n x.className = className;\n };\n Marker.prototype.update = function (config) {\n if (!config)\n return;\n this.config = config;\n this.i = 0;\n var html;\n for (var key in this.markers) {\n var marker = this.markers[key];\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty())\n continue;\n range = range.toScreenRange(this.session);\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n marker.renderer(html, range, left, top, config);\n }\n else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n }\n else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n }\n else if (range.isMultiLine()) {\n if (marker.type == \"text\")\n this.drawTextMarker(html, range, marker.clazz, config);\n else\n this.drawMultiLineMarker(html, range, marker.clazz, config);\n }\n else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n if (this.i != -1) {\n while (this.i < this.element.childElementCount)\n this.element.removeChild(this.element.lastChild);\n }\n };\n Marker.prototype.$getTop = function (row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n Marker.prototype.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0;\n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var lineRange = new Range(row, range.start.column, row, curr);\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle);\n }\n };\n Marker.prototype.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height = config.lineHeight;\n var top = this.$getTop(range.start.row, config);\n var left = padding + range.start.column * config.characterWidth;\n extraStyle = extraStyle || \"\";\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n }\n else {\n this.elt(clazz + \" ace_br1 ace_start\", \"height:\" + height + \"px;\" + \"right:0;\" + \"top:\" + top + \"px;left:\" + left + \"px;\" + (extraStyle || \"\"));\n }\n if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n var range1 = range.clone();\n range1.start.row = range1.end.row;\n range1.start.column = 0;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n }\n else {\n top = this.$getTop(range.end.row, config);\n var width = range.end.column * config.characterWidth;\n this.elt(clazz + \" ace_br12\", \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n }\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0)\n return;\n top = this.$getTop(range.start.row + 1, config);\n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n this.elt(clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"height:\" + height + \"px;\" +\n \"right:0;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n if (this.session.$bidiHandler.isBidiRow(range.start.row))\n return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n var height = config.lineHeight;\n var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + left + \"px;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n selections.forEach(function (selection) {\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + (selection.width + (extraLength || 0)) + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\"));\n }, this);\n };\n Marker.prototype.drawFullLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row)\n height += this.$getTop(range.end.row, config) - top;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawScreenLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n return Marker;\n}());\nMarker.prototype.$padding = 0;\nfunction getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n}\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text_util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){// Tokens for which Ace just uses a simple TextNode and does not add any special className.\nvar textTokens = new Set([\"text\", \"rparen\", \"lparen\"]);\nexports.isTextToken = function (tokenType) {\n return textTokens.has(tokenType);\n};\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\",\"ace/config\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar Lines = require(\"./lines\").Lines;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar nls = require(\"../config\").nls;\nvar isTextToken = require(\"./text_util\").isTextToken;\nvar Text = /** @class */ (function () {\n function Text(parentEl) {\n this.dom = dom;\n this.element = this.dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_text-layer\";\n parentEl.appendChild(this.element);\n this.$updateEolChar = this.$updateEolChar.bind(this);\n this.$lines = new Lines(this.element);\n }\n Text.prototype.$updateEolChar = function () {\n var doc = this.session.doc;\n var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n };\n Text.prototype.setPadding = function (padding) {\n this.$padding = padding;\n this.element.style.margin = \"0 \" + padding + \"px\";\n };\n Text.prototype.getLineHeight = function () {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n Text.prototype.getCharacterWidth = function () {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n Text.prototype.$setFontMetrics = function (measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", function (e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n Text.prototype.checkForSizeChanges = function () {\n this.$fontMetrics.checkForSizeChanges();\n };\n Text.prototype.$pollSizeChanges = function () {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n Text.prototype.setSession = function (session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n Text.prototype.setShowInvisibles = function (showInvisibles) {\n if (this.showInvisibles == showInvisibles)\n return false;\n this.showInvisibles = showInvisibles;\n if (typeof showInvisibles == \"string\") {\n this.showSpaces = /tab/i.test(showInvisibles);\n this.showTabs = /space/i.test(showInvisibles);\n this.showEOL = /eol/i.test(showInvisibles);\n }\n else {\n this.showSpaces = this.showTabs = this.showEOL = showInvisibles;\n }\n this.$computeTabString();\n return true;\n };\n Text.prototype.setDisplayIndentGuides = function (display) {\n if (this.displayIndentGuides == display)\n return false;\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n Text.prototype.setHighlightIndentGuides = function (highlight) {\n if (this.$highlightIndentGuides === highlight)\n return false;\n this.$highlightIndentGuides = highlight;\n return highlight;\n };\n Text.prototype.$computeTabString = function () {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize;\n var tabStr = this.$tabStrings = [0];\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showTabs) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_tab\";\n span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n tabStr.push(span);\n }\n else {\n tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n }\n }\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = this.showSpaces ? \" ace_invisible ace_invisible_space\" : \"\";\n var spaceContent = this.showSpaces\n ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize)\n : lang.stringRepeat(\" \", this.tabSize);\n var tabClass = this.showTabs ? \" ace_invisible ace_invisible_tab\" : \"\";\n var tabContent = this.showTabs\n ? lang.stringRepeat(this.TAB_CHAR, this.tabSize)\n : spaceContent;\n var span = this.dom.createElement(\"span\");\n span.className = className + spaceClass;\n span.textContent = spaceContent;\n this.$tabStrings[\" \"] = span;\n var span = this.dom.createElement(\"span\");\n span.className = className + tabClass;\n span.textContent = tabContent;\n this.$tabStrings[\"\\t\"] = span;\n }\n };\n Text.prototype.updateLines = function (config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow ||\n this.config.firstRow != config.firstRow) {\n return this.update(config);\n }\n this.config = config;\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n }\n else {\n row = foldLine.end.row;\n }\n }\n lineElementsIdx++;\n }\n var heightChanged = false;\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > last)\n break;\n var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n this.dom.removeChildren(lineElement);\n this.$renderLine(lineElement, row, row == foldStart ? foldLine : false);\n if (heightChanged)\n lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + \"px\";\n var height = (config.lineHeight * this.session.getRowLength(row)) + \"px\";\n if (lineElement.style.height != height) {\n heightChanged = true;\n lineElement.style.height = height;\n }\n }\n row++;\n }\n if (heightChanged) {\n while (lineElementsIdx < this.$lines.cells.length) {\n var cell = this.$lines.cells[lineElementsIdx++];\n cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n }\n }\n };\n Text.prototype.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = config.lastRow;\n var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (!oldConfig || oldConfig.lastRow < config.firstRow)\n return this.update(config);\n if (config.lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldConfig.lastRow > config.lastRow)\n for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (config.lastRow > oldConfig.lastRow) {\n this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n }\n this.$highlightIndentGuide();\n };\n Text.prototype.$renderLinesFragment = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var line = this.$lines.createCell(row, config, this.session);\n var lineEl = line.element;\n this.dom.removeChildren(lineEl);\n dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n if (this.$useLineGroups()) {\n lineEl.className = \"ace_line_group\";\n }\n else {\n lineEl.className = \"ace_line\";\n }\n fragment.push(line);\n row++;\n }\n return fragment;\n };\n Text.prototype.update = function (config) {\n this.$lines.moveContainer(config);\n this.config = config;\n var firstRow = config.firstRow;\n var lastRow = config.lastRow;\n var lines = this.$lines;\n while (lines.getLength())\n lines.pop();\n lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n };\n Text.prototype.$renderToken = function (parent, screenColumn, token, value) {\n var self = this;\n var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC\\u2066\\u2067\\u2068\\u202A\\u202B\\u202D\\u202E\\u202C\\u2069]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n var valueFragment = this.dom.createFragment(this.element);\n var m;\n var i = 0;\n while (m = re.exec(value)) {\n var tab = m[1];\n var simpleSpace = m[2];\n var controlCharacter = m[3];\n var cjkSpace = m[4];\n var cjk = m[5];\n if (!self.showSpaces && simpleSpace)\n continue;\n var before = i != m.index ? value.slice(i, m.index) : \"\";\n i = m.index + m[0].length;\n if (before) {\n valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n }\n if (tab) {\n var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n valueFragment.appendChild(self.$tabStrings[tabSize].cloneNode(true));\n screenColumn += tabSize - 1;\n }\n else if (simpleSpace) {\n if (self.showSpaces) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n valueFragment.appendChild(span);\n }\n else {\n valueFragment.appendChild(this.dom.createTextNode(simpleSpace, this.element));\n }\n }\n else if (controlCharacter) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n valueFragment.appendChild(span);\n }\n else if (cjkSpace) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = self.showSpaces ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace;\n valueFragment.appendChild(span);\n }\n else if (cjk) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = \"ace_cjk\";\n span.textContent = cjk;\n valueFragment.appendChild(span);\n }\n }\n valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n if (!isTextToken(token.type)) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var span = this.dom.createElement(\"span\");\n if (token.type == \"fold\") {\n span.style.width = (token.value.length * this.config.characterWidth) + \"px\";\n span.setAttribute(\"title\", nls(\"Unfold code\"));\n }\n span.className = classes;\n span.appendChild(valueFragment);\n parent.appendChild(span);\n }\n else {\n parent.appendChild(valueFragment);\n }\n return screenColumn + value.length;\n };\n Text.prototype.renderIndentGuide = function (parent, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max)\n return value;\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n var count = cols / this.tabSize;\n for (var i = 0; i < count; i++) {\n parent.appendChild(this.$tabStrings[\" \"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n else if (value[0] == \"\\t\") {\n for (var i = 0; i < cols; i++) {\n parent.appendChild(this.$tabStrings[\"\\t\"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n this.$highlightIndentGuide();\n return value;\n };\n Text.prototype.$highlightIndentGuide = function () {\n if (!this.$highlightIndentGuides || !this.displayIndentGuides)\n return;\n this.$highlightIndentGuideMarker = {\n indentLevel: undefined,\n start: undefined,\n end: undefined,\n dir: undefined\n };\n var lines = this.session.doc.$lines;\n if (!lines)\n return;\n var cursor = this.session.selection.getCursor();\n var initialIndent = /^\\s*/.exec(this.session.doc.getLine(cursor.row))[0].length;\n var elementIndentLevel = Math.floor(initialIndent / this.tabSize);\n this.$highlightIndentGuideMarker = {\n indentLevel: elementIndentLevel,\n start: cursor.row\n };\n var bracketHighlight = this.session.$bracketHighlight;\n if (bracketHighlight) {\n var ranges = this.session.$bracketHighlight.ranges;\n for (var i = 0; i < ranges.length; i++) {\n if (cursor.row !== ranges[i].start.row) {\n this.$highlightIndentGuideMarker.end = ranges[i].start.row;\n if (cursor.row > ranges[i].start.row) {\n this.$highlightIndentGuideMarker.dir = -1;\n }\n else {\n this.$highlightIndentGuideMarker.dir = 1;\n }\n break;\n }\n }\n }\n if (!this.$highlightIndentGuideMarker.end) {\n if (lines[cursor.row] !== '' && cursor.column === lines[cursor.row].length) {\n this.$highlightIndentGuideMarker.dir = 1;\n for (var i = cursor.row + 1; i < lines.length; i++) {\n var line = lines[i];\n var currentIndent = /^\\s*/.exec(line)[0].length;\n if (line !== '') {\n this.$highlightIndentGuideMarker.end = i;\n if (currentIndent <= initialIndent)\n break;\n }\n }\n }\n }\n this.$renderHighlightIndentGuide();\n };\n Text.prototype.$clearActiveIndentGuide = function () {\n var cells = this.$lines.cells;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n var childNodes = cell.element.childNodes;\n if (childNodes.length > 0) {\n for (var j = 0; j < childNodes.length; j++) {\n if (childNodes[j].classList && childNodes[j].classList.contains(\"ace_indent-guide-active\")) {\n childNodes[j].classList.remove(\"ace_indent-guide-active\");\n break;\n }\n }\n }\n }\n };\n Text.prototype.$setIndentGuideActive = function (cell, indentLevel) {\n var line = this.session.doc.getLine(cell.row);\n if (line !== \"\") {\n var childNodes = cell.element.childNodes;\n if (childNodes) {\n var node = childNodes[indentLevel - 1];\n if (node && node.classList && node.classList.contains(\"ace_indent-guide\"))\n node.classList.add(\"ace_indent-guide-active\");\n }\n }\n };\n Text.prototype.$renderHighlightIndentGuide = function () {\n if (!this.$lines)\n return;\n var cells = this.$lines.cells;\n this.$clearActiveIndentGuide();\n var indentLevel = this.$highlightIndentGuideMarker.indentLevel;\n if (indentLevel !== 0) {\n if (this.$highlightIndentGuideMarker.dir === 1) {\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row >= this.$highlightIndentGuideMarker.start\n + 1) {\n if (cell.row >= this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n else {\n for (var i = cells.length - 1; i >= 0; i--) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row < this.$highlightIndentGuideMarker.start) {\n if (cell.row <= this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n }\n };\n Text.prototype.$createLineElement = function (parent) {\n var lineEl = this.dom.createElement(\"div\");\n lineEl.className = \"ace_line\";\n lineEl.style.height = this.config.lineHeight + \"px\";\n return lineEl;\n };\n Text.prototype.$renderWrappedLine = function (parent, tokens, splits) {\n var chars = 0;\n var split = 0;\n var splitChars = splits[0];\n var screenColumn = 0;\n var lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n chars = value.length;\n value = this.renderIndentGuide(lineEl, value, splitChars);\n if (!value)\n continue;\n chars -= value.length;\n }\n if (chars + value.length < splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n chars += value.length;\n }\n else {\n while (chars + value.length >= splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value.substring(0, splitChars - chars));\n value = value.substring(splitChars - chars);\n chars = splitChars;\n lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n lineEl.appendChild(this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element));\n split++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n }\n }\n }\n if (splits[splits.length - 1] > this.MAX_LINE_LENGTH)\n this.$renderOverflowMessage(lineEl, screenColumn, null, \"\", true);\n };\n Text.prototype.$renderSimpleLine = function (parent, tokens) {\n var screenColumn = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n value = this.renderIndentGuide(parent, value);\n if (!value)\n continue;\n }\n if (screenColumn + value.length > this.MAX_LINE_LENGTH)\n return this.$renderOverflowMessage(parent, screenColumn, token, value);\n screenColumn = this.$renderToken(parent, screenColumn, token, value);\n }\n };\n Text.prototype.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) {\n token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n var overflowEl = this.dom.createElement(\"span\");\n overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n overflowEl.textContent = hide ? \"\" : \"\";\n parent.appendChild(overflowEl);\n };\n Text.prototype.$renderLine = function (parent, row, foldLine) {\n if (!foldLine && foldLine != false)\n foldLine = this.session.getFoldLine(row);\n if (foldLine)\n var tokens = this.$getFoldLineTokens(row, foldLine);\n else\n var tokens = this.session.getTokens(row);\n var lastLineEl = parent;\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n if (splits && splits.length) {\n this.$renderWrappedLine(parent, tokens, splits);\n var lastLineEl = parent.lastChild;\n }\n else {\n var lastLineEl = parent;\n if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n this.$renderSimpleLine(lastLineEl, tokens);\n }\n }\n else if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n if (this.showEOL && lastLineEl) {\n if (foldLine)\n row = foldLine.end.row;\n var invisibleEl = this.dom.createElement(\"span\");\n invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n lastLineEl.appendChild(invisibleEl);\n }\n };\n Text.prototype.$getFoldLineTokens = function (row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n function addTokens(tokens, from, to) {\n var idx = 0, col = 0;\n while ((col + tokens[idx].value.length) < from) {\n col += tokens[idx].value.length;\n idx++;\n if (idx == tokens.length)\n return;\n }\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > (to - from))\n value = value.substring(0, to - from);\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n col = from + value.length;\n idx += 1;\n }\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n }\n else\n renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\n }\n }\n var tokens = session.getTokens(row);\n foldLine.walk(function (placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n }\n else {\n if (isNewRow)\n tokens = session.getTokens(row);\n if (tokens.length)\n addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n return renderTokens;\n };\n Text.prototype.$useLineGroups = function () {\n return this.session.getUseWrapMode();\n };\n return Text;\n}());\nText.prototype.EOF_CHAR = \"\\xB6\";\nText.prototype.EOL_CHAR_LF = \"\\xAC\";\nText.prototype.EOL_CHAR_CRLF = \"\\xa4\";\nText.prototype.EOL_CHAR = Text.prototype.EOL_CHAR_LF;\nText.prototype.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\nText.prototype.SPACE_CHAR = \"\\xB7\";\nText.prototype.$padding = 0;\nText.prototype.MAX_LINE_LENGTH = 10000;\nText.prototype.showInvisibles = false;\nText.prototype.showSpaces = false;\nText.prototype.showTabs = false;\nText.prototype.showEOL = false;\nText.prototype.displayIndentGuides = true;\nText.prototype.$highlightIndentGuides = true;\nText.prototype.$tabStrings = [];\nText.prototype.destroy = {};\nText.prototype.onChangeTabSize = Text.prototype.$computeTabString;\noop.implement(Text.prototype, EventEmitter);\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Cursor = /** @class */ (function () {\n function Cursor(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = this.$updateOpacity.bind(this);\n }\n Cursor.prototype.$updateOpacity = function (val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n };\n Cursor.prototype.$startCssAnimation = function () {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n this.$isAnimating = true;\n setTimeout(function () {\n if (this.$isAnimating) {\n dom.addCssClass(this.element, \"ace_animate-blinking\");\n }\n }.bind(this));\n };\n Cursor.prototype.$stopCssAnimation = function () {\n this.$isAnimating = false;\n dom.removeCssClass(this.element, \"ace_animate-blinking\");\n };\n Cursor.prototype.setPadding = function (padding) {\n this.$padding = padding;\n };\n Cursor.prototype.setSession = function (session) {\n this.session = session;\n };\n Cursor.prototype.setBlinking = function (blinking) {\n if (blinking != this.isBlinking) {\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n Cursor.prototype.setBlinkInterval = function (blinkInterval) {\n if (blinkInterval != this.blinkInterval) {\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n Cursor.prototype.setSmoothBlinking = function (smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.restartTimer();\n }\n };\n Cursor.prototype.addCursor = function () {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n Cursor.prototype.removeCursor = function () {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n Cursor.prototype.hideCursor = function () {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n Cursor.prototype.showCursor = function () {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n Cursor.prototype.restartTimer = function () {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n this.$stopCssAnimation();\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = false;\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n update(true);\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n this.$stopCssAnimation();\n return;\n }\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = true;\n setTimeout(function () {\n if (this.$isSmoothBlinking) {\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }\n }.bind(this));\n }\n if (dom.HAS_CSS_ANIMATION) {\n this.$startCssAnimation();\n }\n else {\n var blink = function () {\n this.timeoutId = setTimeout(function () {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n this.intervalId = setInterval(function () {\n update(true);\n blink();\n }, this.blinkInterval);\n blink();\n }\n };\n Cursor.prototype.getPixelPosition = function (position, onScreen) {\n if (!this.config || !this.session)\n return { left: 0, top: 0 };\n if (!position)\n position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : pos.column * this.config.characterWidth);\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n this.config.lineHeight;\n return { left: cursorLeft, top: cursorTop };\n };\n Cursor.prototype.isCursorInView = function (pixelPos, config) {\n return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n };\n Cursor.prototype.update = function (config) {\n this.config = config;\n var selections = this.session.$selectionMarkers;\n var i = 0, cursorIndex = 0;\n if (selections === undefined || selections.length === 0) {\n selections = [{ cursor: null }];\n }\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n if ((pixelPos.top > config.height + config.offset ||\n pixelPos.top < 0) && i > 1) {\n continue;\n }\n var element = this.cursors[cursorIndex++] || this.addCursor();\n var style = element.style;\n if (!this.drawCursor) {\n if (!this.isCursorInView(pixelPos, config)) {\n dom.setStyle(style, \"display\", \"none\");\n }\n else {\n dom.setStyle(style, \"display\", \"block\");\n dom.translate(element, pixelPos.left, pixelPos.top);\n dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n }\n }\n else {\n this.drawCursor(element, pixelPos, config, selections[i], this.session);\n }\n }\n while (this.cursors.length > cursorIndex)\n this.removeCursor();\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n Cursor.prototype.$setOverwrite = function (overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite)\n dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n else\n dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n Cursor.prototype.destroy = function () {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n return Cursor;\n}());\nCursor.prototype.$padding = 0;\nCursor.prototype.drawCursor = null;\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar Scrollbar = /** @class */ (function () {\n function Scrollbar(parent, classSuffix) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.inner.textContent = \"\\xa0\";\n this.element.appendChild(this.inner);\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n }\n Scrollbar.prototype.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n return Scrollbar;\n}());\noop.implement(Scrollbar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n __extends(VScrollBar, _super);\n function VScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-v') || this;\n _this.scrollTop = 0;\n _this.scrollHeight = 0;\n renderer.$scrollbarWidth =\n _this.width = dom.scrollbarWidth(parent.ownerDocument);\n _this.inner.style.width =\n _this.element.style.width = (_this.width || 15) + 5 + \"px\";\n _this.$minWidth = 0;\n return _this;\n }\n VScrollBar.prototype.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n this.skipEvent = false;\n };\n VScrollBar.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n VScrollBar.prototype.setHeight = function (height) {\n this.element.style.height = height + \"px\";\n };\n VScrollBar.prototype.setScrollHeight = function (height) {\n this.scrollHeight = height;\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n }\n else if (this.coeff != 1) {\n this.coeff = 1;\n }\n this.inner.style.height = height + \"px\";\n };\n VScrollBar.prototype.setScrollTop = function (scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n return VScrollBar;\n}(Scrollbar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n __extends(HScrollBar, _super);\n function HScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-h') || this;\n _this.scrollLeft = 0;\n _this.height = renderer.$scrollbarWidth;\n _this.inner.style.height =\n _this.element.style.height = (_this.height || 15) + 5 + \"px\";\n return _this;\n }\n HScrollBar.prototype.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n this.skipEvent = false;\n };\n HScrollBar.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n HScrollBar.prototype.setWidth = function (width) {\n this.element.style.width = width + \"px\";\n };\n HScrollBar.prototype.setInnerWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n HScrollBar.prototype.setScrollWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n return HScrollBar;\n}(Scrollbar));\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/scrollbar_custom\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\ndom.importCssString(\".ace_editor>.ace_sb-v div, .ace_editor>.ace_sb-h div{\\n position: absolute;\\n background: rgba(128, 128, 128, 0.6);\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n border: 1px solid #bbb;\\n border-radius: 2px;\\n z-index: 8;\\n}\\n.ace_editor>.ace_sb-v, .ace_editor>.ace_sb-h {\\n position: absolute;\\n z-index: 6;\\n background: none;\\n overflow: hidden!important;\\n}\\n.ace_editor>.ace_sb-v {\\n z-index: 6;\\n right: 0;\\n top: 0;\\n width: 12px;\\n}\\n.ace_editor>.ace_sb-v div {\\n z-index: 8;\\n right: 0;\\n width: 100%;\\n}\\n.ace_editor>.ace_sb-h {\\n bottom: 0;\\n left: 0;\\n height: 12px;\\n}\\n.ace_editor>.ace_sb-h div {\\n bottom: 0;\\n height: 100%;\\n}\\n.ace_editor>.ace_sb_grabbed {\\n z-index: 8;\\n background: #000;\\n}\", \"ace_scrollbar.css\", false);\nvar ScrollBar = /** @class */ (function () {\n function ScrollBar(parent, classSuffix) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_sb\" + classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"\";\n this.element.appendChild(this.inner);\n this.VScrollWidth = 12;\n this.HScrollHeight = 12;\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addMultiMouseDownListener(this.element, [500, 300, 300], this, \"onMouseDown\");\n }\n ScrollBar.prototype.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n return ScrollBar;\n}());\noop.implement(ScrollBar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n __extends(VScrollBar, _super);\n function VScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-v') || this;\n _this.scrollTop = 0;\n _this.scrollHeight = 0;\n _this.parent = parent;\n _this.width = _this.VScrollWidth;\n _this.renderer = renderer;\n _this.inner.style.width = _this.element.style.width = (_this.width || 15) + \"px\";\n _this.$minWidth = 0;\n return _this;\n }\n VScrollBar.prototype.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageY = e.clientY;\n var onMouseMove = function (e) {\n mousePageY = e.clientY;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startY = e.clientY;\n var startTop = this.thumbTop;\n var onScrollInterval = function () {\n if (mousePageY === undefined)\n return;\n var scrollTop = self.scrollTopFromThumbTop(startTop + mousePageY - startY);\n if (scrollTop === self.scrollTop)\n return;\n self._emit(\"scroll\", { data: scrollTop });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var top = e.clientY - this.element.getBoundingClientRect().top - this.thumbHeight / 2;\n this._emit(\"scroll\", { data: this.scrollTopFromThumbTop(top) });\n return event.preventDefault(e);\n };\n VScrollBar.prototype.getHeight = function () {\n return this.height;\n };\n VScrollBar.prototype.scrollTopFromThumbTop = function (thumbTop) {\n var scrollTop = thumbTop * (this.pageHeight - this.viewHeight) / (this.slideHeight - this.thumbHeight);\n scrollTop = scrollTop >> 0;\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n else if (scrollTop > this.pageHeight - this.viewHeight) {\n scrollTop = this.pageHeight - this.viewHeight;\n }\n return scrollTop;\n };\n VScrollBar.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n VScrollBar.prototype.setHeight = function (height) {\n this.height = Math.max(0, height);\n this.slideHeight = this.height;\n this.viewHeight = this.height;\n this.setScrollHeight(this.pageHeight, true);\n };\n VScrollBar.prototype.setScrollHeight = function (height, force) {\n if (this.pageHeight === height && !force)\n return;\n this.pageHeight = height;\n this.thumbHeight = this.slideHeight * this.viewHeight / this.pageHeight;\n if (this.thumbHeight > this.slideHeight)\n this.thumbHeight = this.slideHeight;\n if (this.thumbHeight < 15)\n this.thumbHeight = 15;\n this.inner.style.height = this.thumbHeight + \"px\";\n if (this.scrollTop > (this.pageHeight - this.viewHeight)) {\n this.scrollTop = (this.pageHeight - this.viewHeight);\n if (this.scrollTop < 0)\n this.scrollTop = 0;\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n };\n VScrollBar.prototype.setScrollTop = function (scrollTop) {\n this.scrollTop = scrollTop;\n if (scrollTop < 0)\n scrollTop = 0;\n this.thumbTop = scrollTop * (this.slideHeight - this.thumbHeight) / (this.pageHeight - this.viewHeight);\n this.inner.style.top = this.thumbTop + \"px\";\n };\n return VScrollBar;\n}(ScrollBar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n __extends(HScrollBar, _super);\n function HScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-h') || this;\n _this.scrollLeft = 0;\n _this.scrollWidth = 0;\n _this.height = _this.HScrollHeight;\n _this.inner.style.height = _this.element.style.height = (_this.height || 12) + \"px\";\n _this.renderer = renderer;\n return _this;\n }\n HScrollBar.prototype.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageX = e.clientX;\n var onMouseMove = function (e) {\n mousePageX = e.clientX;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startX = e.clientX;\n var startLeft = this.thumbLeft;\n var onScrollInterval = function () {\n if (mousePageX === undefined)\n return;\n var scrollLeft = self.scrollLeftFromThumbLeft(startLeft + mousePageX - startX);\n if (scrollLeft === self.scrollLeft)\n return;\n self._emit(\"scroll\", { data: scrollLeft });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var left = e.clientX - this.element.getBoundingClientRect().left - this.thumbWidth / 2;\n this._emit(\"scroll\", { data: this.scrollLeftFromThumbLeft(left) });\n return event.preventDefault(e);\n };\n HScrollBar.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n HScrollBar.prototype.scrollLeftFromThumbLeft = function (thumbLeft) {\n var scrollLeft = thumbLeft * (this.pageWidth - this.viewWidth) / (this.slideWidth - this.thumbWidth);\n scrollLeft = scrollLeft >> 0;\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n else if (scrollLeft > this.pageWidth - this.viewWidth) {\n scrollLeft = this.pageWidth - this.viewWidth;\n }\n return scrollLeft;\n };\n HScrollBar.prototype.setWidth = function (width) {\n this.width = Math.max(0, width);\n this.element.style.width = this.width + \"px\";\n this.slideWidth = this.width;\n this.viewWidth = this.width;\n this.setScrollWidth(this.pageWidth, true);\n };\n HScrollBar.prototype.setScrollWidth = function (width, force) {\n if (this.pageWidth === width && !force)\n return;\n this.pageWidth = width;\n this.thumbWidth = this.slideWidth * this.viewWidth / this.pageWidth;\n if (this.thumbWidth > this.slideWidth)\n this.thumbWidth = this.slideWidth;\n if (this.thumbWidth < 15)\n this.thumbWidth = 15;\n this.inner.style.width = this.thumbWidth + \"px\";\n if (this.scrollLeft > (this.pageWidth - this.viewWidth)) {\n this.scrollLeft = (this.pageWidth - this.viewWidth);\n if (this.scrollLeft < 0)\n this.scrollLeft = 0;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n };\n HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n this.scrollLeft = scrollLeft;\n if (scrollLeft < 0)\n scrollLeft = 0;\n this.thumbLeft = scrollLeft * (this.slideWidth - this.thumbWidth) / (this.pageWidth - this.viewWidth);\n this.inner.style.left = (this.thumbLeft) + \"px\";\n };\n return HScrollBar;\n}(ScrollBar));\nHScrollBar.prototype.setInnerWidth = HScrollBar.prototype.setScrollWidth;\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar event = require(\"./lib/event\");\nvar RenderLoop = /** @class */ (function () {\n function RenderLoop(onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.$recursionLimit = 2;\n this.window = win || window;\n var _self = this;\n this._flush = function (ts) {\n _self.pending = false;\n var changes = _self.changes;\n if (changes) {\n event.blockIdle(100);\n _self.changes = 0;\n _self.onRender(changes);\n }\n if (_self.changes) {\n if (_self.$recursionLimit-- < 0)\n return;\n _self.schedule();\n }\n else {\n _self.$recursionLimit = 2;\n }\n };\n }\n RenderLoop.prototype.schedule = function (change) {\n this.changes = this.changes | change;\n if (this.changes && !this.pending) {\n event.nextFrame(this._flush);\n this.pending = true;\n }\n };\n RenderLoop.prototype.clear = function (change) {\n var changes = this.changes;\n this.changes = 0;\n return changes;\n };\n return RenderLoop;\n}());\nexports.RenderLoop = RenderLoop;\n\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CHAR_COUNT = 512;\nvar USE_OBSERVER = typeof ResizeObserver == \"function\";\nvar L = 200;\nvar FontMetrics = /** @class */ (function () {\n function FontMetrics(parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n this.$measureNode.textContent = lang.stringRepeat(\"X\", CHAR_COUNT);\n this.$characterSize = { width: 0, height: 0 };\n if (USE_OBSERVER)\n this.$addObserver();\n else\n this.checkForSizeChanges();\n }\n FontMetrics.prototype.$setMeasureNodeStyles = function (style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n }\n else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n FontMetrics.prototype.checkForSizeChanges = function (size) {\n if (size === undefined)\n size = this.$measureSizes();\n if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n this.$measureNode.style.fontWeight = \"bold\";\n var boldSize = this.$measureSizes();\n this.$measureNode.style.fontWeight = \"\";\n this.$characterSize = size;\n this.charSizes = Object.create(null);\n this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n this._emit(\"changeCharacterSize\", { data: size });\n }\n };\n FontMetrics.prototype.$addObserver = function () {\n var self = this;\n this.$observer = new window.ResizeObserver(function (e) {\n self.checkForSizeChanges();\n });\n this.$observer.observe(this.$measureNode);\n };\n FontMetrics.prototype.$pollSizeChanges = function () {\n if (this.$pollSizeChangesTimer || this.$observer)\n return this.$pollSizeChangesTimer;\n var self = this;\n return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n self.checkForSizeChanges();\n event.onIdle(cb, 500);\n }, 500);\n };\n FontMetrics.prototype.setPolling = function (val) {\n if (val) {\n this.$pollSizeChanges();\n }\n else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n FontMetrics.prototype.$measureSizes = function (node) {\n var size = {\n height: (node || this.$measureNode).clientHeight,\n width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n };\n if (size.width === 0 || size.height === 0)\n return null;\n return size;\n };\n FontMetrics.prototype.$measureCharWidth = function (ch) {\n this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\n };\n FontMetrics.prototype.getCharacterWidth = function (ch) {\n var w = this.charSizes[ch];\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n return w;\n };\n FontMetrics.prototype.destroy = function () {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$observer)\n this.$observer.disconnect();\n if (this.el && this.el.parentNode)\n this.el.parentNode.removeChild(this.el);\n };\n FontMetrics.prototype.$getZoom = function (element) {\n if (!element || !element.parentElement)\n return 1;\n return (window.getComputedStyle(element).zoom || 1) * this.$getZoom(element.parentElement);\n };\n FontMetrics.prototype.$initTransformMeasureNodes = function () {\n var t = function (t, l) {\n return [\"div\", {\n style: \"position: absolute;top:\" + t + \"px;left:\" + l + \"px;\"\n }];\n };\n this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n };\n FontMetrics.prototype.transformCoordinates = function (clientPos, elPos) {\n if (clientPos) {\n var zoom = this.$getZoom(this.el);\n clientPos = mul(1 / zoom, clientPos);\n }\n function solve(l1, l2, r) {\n var det = l1[1] * l2[0] - l1[0] * l2[1];\n return [\n (-l2[1] * r[0] + l2[0] * r[1]) / det,\n (+l1[1] * r[0] - l1[0] * r[1]) / det\n ];\n }\n function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; }\n function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; }\n function mul(a, b) { return [a * b[0], a * b[1]]; }\n if (!this.els)\n this.$initTransformMeasureNodes();\n function p(el) {\n var r = el.getBoundingClientRect();\n return [r.left, r.top];\n }\n var a = p(this.els[0]);\n var b = p(this.els[1]);\n var c = p(this.els[2]);\n var d = p(this.els[3]);\n var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n var m1 = mul(1 + h[0], sub(b, a));\n var m2 = mul(1 + h[1], sub(c, a));\n if (elPos) {\n var x = elPos;\n var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n var ut = add(mul(x[0], m1), mul(x[1], m2));\n return add(mul(1 / k / L, ut), a);\n }\n var u = sub(clientPos, a);\n var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n return mul(L, f);\n };\n return FontMetrics;\n}());\nFontMetrics.prototype.$characterSize = { width: 0, height: 0 };\noop.implement(FontMetrics.prototype, EventEmitter);\nexports.FontMetrics = FontMetrics;\n\n});\n\nace.define(\"ace/css/editor-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){/*\nstyles = []\nfor (var i = 1; i < 16; i++) {\n styles.push(\".ace_br\" + i + \"{\" + (\n [\"top-left\", \"top-right\", \"bottom-right\", \"bottom-left\"]\n ).map(function(x, j) {\n return i & (1< .ace_line, .ace_text-layer > .ace_line_group {\\n contain: style size layout;\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n}\\n\\n.ace_hidpi .ace_text-layer,\\n.ace_hidpi .ace_gutter-layer,\\n.ace_hidpi .ace_content,\\n.ace_hidpi .ace_gutter {\\n contain: strict;\\n}\\n.ace_hidpi .ace_text-layer > .ace_line, \\n.ace_hidpi .ace_text-layer > .ace_line_group {\\n contain: strict;\\n}\\n\\n.ace_cjk {\\n display: inline-block;\\n text-align: center;\\n}\\n\\n.ace_cursor-layer {\\n z-index: 4;\\n}\\n\\n.ace_cursor {\\n z-index: 4;\\n position: absolute;\\n box-sizing: border-box;\\n border-left: 2px solid;\\n /* workaround for smooth cursor repaintng whole screen in chrome */\\n transform: translatez(0);\\n}\\n\\n.ace_multiselect .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_slim-cursors .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_overwrite-cursors .ace_cursor {\\n border-left-width: 0;\\n border-bottom: 1px solid;\\n}\\n\\n.ace_hidden-cursors .ace_cursor {\\n opacity: 0.2;\\n}\\n\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\n opacity: 0;\\n}\\n\\n.ace_smooth-blinking .ace_cursor {\\n transition: opacity 0.18s;\\n}\\n\\n.ace_animate-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: step-end;\\n animation-name: blink-ace-animate;\\n animation-iteration-count: infinite;\\n}\\n\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: ease-in-out;\\n animation-name: blink-ace-animate-smooth;\\n}\\n \\n@keyframes blink-ace-animate {\\n from, to { opacity: 1; }\\n 60% { opacity: 0; }\\n}\\n\\n@keyframes blink-ace-animate-smooth {\\n from, to { opacity: 1; }\\n 45% { opacity: 1; }\\n 60% { opacity: 0; }\\n 85% { opacity: 0; }\\n}\\n\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\n position: absolute;\\n z-index: 3;\\n}\\n\\n.ace_marker-layer .ace_selection {\\n position: absolute;\\n z-index: 5;\\n}\\n\\n.ace_marker-layer .ace_bracket {\\n position: absolute;\\n z-index: 6;\\n}\\n\\n.ace_marker-layer .ace_error_bracket {\\n position: absolute;\\n border-bottom: 1px solid #DE5555;\\n border-radius: 0;\\n}\\n\\n.ace_marker-layer .ace_active-line {\\n position: absolute;\\n z-index: 2;\\n}\\n\\n.ace_marker-layer .ace_selected-word {\\n position: absolute;\\n z-index: 4;\\n box-sizing: border-box;\\n}\\n\\n.ace_line .ace_fold {\\n box-sizing: border-box;\\n\\n display: inline-block;\\n height: 11px;\\n margin-top: -2px;\\n vertical-align: middle;\\n\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\n background-repeat: no-repeat, repeat-x;\\n background-position: center center, top left;\\n color: transparent;\\n\\n border: 1px solid black;\\n border-radius: 2px;\\n\\n cursor: pointer;\\n pointer-events: auto;\\n}\\n\\n.ace_dark .ace_fold {\\n}\\n\\n.ace_fold:hover{\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_tooltip {\\n background-color: #f5f5f5;\\n border: 1px solid gray;\\n border-radius: 1px;\\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\n color: black;\\n max-width: 100%;\\n padding: 3px 4px;\\n position: fixed;\\n z-index: 999999;\\n box-sizing: border-box;\\n cursor: default;\\n white-space: pre;\\n word-wrap: break-word;\\n line-height: normal;\\n font-style: normal;\\n font-weight: normal;\\n letter-spacing: normal;\\n pointer-events: none;\\n}\\n\\n.ace_tooltip.ace_dark {\\n background-color: #636363;\\n color: #fff;\\n}\\n\\n.ace_tooltip:focus {\\n outline: 1px solid #5E9ED6;\\n}\\n\\n.ace_icon {\\n display: inline-block;\\n width: 18px;\\n vertical-align: top;\\n}\\n\\n.ace_icon_svg {\\n display: inline-block;\\n width: 12px;\\n vertical-align: top;\\n -webkit-mask-repeat: no-repeat;\\n -webkit-mask-size: 12px;\\n -webkit-mask-position: center;\\n}\\n\\n.ace_folding-enabled > .ace_gutter-cell, .ace_folding-enabled > .ace_gutter-cell_svg-icons {\\n padding-right: 13px;\\n}\\n\\n.ace_fold-widget {\\n box-sizing: border-box;\\n\\n margin: 0 -12px 0 1px;\\n display: none;\\n width: 11px;\\n vertical-align: top;\\n\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\n background-repeat: no-repeat;\\n background-position: center;\\n\\n border-radius: 3px;\\n \\n border: 1px solid transparent;\\n cursor: pointer;\\n}\\n\\n.ace_folding-enabled .ace_fold-widget {\\n display: inline-block; \\n}\\n\\n.ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\n}\\n\\n.ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\n}\\n\\n.ace_fold-widget:hover {\\n border: 1px solid rgba(0, 0, 0, 0.3);\\n background-color: rgba(255, 255, 255, 0.2);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\n}\\n\\n.ace_fold-widget:active {\\n border: 1px solid rgba(0, 0, 0, 0.4);\\n background-color: rgba(0, 0, 0, 0.05);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\n}\\n/**\\n * Dark version for fold widgets\\n */\\n.ace_dark .ace_fold-widget {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget:hover {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.ace_dark .ace_fold-widget:active {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n}\\n\\n.ace_inline_button {\\n border: 1px solid lightgray;\\n display: inline-block;\\n margin: -1px 8px;\\n padding: 0 5px;\\n pointer-events: auto;\\n cursor: pointer;\\n}\\n.ace_inline_button:hover {\\n border-color: gray;\\n background: rgba(200,200,200,0.2);\\n display: inline-block;\\n pointer-events: auto;\\n}\\n\\n.ace_fold-widget.ace_invalid {\\n background-color: #FFB4B4;\\n border-color: #DE5555;\\n}\\n\\n.ace_fade-fold-widgets .ace_fold-widget {\\n transition: opacity 0.4s ease 0.05s;\\n opacity: 0;\\n}\\n\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\n transition: opacity 0.05s ease 0.05s;\\n opacity:1;\\n}\\n\\n.ace_underline {\\n text-decoration: underline;\\n}\\n\\n.ace_bold {\\n font-weight: bold;\\n}\\n\\n.ace_nobold .ace_bold {\\n font-weight: normal;\\n}\\n\\n.ace_italic {\\n font-style: italic;\\n}\\n\\n\\n.ace_error-marker {\\n background-color: rgba(255, 0, 0,0.2);\\n position: absolute;\\n z-index: 9;\\n}\\n\\n.ace_highlight-marker {\\n background-color: rgba(255, 255, 0,0.2);\\n position: absolute;\\n z-index: 8;\\n}\\n\\n.ace_mobile-menu {\\n position: absolute;\\n line-height: 1.5;\\n border-radius: 4px;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n background: white;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #dcdcdc;\\n color: black;\\n}\\n.ace_dark > .ace_mobile-menu {\\n background: #333;\\n color: #ccc;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #444;\\n\\n}\\n.ace_mobile-button {\\n padding: 2px;\\n cursor: pointer;\\n overflow: hidden;\\n}\\n.ace_mobile-button:hover {\\n background-color: #eee;\\n opacity:1;\\n}\\n.ace_mobile-button:active {\\n background-color: #ddd;\\n}\\n\\n.ace_placeholder {\\n font-family: arial;\\n transform: scale(0.9);\\n transform-origin: left;\\n white-space: pre;\\n opacity: 0.7;\\n margin: 0 10px;\\n}\\n\\n.ace_ghost_text {\\n opacity: 0.5;\\n font-style: italic;\\n white-space: pre;\\n}\\n\\n.ace_screenreader-only {\\n position:absolute;\\n left:-10000px;\\n top:auto;\\n width:1px;\\n height:1px;\\n overflow:hidden;\\n}\";\n\n});\n\nace.define(\"ace/layer/decorators\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Decorator = /** @class */ (function () {\n function Decorator(parent, renderer) {\n this.canvas = dom.createElement(\"canvas\");\n this.renderer = renderer;\n this.pixelRatio = 1;\n this.maxHeight = renderer.layerConfig.maxHeight;\n this.lineHeight = renderer.layerConfig.lineHeight;\n this.canvasHeight = parent.parent.scrollHeight;\n this.heightRatio = this.canvasHeight / this.maxHeight;\n this.canvasWidth = parent.width;\n this.minDecorationHeight = (2 * this.pixelRatio) | 0;\n this.halfMinDecorationHeight = (this.minDecorationHeight / 2) | 0;\n this.canvas.width = this.canvasWidth;\n this.canvas.height = this.canvasHeight;\n this.canvas.style.top = 0 + \"px\";\n this.canvas.style.right = 0 + \"px\";\n this.canvas.style.zIndex = 7 + \"px\";\n this.canvas.style.position = \"absolute\";\n this.colors = {};\n this.colors.dark = {\n \"error\": \"rgba(255, 18, 18, 1)\",\n \"warning\": \"rgba(18, 136, 18, 1)\",\n \"info\": \"rgba(18, 18, 136, 1)\"\n };\n this.colors.light = {\n \"error\": \"rgb(255,51,51)\",\n \"warning\": \"rgb(32,133,72)\",\n \"info\": \"rgb(35,68,138)\"\n };\n parent.element.appendChild(this.canvas);\n }\n Decorator.prototype.$updateDecorators = function (config) {\n var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light;\n if (config) {\n this.maxHeight = config.maxHeight;\n this.lineHeight = config.lineHeight;\n this.canvasHeight = config.height;\n var allLineHeight = (config.lastRow + 1) * this.lineHeight;\n if (allLineHeight < this.canvasHeight) {\n this.heightRatio = 1;\n }\n else {\n this.heightRatio = this.canvasHeight / this.maxHeight;\n }\n }\n var ctx = this.canvas.getContext(\"2d\");\n function compare(a, b) {\n if (a.priority < b.priority)\n return -1;\n if (a.priority > b.priority)\n return 1;\n return 0;\n }\n var annotations = this.renderer.session.$annotations;\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n if (annotations) {\n var priorities = {\n \"info\": 1,\n \"warning\": 2,\n \"error\": 3\n };\n annotations.forEach(function (item) {\n item.priority = priorities[item.type] || null;\n });\n annotations = annotations.sort(compare);\n var foldData = this.renderer.session.$foldData;\n for (var i = 0; i < annotations.length; i++) {\n var row = annotations[i].row;\n var compensateFold = this.compensateFoldRows(row, foldData);\n var currentY = Math.round((row - compensateFold) * this.lineHeight * this.heightRatio);\n var y1 = Math.round(((row - compensateFold) * this.lineHeight * this.heightRatio));\n var y2 = Math.round((((row - compensateFold) * this.lineHeight + this.lineHeight) * this.heightRatio));\n var height = y2 - y1;\n if (height < this.minDecorationHeight) {\n var yCenter = ((y1 + y2) / 2) | 0;\n if (yCenter < this.halfMinDecorationHeight) {\n yCenter = this.halfMinDecorationHeight;\n }\n else if (yCenter + this.halfMinDecorationHeight > this.canvasHeight) {\n yCenter = this.canvasHeight - this.halfMinDecorationHeight;\n }\n y1 = Math.round(yCenter - this.halfMinDecorationHeight);\n y2 = Math.round(yCenter + this.halfMinDecorationHeight);\n }\n ctx.fillStyle = colors[annotations[i].type] || null;\n ctx.fillRect(0, currentY, this.canvasWidth, y2 - y1);\n }\n }\n var cursor = this.renderer.session.selection.getCursor();\n if (cursor) {\n var compensateFold = this.compensateFoldRows(cursor.row, foldData);\n var currentY = Math.round((cursor.row - compensateFold) * this.lineHeight * this.heightRatio);\n ctx.fillStyle = \"rgba(0, 0, 0, 0.5)\";\n ctx.fillRect(0, currentY, this.canvasWidth, 2);\n }\n };\n Decorator.prototype.compensateFoldRows = function (row, foldData) {\n var compensateFold = 0;\n if (foldData && foldData.length > 0) {\n for (var j = 0; j < foldData.length; j++) {\n if (row > foldData[j].start.row && row < foldData[j].end.row) {\n compensateFold += row - foldData[j].start.row;\n }\n else if (row >= foldData[j].end.row) {\n compensateFold += foldData[j].end.row - foldData[j].start.row;\n }\n }\n }\n return compensateFold;\n };\n return Decorator;\n}());\noop.implement(Decorator.prototype, EventEmitter);\nexports.Decorator = Decorator;\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/scrollbar_custom\",\"ace/scrollbar_custom\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/css/editor-css\",\"ace/layer/decorators\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar config = require(\"./config\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar HScrollBarCustom = require(\"./scrollbar_custom\").HScrollBar;\nvar VScrollBarCustom = require(\"./scrollbar_custom\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = require(\"./css/editor-css\");\nvar Decorator = require(\"./layer/decorators\").Decorator;\nvar useragent = require(\"./lib/useragent\");\ndom.importCssString(editorCss, \"ace_editor.css\", false);\nvar VirtualRenderer = /** @class */ (function () {\n function VirtualRenderer(container, theme) {\n var _self = this;\n this.container = container || dom.createElement(\"div\");\n dom.addCssClass(this.container, \"ace_editor\");\n if (dom.HI_DPI)\n dom.addCssClass(this.container, \"ace_hidpi\");\n this.setTheme(theme);\n if (config.get(\"useStrictCSP\") == null)\n config.set(\"useStrictCSP\", false);\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n this.$gutter.setAttribute(\"aria-hidden\", true);\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n this.container.appendChild(this.scroller);\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n this.$markerBack = new MarkerLayer(this.content);\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n this.$markerFront = new MarkerLayer(this.content);\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n this.scrollBar =\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n this.scrollTop = 0;\n this.scrollLeft = 0;\n this.cursorPos = {\n row: 0,\n column: 0\n };\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.on(\"changeCharacterSize\", function (e) {\n _self.updateCharacterSize();\n _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n _self._signal(\"changeCharacterSize\", e);\n });\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n this.layerConfig = {\n width: 1,\n padding: 0,\n firstRow: 0,\n firstRowScreen: 0,\n lastRow: 0,\n lineHeight: 0,\n characterWidth: 0,\n minHeight: 1,\n maxHeight: 1,\n offset: 0,\n height: 1,\n gutterOffset: 1\n };\n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.margin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.$keepTextAreaAtCursor = !useragent.isIOS;\n this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView);\n this.$loop.schedule(this.CHANGE_FULL);\n this.updateCharacterSize();\n this.setPadding(4);\n this.$addResizeObserver();\n config.resetOptions(this);\n config._signal(\"renderer\", this);\n }\n VirtualRenderer.prototype.updateCharacterSize = function () {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n this.layerConfig.characterWidth =\n this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight =\n this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n dom.setStyle(this.scroller.style, \"line-height\", this.lineHeight + \"px\");\n };\n VirtualRenderer.prototype.setSession = function (session) {\n if (this.session)\n this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n session.setScrollTop(-this.scrollMargin.top);\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session)\n return;\n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n VirtualRenderer.prototype.updateLines = function (firstRow, lastRow, force) {\n if (lastRow === undefined)\n lastRow = Infinity;\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n }\n else {\n if (this.$changedLines.firstRow > firstRow)\n this.$changedLines.firstRow = firstRow;\n if (this.$changedLines.lastRow < lastRow)\n this.$changedLines.lastRow = lastRow;\n }\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force)\n this.$changedLines.lastRow = this.layerConfig.lastRow;\n else\n return;\n }\n if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n VirtualRenderer.prototype.onChangeNewLineMode = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n VirtualRenderer.prototype.onChangeTabSize = function () {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n VirtualRenderer.prototype.updateText = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n VirtualRenderer.prototype.updateFull = function (force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n VirtualRenderer.prototype.updateFontSize = function () {\n this.$textLayer.checkForSizeChanges();\n };\n VirtualRenderer.prototype.$updateSizeAsync = function () {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n VirtualRenderer.prototype.onResize = function (force, gutterWidth, width, height) {\n if (this.resizing > 2)\n return;\n else if (this.resizing > 0)\n this.resizing++;\n else\n this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height)\n height = el.clientHeight || el.scrollHeight;\n if (!width)\n width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n if (this.$resizeTimer)\n this.$resizeTimer.cancel();\n if (!this.$size.scrollerHeight || (!width && !height))\n return this.resizing = 0;\n if (force)\n this.$gutterLayer.$padding = null;\n if (force)\n this.$renderChanges(changes | this.$changes, true);\n else\n this.$loop.schedule(changes | this.$changes);\n if (this.resizing)\n this.resizing = 0;\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n if (this.$customScrollbar) {\n this.$updateCustomScrollbar(true);\n }\n };\n VirtualRenderer.prototype.$updateCachedSize = function (force, gutterWidth, width, height) {\n height -= (this.$extraHeight || 0);\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n size.scrollerHeight = size.height;\n if (this.$horizScroll)\n size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.setHeight(size.scrollerHeight);\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n changes = changes | this.CHANGE_SCROLL;\n }\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n if (gutterWidth == null)\n gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n this.gutterWidth = gutterWidth;\n dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n var right = this.scrollBarV.getWidth() + \"px\";\n dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n this.scrollBarH.setWidth(size.scrollerWidth);\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n changes |= this.CHANGE_FULL;\n }\n }\n size.$dirty = !width || !height;\n if (changes)\n this._signal(\"resize\", oldSize);\n return changes;\n };\n VirtualRenderer.prototype.onGutterResize = function (width) {\n var gutterWidth = this.$showGutter ? width : 0;\n if (gutterWidth != this.gutterWidth)\n this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else {\n this.$computeLayerConfig();\n }\n };\n VirtualRenderer.prototype.adjustWrapLimit = function () {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth);\n return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n };\n VirtualRenderer.prototype.setAnimatedScroll = function (shouldAnimate) {\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n VirtualRenderer.prototype.getAnimatedScroll = function () {\n return this.$animatedScroll;\n };\n VirtualRenderer.prototype.setShowInvisibles = function (showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n VirtualRenderer.prototype.getShowInvisibles = function () {\n return this.getOption(\"showInvisibles\");\n };\n VirtualRenderer.prototype.getDisplayIndentGuides = function () {\n return this.getOption(\"displayIndentGuides\");\n };\n VirtualRenderer.prototype.setDisplayIndentGuides = function (display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n VirtualRenderer.prototype.getHighlightIndentGuides = function () {\n return this.getOption(\"highlightIndentGuides\");\n };\n VirtualRenderer.prototype.setHighlightIndentGuides = function (highlight) {\n this.setOption(\"highlightIndentGuides\", highlight);\n };\n VirtualRenderer.prototype.setShowPrintMargin = function (showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n VirtualRenderer.prototype.getShowPrintMargin = function () {\n return this.getOption(\"showPrintMargin\");\n };\n VirtualRenderer.prototype.setPrintMarginColumn = function (showPrintMargin) {\n this.setOption(\"printMarginColumn\", showPrintMargin);\n };\n VirtualRenderer.prototype.getPrintMarginColumn = function () {\n return this.getOption(\"printMarginColumn\");\n };\n VirtualRenderer.prototype.getShowGutter = function () {\n return this.getOption(\"showGutter\");\n };\n VirtualRenderer.prototype.setShowGutter = function (show) {\n return this.setOption(\"showGutter\", show);\n };\n VirtualRenderer.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n VirtualRenderer.prototype.setFadeFoldWidgets = function (show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n VirtualRenderer.prototype.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n VirtualRenderer.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n VirtualRenderer.prototype.$updatePrintMargin = function () {\n if (!this.$showPrintMargin && !this.$printMarginEl)\n return;\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n var style = this.$printMarginEl.style;\n style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n if (this.session && this.session.$wrap == -1)\n this.adjustWrapLimit();\n };\n VirtualRenderer.prototype.getContainerElement = function () {\n return this.container;\n };\n VirtualRenderer.prototype.getMouseEventTarget = function () {\n return this.scroller;\n };\n VirtualRenderer.prototype.getTextAreaContainer = function () {\n return this.container;\n };\n VirtualRenderer.prototype.$moveTextAreaToCursor = function () {\n if (this.$isMousePressed)\n return;\n var style = this.textarea.style;\n var composition = this.$composition;\n if (!this.$keepTextAreaAtCursor && !composition) {\n dom.translate(this.textarea, -100, 0);\n return;\n }\n var pixelPos = this.$cursorLayer.$pixelPos;\n if (!pixelPos)\n return;\n if (composition && composition.markerRange)\n pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n var config = this.layerConfig;\n var posTop = pixelPos.top;\n var posLeft = pixelPos.left;\n posTop -= config.offset;\n var h = composition && composition.useTextareaForIME || useragent.isMobile ? this.lineHeight : 1;\n if (posTop < 0 || posTop > config.height - h) {\n dom.translate(this.textarea, 0, 0);\n return;\n }\n var w = 1;\n var maxTop = this.$size.height - h;\n if (!composition) {\n posTop += this.lineHeight;\n }\n else {\n if (composition.useTextareaForIME) {\n var val = this.textarea.value;\n w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]);\n }\n else {\n posTop += this.lineHeight + 2;\n }\n }\n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w)\n posLeft = this.$size.scrollerWidth - w;\n posLeft += this.gutterWidth + this.margin.left;\n dom.setStyle(style, \"height\", h + \"px\");\n dom.setStyle(style, \"width\", w + \"px\");\n dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop));\n };\n VirtualRenderer.prototype.getFirstVisibleRow = function () {\n return this.layerConfig.firstRow;\n };\n VirtualRenderer.prototype.getFirstFullyVisibleRow = function () {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n VirtualRenderer.prototype.getLastFullyVisibleRow = function () {\n var config = this.layerConfig;\n var lastRow = config.lastRow;\n var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n return lastRow - 1;\n return lastRow;\n };\n VirtualRenderer.prototype.getLastVisibleRow = function () {\n return this.layerConfig.lastRow;\n };\n VirtualRenderer.prototype.setPadding = function (padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n VirtualRenderer.prototype.setScrollMargin = function (top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session)\n this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n VirtualRenderer.prototype.setMargin = function (top, bottom, left, right) {\n var sm = this.margin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n this.updateFull();\n };\n VirtualRenderer.prototype.getHScrollBarAlwaysVisible = function () {\n return this.$hScrollBarAlwaysVisible;\n };\n VirtualRenderer.prototype.setHScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n VirtualRenderer.prototype.getVScrollBarAlwaysVisible = function () {\n return this.$vScrollBarAlwaysVisible;\n };\n VirtualRenderer.prototype.setVScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n VirtualRenderer.prototype.$updateScrollBarV = function () {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n VirtualRenderer.prototype.$updateScrollBarH = function () {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n VirtualRenderer.prototype.freeze = function () {\n this.$frozen = true;\n };\n VirtualRenderer.prototype.unfreeze = function () {\n this.$frozen = false;\n };\n VirtualRenderer.prototype.$renderChanges = function (changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n this.$changes |= changes;\n return;\n }\n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n this._signal(\"beforeRender\", changes);\n if (this.session && this.session.$bidiHandler)\n this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n var config = this.layerConfig;\n if (changes & this.CHANGE_FULL ||\n changes & this.CHANGE_SIZE ||\n changes & this.CHANGE_TEXT ||\n changes & this.CHANGE_LINES ||\n changes & this.CHANGE_SCROLL ||\n changes & this.CHANGE_H_SCROLL) {\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n var st = this.scrollTop + (config.firstRow - Math.max(this.layerConfig.firstRow, 0)) * this.lineHeight;\n if (st > 0) {\n this.scrollTop = st;\n changes = changes | this.CHANGE_SCROLL;\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n }\n }\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL)\n this.$updateScrollBarH();\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n var width = config.width + 2 * this.$padding + \"px\";\n var height = config.minHeight + \"px\";\n dom.setStyle(this.content.style, \"width\", width);\n dom.setStyle(this.content.style, \"height\", height);\n }\n if (changes & this.CHANGE_H_SCROLL) {\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller \" : \"ace_scroller ace_scroll-left \";\n if (this.enableKeyboardAccessibility)\n this.scroller.className += this.keyboardFocusClassName;\n }\n if (changes & this.CHANGE_FULL) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_SCROLL) {\n this.$changedLines = null;\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n this.$textLayer.update(config);\n else\n this.$textLayer.scrollLines(config);\n if (this.$showGutter) {\n if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES)\n this.$gutterLayer.update(config);\n else\n this.$gutterLayer.scrollLines(config);\n }\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_TEXT) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_CURSOR) {\n if (this.$highlightGutterLine)\n this.$gutterLayer.updateLineHighlight(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n this._signal(\"afterRender\", changes);\n };\n VirtualRenderer.prototype.$autosize = function () {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll)\n desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n desiredHeight = this.$maxPixelHeight;\n var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n var vScroll = !hideScrollbars && height > maxHeight;\n if (desiredHeight != this.desiredHeight ||\n this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n this._signal(\"autosize\");\n }\n };\n VirtualRenderer.prototype.$computeLayerConfig = function () {\n var session = this.session;\n var size = this.$size;\n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n var longestLine = this.$getLongestLine();\n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n var hScrollChanged = this.$horizScroll !== horizScroll;\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n if (this.$maxLines && this.lineHeight > 1)\n this.$autosize();\n var minHeight = size.scrollerHeight + this.lineHeight;\n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n : 0;\n maxHeight += scrollPastEnd;\n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var offset = this.scrollTop % this.lineHeight;\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n firstRowHeight;\n offset = this.scrollTop - firstRowScreen * lineHeight;\n var changes = 0;\n if (this.layerConfig.width != longestLine || hScrollChanged)\n changes = this.CHANGE_H_SCROLL;\n if (hScrollChanged || vScrollChanged) {\n changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n this._signal(\"scrollbarVisibilityChanged\");\n if (vScrollChanged)\n longestLine = this.$getLongestLine();\n }\n this.layerConfig = {\n width: longestLine,\n padding: this.$padding,\n firstRow: firstRow,\n firstRowScreen: firstRowScreen,\n lastRow: lastRow,\n lineHeight: lineHeight,\n characterWidth: this.characterWidth,\n minHeight: minHeight,\n maxHeight: maxHeight,\n offset: offset,\n gutterOffset: lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height: this.$size.scrollerHeight\n };\n if (this.session.$bidiHandler)\n this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n return changes;\n };\n VirtualRenderer.prototype.$updateLines = function () {\n if (!this.$changedLines)\n return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n var layerConfig = this.layerConfig;\n if (firstRow > layerConfig.lastRow + 1) {\n return;\n }\n if (lastRow < layerConfig.firstRow) {\n return;\n }\n if (lastRow === Infinity) {\n if (this.$showGutter)\n this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n VirtualRenderer.prototype.$getLongestLine = function () {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH)\n charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n VirtualRenderer.prototype.updateFrontMarkers = function () {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n VirtualRenderer.prototype.updateBackMarkers = function () {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n VirtualRenderer.prototype.addGutterDecoration = function (row, className) {\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n VirtualRenderer.prototype.removeGutterDecoration = function (row, className) {\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n VirtualRenderer.prototype.updateBreakpoints = function (rows) {\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n VirtualRenderer.prototype.setAnnotations = function (annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n VirtualRenderer.prototype.updateCursor = function () {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n VirtualRenderer.prototype.hideCursor = function () {\n this.$cursorLayer.hideCursor();\n };\n VirtualRenderer.prototype.showCursor = function () {\n this.$cursorLayer.showCursor();\n };\n VirtualRenderer.prototype.scrollSelectionIntoView = function (anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n VirtualRenderer.prototype.scrollCursorIntoView = function (cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0)\n return;\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var newLeft = pos.left;\n var newTop = pos.top;\n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n if (this.$scrollAnimation) {\n this.$stopAnimation = true;\n }\n var currentTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n if (currentTop + topMargin > newTop) {\n if (offset && currentTop + topMargin > newTop + this.lineHeight)\n newTop -= offset * this.$size.scrollerHeight;\n if (newTop === 0)\n newTop = -this.scrollMargin.top;\n this.session.setScrollTop(newTop);\n }\n else if (currentTop + this.$size.scrollerHeight - bottomMargin < newTop + this.lineHeight) {\n if (offset && currentTop + this.$size.scrollerHeight - bottomMargin < newTop - this.lineHeight)\n newTop += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(newTop + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n }\n var currentLeft = this.scrollLeft;\n var twoCharsWidth = 2 * this.layerConfig.characterWidth;\n if (newLeft - twoCharsWidth < currentLeft) {\n newLeft -= twoCharsWidth;\n if (newLeft < this.$padding + twoCharsWidth) {\n newLeft = -this.scrollMargin.left;\n }\n this.session.setScrollLeft(newLeft);\n }\n else {\n newLeft += twoCharsWidth;\n if (currentLeft + this.$size.scrollerWidth < newLeft + this.characterWidth) {\n this.session.setScrollLeft(Math.round(newLeft + this.characterWidth - this.$size.scrollerWidth));\n }\n else if (currentLeft <= this.$padding && newLeft - currentLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n }\n };\n VirtualRenderer.prototype.getScrollTop = function () {\n return this.session.getScrollTop();\n };\n VirtualRenderer.prototype.getScrollLeft = function () {\n return this.session.getScrollLeft();\n };\n VirtualRenderer.prototype.getScrollTopRow = function () {\n return this.scrollTop / this.lineHeight;\n };\n VirtualRenderer.prototype.getScrollBottomRow = function () {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n VirtualRenderer.prototype.scrollToRow = function (row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n VirtualRenderer.prototype.alignCursor = function (cursor, alignment) {\n if (typeof cursor == \"number\")\n cursor = { row: cursor, column: 0 };\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n this.session.setScrollTop(offset);\n return offset;\n };\n VirtualRenderer.prototype.$calcSteps = function (fromValue, toValue) {\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n var func = function (t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n for (i = 0; i < l; ++i)\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n return steps;\n };\n VirtualRenderer.prototype.scrollToLine = function (line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({ row: line, column: 0 });\n var offset = pos.top;\n if (center)\n offset -= this.$size.scrollerHeight / 2;\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false)\n this.animateScrolling(initialScroll, callback);\n };\n VirtualRenderer.prototype.animateScrolling = function (fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll)\n return;\n var _self = this;\n if (fromValue == toValue)\n return;\n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue)\n return;\n }\n }\n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = { from: fromValue, to: toValue, steps: steps };\n clearInterval(this.$timer);\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n function endAnimation() {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n _self.$stopAnimation = false;\n callback && callback();\n }\n this.$timer = setInterval(function () {\n if (_self.$stopAnimation) {\n endAnimation();\n return;\n }\n if (!_self.session)\n return clearInterval(_self.$timer);\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n }\n else if (toValue != null) {\n _self.session.$scrollTop = -1;\n _self.session.setScrollTop(toValue);\n toValue = null;\n }\n else {\n endAnimation();\n }\n }, 10);\n };\n VirtualRenderer.prototype.scrollToY = function (scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n VirtualRenderer.prototype.scrollToX = function (scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n VirtualRenderer.prototype.scrollTo = function (x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(x);\n };\n VirtualRenderer.prototype.scrollBy = function (deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n VirtualRenderer.prototype.isScrollableBy = function (deltaX, deltaY) {\n if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n - this.layerConfig.width < -1 + this.scrollMargin.right)\n return true;\n };\n VirtualRenderer.prototype.pixelToScreenCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n return { row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX };\n };\n VirtualRenderer.prototype.screenToTextCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n VirtualRenderer.prototype.textToScreenCoordinates = function (row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : Math.round(pos.column * this.characterWidth));\n var y = pos.row * this.lineHeight;\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n VirtualRenderer.prototype.visualizeFocus = function () {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n VirtualRenderer.prototype.visualizeBlur = function () {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n VirtualRenderer.prototype.showComposition = function (composition) {\n this.$composition = composition;\n if (!composition.cssText) {\n composition.cssText = this.textarea.style.cssText;\n }\n if (composition.useTextareaForIME == undefined)\n composition.useTextareaForIME = this.$useTextareaForIME;\n if (this.$useTextareaForIME) {\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n this.$cursorLayer.element.style.display = \"none\";\n }\n else {\n composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n }\n };\n VirtualRenderer.prototype.setCompositionText = function (text) {\n var cursor = this.session.selection.cursor;\n this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n this.$moveTextAreaToCursor();\n };\n VirtualRenderer.prototype.hideComposition = function () {\n if (!this.$composition)\n return;\n if (this.$composition.markerId)\n this.session.removeMarker(this.$composition.markerId);\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = this.$composition.cssText;\n var cursor = this.session.selection.cursor;\n this.removeExtraToken(cursor.row, cursor.column);\n this.$composition = null;\n this.$cursorLayer.element.style.display = \"\";\n };\n VirtualRenderer.prototype.setGhostText = function (text, position) {\n var cursor = this.session.selection.cursor;\n var insertPosition = position || { row: cursor.row, column: cursor.column };\n this.removeGhostText();\n var textLines = text.split(\"\\n\");\n this.addToken(textLines[0], \"ghost_text\", insertPosition.row, insertPosition.column);\n this.$ghostText = {\n text: text,\n position: {\n row: insertPosition.row,\n column: insertPosition.column\n }\n };\n if (textLines.length > 1) {\n this.$ghostTextWidget = {\n text: textLines.slice(1).join(\"\\n\"),\n row: insertPosition.row,\n column: insertPosition.column,\n className: \"ace_ghost_text\"\n };\n this.session.widgetManager.addLineWidget(this.$ghostTextWidget);\n }\n };\n VirtualRenderer.prototype.removeGhostText = function () {\n if (!this.$ghostText)\n return;\n var position = this.$ghostText.position;\n this.removeExtraToken(position.row, position.column);\n if (this.$ghostTextWidget) {\n this.session.widgetManager.removeLineWidget(this.$ghostTextWidget);\n this.$ghostTextWidget = null;\n }\n this.$ghostText = null;\n };\n VirtualRenderer.prototype.addToken = function (text, type, row, column) {\n var session = this.session;\n session.bgTokenizer.lines[row] = null;\n var newToken = { type: type, value: text };\n var tokens = session.getTokens(row);\n if (column == null || !tokens.length) {\n tokens.push(newToken);\n }\n else {\n var l = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (column <= l) {\n var diff = token.value.length - (l - column);\n var before = token.value.slice(0, diff);\n var after = token.value.slice(diff);\n tokens.splice(i, 1, { type: token.type, value: before }, newToken, { type: token.type, value: after });\n break;\n }\n }\n }\n this.updateLines(row, row);\n };\n VirtualRenderer.prototype.removeExtraToken = function (row, column) {\n this.session.bgTokenizer.lines[row] = null;\n this.updateLines(row, row);\n };\n VirtualRenderer.prototype.setTheme = function (theme, cb) {\n var _self = this;\n this.$themeId = theme;\n _self._dispatchEvent('themeChange', { theme: theme });\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n }\n else {\n afterLoad(theme);\n }\n function afterLoad(module) {\n if (_self.$themeId != theme)\n return cb && cb();\n if (!module || !module.cssClass)\n throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n if (module.$id)\n _self.$themeId = module.$id;\n dom.importCssString(module.cssText, module.cssClass, _self.container);\n if (_self.theme)\n dom.removeCssClass(_self.container, _self.theme.cssClass);\n var padding = \"padding\" in module ? module.padding\n : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding)\n _self.setPadding(padding);\n _self.$theme = module.cssClass;\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n if (_self.$size) {\n _self.$size.width = 0;\n _self.$updateSizeAsync();\n }\n _self._dispatchEvent('themeLoaded', { theme: module });\n cb && cb();\n }\n };\n VirtualRenderer.prototype.getTheme = function () {\n return this.$themeId;\n };\n VirtualRenderer.prototype.setStyle = function (style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n VirtualRenderer.prototype.unsetStyle = function (style) {\n dom.removeCssClass(this.container, style);\n };\n VirtualRenderer.prototype.setCursorStyle = function (style) {\n dom.setStyle(this.scroller.style, \"cursor\", style);\n };\n VirtualRenderer.prototype.setMouseCursor = function (cursorStyle) {\n dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n };\n VirtualRenderer.prototype.attachToShadowRoot = function () {\n dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n };\n VirtualRenderer.prototype.destroy = function () {\n this.freeze();\n this.$fontMetrics.destroy();\n this.$cursorLayer.destroy();\n this.removeAllListeners();\n this.container.textContent = \"\";\n this.setOption(\"useResizeObserver\", false);\n };\n VirtualRenderer.prototype.$updateCustomScrollbar = function (val) {\n var _self = this;\n this.$horizScroll = this.$vScroll = null;\n this.scrollBarV.element.remove();\n this.scrollBarH.element.remove();\n if (this.$scrollDecorator) {\n delete this.$scrollDecorator;\n }\n if (val === true) {\n this.scrollBarV = new VScrollBarCustom(this.container, this);\n this.scrollBarH = new HScrollBarCustom(this.container, this);\n this.scrollBarV.setHeight(this.$size.scrollerHeight);\n this.scrollBarH.setWidth(this.$size.scrollerWidth);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n this.$scrollDecorator = new Decorator(this.scrollBarV, this);\n this.$scrollDecorator.$updateDecorators();\n }\n else {\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n }\n };\n VirtualRenderer.prototype.$addResizeObserver = function () {\n if (!window.ResizeObserver || this.$resizeObserver)\n return;\n var self = this;\n this.$resizeTimer = lang.delayedCall(function () {\n if (!self.destroyed)\n self.onResize();\n }, 50);\n this.$resizeObserver = new window.ResizeObserver(function (e) {\n var w = e[0].contentRect.width;\n var h = e[0].contentRect.height;\n if (Math.abs(self.$size.width - w) > 1\n || Math.abs(self.$size.height - h) > 1) {\n self.$resizeTimer.delay();\n }\n else {\n self.$resizeTimer.cancel();\n }\n });\n this.$resizeObserver.observe(this.container);\n };\n return VirtualRenderer;\n}());\nVirtualRenderer.prototype.CHANGE_CURSOR = 1;\nVirtualRenderer.prototype.CHANGE_MARKER = 2;\nVirtualRenderer.prototype.CHANGE_GUTTER = 4;\nVirtualRenderer.prototype.CHANGE_SCROLL = 8;\nVirtualRenderer.prototype.CHANGE_LINES = 16;\nVirtualRenderer.prototype.CHANGE_TEXT = 32;\nVirtualRenderer.prototype.CHANGE_SIZE = 64;\nVirtualRenderer.prototype.CHANGE_MARKER_BACK = 128;\nVirtualRenderer.prototype.CHANGE_MARKER_FRONT = 256;\nVirtualRenderer.prototype.CHANGE_FULL = 512;\nVirtualRenderer.prototype.CHANGE_H_SCROLL = 1024;\nVirtualRenderer.prototype.$changes = 0;\nVirtualRenderer.prototype.$padding = null;\nVirtualRenderer.prototype.$frozen = false;\nVirtualRenderer.prototype.STEPS = 8;\noop.implement(VirtualRenderer.prototype, EventEmitter);\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n useResizeObserver: {\n set: function (value) {\n if (!value && this.$resizeObserver) {\n this.$resizeObserver.disconnect();\n this.$resizeTimer.cancel();\n this.$resizeTimer = this.$resizeObserver = null;\n }\n else if (value && !this.$resizeObserver) {\n this.$addResizeObserver();\n }\n }\n },\n animatedScroll: { initialValue: false },\n showInvisibles: {\n set: function (value) {\n if (this.$textLayer.setShowInvisibles(value))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: true\n },\n printMarginColumn: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: 80\n },\n printMargin: {\n set: function (val) {\n if (typeof val == \"number\")\n this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function () {\n return this.$showPrintMargin && this.$printMarginColumn;\n }\n },\n showGutter: {\n set: function (show) {\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n useSvgGutterIcons: {\n set: function (value) {\n this.$gutterLayer.$useSvgGutterIcons = value;\n },\n initialValue: false\n },\n showFoldedAnnotations: {\n set: function (value) {\n this.$gutterLayer.$showFoldedAnnotations = value;\n },\n initialValue: false\n },\n fadeFoldWidgets: {\n set: function (show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function (show) {\n this.$gutterLayer.setShowFoldWidgets(show);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n displayIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setDisplayIndentGuides(show))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setHighlightIndentGuides(show) == true) {\n this.$textLayer.$highlightIndentGuide();\n }\n else {\n this.$textLayer.$clearActiveIndentGuide(this.$textLayer.$lines.cells);\n }\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function (shouldHighlight) {\n this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n hScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function (size) {\n if (typeof size == \"number\")\n size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function (name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function (val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function (val) {\n if (!(this.$minLines < 0x1ffffffffffff))\n this.$minLines = 0;\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function (val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function (val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val)\n return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function (val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n customScrollbar: {\n set: function (val) {\n this.$updateCustomScrollbar(val);\n },\n initialValue: false\n },\n theme: {\n set: function (val) { this.setTheme(val); },\n get: function () { return this.$themeId || this.theme; },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n },\n hasCssTransforms: {},\n useTextareaForIME: {\n initialValue: !useragent.isMobile && !useragent.isIE\n }\n});\nexports.VirtualRenderer = VirtualRenderer;\n\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nfunction $workerBlob(workerUrl) {\n var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n try {\n return new Blob([script], {\"type\": \"application/javascript\"});\n } catch (e) { // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n}\n\nfunction createWorker(workerUrl) {\n if (typeof Worker == \"undefined\")\n return { postMessage: function() {}, terminate: function() {} };\n if (config.get(\"loadWorkerFromBlob\")) {\n var blob = $workerBlob(workerUrl);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n return new Worker(blobURL);\n }\n return new Worker(workerUrl);\n}\n\nvar WorkerClient = function(worker) {\n if (!worker.postMessage)\n worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n\n this.$worker = worker;\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n\n this.callbackId = 1;\n this.callbacks = {};\n\n this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n if (require.nameToUrl && !require.toUrl)\n require.toUrl = require.nameToUrl;\n\n if (config.get(\"packaged\") || !require.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n var tlns = {};\n topLevelNamespaces.forEach(function(ns) {\n tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n this.$worker = createWorker(workerUrl);\n if (importScripts) {\n this.send(\"importScripts\", importScripts);\n }\n this.$worker.postMessage({\n init : true,\n tlns : tlns,\n module : mod,\n classname : classname\n });\n return this.$worker;\n };\n\n this.onMessage = function(e) {\n var msg = e.data;\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {data: msg.data});\n break;\n case \"call\":\n var callback = this.callbacks[msg.id];\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n break;\n case \"error\":\n this.reportError(msg.data);\n break;\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n \n this.reportError = function(err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function(path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function() {\n this._signal(\"terminate\", {});\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker.onerror = function(e) {\n e.preventDefault();\n };\n this.$worker = null;\n if (this.$doc)\n this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function(cmd, args) {\n this.$worker.postMessage({command: cmd, args: args});\n };\n\n this.call = function(cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n this.send(cmd, args);\n };\n\n this.emit = function(event, data) {\n try {\n if (data.data && data.data.err)\n data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code};\n this.$worker && this.$worker.postMessage({event: event, data: {data: data.data}});\n }\n catch(ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function(doc) {\n if (this.$doc)\n this.terminate();\n\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener, true);\n };\n\n this.changeListener = function(delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n if (delta.action == \"insert\")\n this.deltaQueue.push(delta.start, delta.lines);\n else\n this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function() {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else\n this.emit(\"change\", {data: q});\n };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n\n var messageBuffer = [];\n var workerClient = new WorkerClient({\n messageBuffer: messageBuffer,\n terminate: function() {},\n postMessage: function(e) {\n messageBuffer.push(e);\n if (!main) return;\n if (emitSync)\n setTimeout(processNext);\n else\n processNext();\n }\n });\n\n workerClient.setEmitSync = function(val) { emitSync = val; };\n\n var processNext = function() {\n var msg = messageBuffer.shift();\n if (msg.command)\n main[msg.command].apply(main, msg.args);\n else if (msg.event)\n sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function(msg) {\n workerClient.onMessage({data: msg});\n };\n sender.callback = function(data, callbackId) {\n this.postMessage({type: \"call\", id: callbackId, data: data});\n };\n sender.emit = function(name, data) {\n this.postMessage({type: \"event\", name: name, data: data});\n };\n\n config.loadModule([\"worker\", mod], function(Main) {\n main = new Main[classname](sender);\n while (messageBuffer.length)\n processNext();\n });\n\n return workerClient;\n};\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\nvar PlaceHolder = /** @class */ (function () {\n function PlaceHolder(session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate, true);\n this.$others = others;\n this.$onCursorChange = function () {\n setTimeout(function () {\n _self.onCursorChange();\n });\n };\n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || { length: -1 };\n this.$undoStackDepth = undoStack.length;\n this.setup();\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n }\n PlaceHolder.prototype.setup = function () {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode)\n session.selection.toSingleRange();\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function (other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n PlaceHolder.prototype.showOtherMarkers = function () {\n if (this.othersActive)\n return;\n var session = this.session;\n var _self = this;\n this.othersActive = true;\n this.others.forEach(function (anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column + _self.length), _self.othersClass, null, false);\n });\n };\n PlaceHolder.prototype.hideOtherMarkers = function () {\n if (!this.othersActive)\n return;\n this.othersActive = false;\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n PlaceHolder.prototype.onUpdate = function (delta) {\n if (this.$updating)\n return this.updateAnchors(delta);\n var range = delta;\n if (range.start.row !== range.end.row)\n return;\n if (range.start.row !== this.pos.row)\n return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n this.updateAnchors(delta);\n if (inMainRange)\n this.length += lengthDiff;\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n }\n else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n this.$updating = false;\n this.updateMarkers();\n };\n PlaceHolder.prototype.updateAnchors = function (delta) {\n this.pos.onChange(delta);\n for (var i = this.others.length; i--;)\n this.others[i].onChange(delta);\n this.updateMarkers();\n };\n PlaceHolder.prototype.updateMarkers = function () {\n if (this.$updating)\n return;\n var _self = this;\n var session = this.session;\n var updateMarker = function (pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + _self.length), className, null, false);\n };\n updateMarker(this.pos, this.mainClass);\n for (var i = this.others.length; i--;)\n updateMarker(this.others[i], this.othersClass);\n };\n PlaceHolder.prototype.onCursorChange = function (event) {\n if (this.$updating || !this.session)\n return;\n var pos = this.session.selection.getCursor();\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n this._emit(\"cursorEnter\", event);\n }\n else {\n this.hideOtherMarkers();\n this._emit(\"cursorLeave\", event);\n }\n };\n PlaceHolder.prototype.detach = function () {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.off(\"change\", this.$onUpdate);\n this.session.selection.off(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n PlaceHolder.prototype.cancel = function () {\n if (this.$undoStackDepth === -1)\n return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(this.session, true);\n }\n if (this.selectionBefore)\n this.session.selection.fromJSON(this.selectionBefore);\n };\n return PlaceHolder;\n}());\noop.implement(PlaceHolder.prototype, EventEmitter);\nexports.PlaceHolder = PlaceHolder;\n\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){var event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nfunction onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n if (ctrl && useragent.isMac)\n button = ev.button;\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode)\n e.editor.exitMultiSelectMode();\n return;\n }\n if (button !== 0)\n return;\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n var mouseX = e.x, mouseY = e.y;\n var onMouseSelection = function (e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n var selectionMode;\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt)\n selectionMode = shift ? \"block\" : \"add\";\n else if (alt && editor.$blockSelectEnabled)\n selectionMode = \"block\";\n }\n else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift)\n return;\n }\n else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection)\n return; // dragging\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n editor.inVirtualSelectionMode = true;\n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n editor.once(\"mouseup\", function () {\n var tmpSel = selection.toOrientedRange();\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n selection.substractPoint(tmpSel.cursor);\n else {\n if (shift) {\n selection.substractPoint(range.cursor);\n }\n else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n selection.addRange(tmpSel);\n }\n editor.inVirtualSelectionMode = false;\n });\n }\n else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true;\n var initialRange;\n var rectSel = [];\n var blockSelect = function () {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n return;\n screenCursor = newCursor;\n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n };\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n }\n else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n if (shift)\n screenAnchor = session.documentToScreenPosition(selection.lead);\n else\n selection.moveToPosition(pos);\n screenCursor = { row: -1, column: -1 };\n var onMouseSelectionEnd = function (e) {\n blockSelect();\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length)\n rectSel = [selection.toOrientedRange()];\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n for (var i = 0; i < rectSel.length; i++)\n selection.addRange(rectSel[i]);\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n };\n var onSelectionInterval = blockSelect;\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function () { onSelectionInterval(); }, 20);\n return e.preventDefault();\n }\n}\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module){// commands to enter multiselect mode\nexports.defaultCommands = [{\n name: \"addCursorAbove\",\n description: \"Add cursor above\",\n exec: function (editor) { editor.selectMoreLines(-1); },\n bindKey: { win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelow\",\n description: \"Add cursor below\",\n exec: function (editor) { editor.selectMoreLines(1); },\n bindKey: { win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorAboveSkipCurrent\",\n description: \"Add cursor above (skip current)\",\n exec: function (editor) { editor.selectMoreLines(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelowSkipCurrent\",\n description: \"Add cursor below (skip current)\",\n exec: function (editor) { editor.selectMoreLines(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreBefore\",\n description: \"Select more before\",\n exec: function (editor) { editor.selectMore(-1); },\n bindKey: { win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreAfter\",\n description: \"Select more after\",\n exec: function (editor) { editor.selectMore(1); },\n bindKey: { win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextBefore\",\n description: \"Select next before\",\n exec: function (editor) { editor.selectMore(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextAfter\",\n description: \"Select next after\",\n exec: function (editor) { editor.selectMore(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"toggleSplitSelectionIntoLines\",\n description: \"Split selection into lines\",\n exec: function (editor) {\n if (editor.multiSelect.rangeCount > 1)\n editor.multiSelect.joinSelections();\n else\n editor.multiSelect.splitIntoLines();\n },\n bindKey: { win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\" },\n readOnly: true\n }, {\n name: \"splitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function (editor) { editor.multiSelect.splitIntoLines(); },\n readOnly: true\n }, {\n name: \"alignCursors\",\n description: \"Align cursors\",\n exec: function (editor) { editor.alignCursors(); },\n bindKey: { win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\" },\n scrollIntoView: \"cursor\"\n }, {\n name: \"findAll\",\n description: \"Find all\",\n exec: function (editor) { editor.findAll(); },\n bindKey: { win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }];\nexports.multiSelectCommands = [{\n name: \"singleSelection\",\n description: \"Single selection\",\n bindKey: \"esc\",\n exec: function (editor) { editor.exitMultiSelectMode(); },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function (editor) { return editor && editor.inMultiSelectMode; }\n }];\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module){var RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\nfunction find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n}\nvar EditSession = require(\"./edit_session\").EditSession;\n(function () {\n this.getSelectionMarkers = function () {\n return this.$selectionMarkers;\n };\n}).call(EditSession.prototype);\n(function () {\n this.ranges = null;\n this.rangeList = null;\n this.addRange = function (range, $blockChangeEvents) {\n if (!range)\n return;\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n if (!range.cursor)\n range.cursor = range.end;\n var removed = this.rangeList.add(range);\n this.$onAddRange(range);\n if (removed.length)\n this.$onRemoveRange(removed);\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n this.toSingleRange = function (range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length)\n this.$onRemoveRange(removed);\n range && this.fromOrientedRange(range);\n };\n this.substractPoint = function (pos) {\n var removed = this.rangeList.substractPoint(pos);\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n this.mergeOverlappingRanges = function () {\n var removed = this.rangeList.merge();\n if (removed.length)\n this.$onRemoveRange(removed);\n };\n this.$onAddRange = function (range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n this._signal(\"addRange\", { range: range });\n };\n this.$onRemoveRange = function (removed) {\n this.rangeCount = this.rangeList.ranges.length;\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n for (var i = removed.length; i--;) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n this._signal(\"removeRange\", { ranges: removed });\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n this._signal(\"singleSelect\");\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange()))\n this.fromOrientedRange(lastRange);\n };\n this.$initRangeList = function () {\n if (this.rangeList)\n return;\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n this.getAllRanges = function () {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n this.splitIntoLines = function () {\n var ranges = this.ranges.length ? this.ranges : [this.getRange()];\n var newRanges = [];\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n var row = range.start.row;\n var endRow = range.end.row;\n if (row === endRow) {\n newRanges.push(range.clone());\n }\n else {\n newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length));\n while (++row < endRow)\n newRanges.push(this.getLineRange(row, true));\n newRanges.push(new Range(endRow, 0, endRow, range.end.column));\n }\n if (i == 0 && !this.isBackwards())\n newRanges = newRanges.reverse();\n }\n this.toSingleRange();\n for (var i = newRanges.length; i--;)\n this.addRange(newRanges[i]);\n };\n this.joinSelections = function () {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n };\n this.toggleBlockSelection = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n }\n else {\n var cursor = this.session.documentToScreenPosition(this.cursor);\n var anchor = this.session.documentToScreenPosition(this.anchor);\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n this.rectangularRangeBlock = function (screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n var xBackwards = screenCursor.column < screenAnchor.column;\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n var startOffsetX = screenCursor.offsetX;\n var endOffsetX = screenAnchor.offsetX;\n }\n else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n var yBackwards = screenCursor.row < screenAnchor.row;\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n }\n else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n if (startColumn < 0)\n startColumn = 0;\n if (startRow < 0)\n startRow = 0;\n if (startRow == endRow)\n includeEmptyLines = true;\n var docEnd;\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX));\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd))\n break;\n docEnd = range.end;\n }\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n if (yBackwards)\n rectSel.reverse();\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n while (rectSel[end].isEmpty() && end > 0)\n end--;\n if (end > 0) {\n var start = 0;\n while (rectSel[start].isEmpty())\n start++;\n }\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty())\n rectSel.splice(i, 1);\n }\n }\n return rectSel;\n };\n}).call(Selection.prototype);\nvar Editor = require(\"./editor\").Editor;\n(function () {\n this.updateSelectionMarkers = function () {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.addSelectionMarker = function (orientedRange) {\n if (!orientedRange.cursor)\n orientedRange.cursor = orientedRange.end;\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n this.removeSelectionMarker = function (range) {\n if (!range.marker)\n return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1)\n this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n this.removeSelectionMarkers = function (ranges) {\n var markerList = this.session.$selectionMarkers;\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.marker)\n continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1)\n markerList.splice(index, 1);\n }\n this.session.selectionMarkerCount = markerList.length;\n };\n this.$onAddRange = function (e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onRemoveRange = function (e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onMultiSelect = function (e) {\n if (this.inMultiSelectMode)\n return;\n this.inMultiSelectMode = true;\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onSingleSelect = function (e) {\n if (this.session.multiSelect.inVirtualMode)\n return;\n this.inMultiSelectMode = false;\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\n this.$onMultiSelectExec = function (e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect)\n return;\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n }\n else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n }\n else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n }\n else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n }\n else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n return result;\n };\n this.forEachSelection = function (cmd, args, options) {\n if (this.inVirtualSelectionMode)\n return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines;\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n if (!ranges.length)\n return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n i--;\n }\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined)\n result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n tmpSel.detach();\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n if (selection.ranges[0])\n selection.fromOrientedRange(selection.ranges[0]);\n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to)\n this.renderer.animateScrolling(anim.from);\n return result;\n };\n this.exitMultiSelectMode = function () {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n return;\n this.multiSelect.toSingleRange();\n };\n this.getSelectedText = function () {\n var text = \"\";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length)\n text = \"\";\n }\n else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\n };\n this.$checkMultiselectChange = function (e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n return;\n var pos = anchor == this.multiSelect.anchor\n ? range.cursor == range.start ? range.end : range.start\n : range.cursor;\n if (pos.row != anchor.row\n || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n else\n this.multiSelect.mergeOverlappingRanges();\n }\n };\n this.findAll = function (needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n if (options.needle == undefined) {\n var range = this.selection.isEmpty()\n ? this.selection.getWordRange()\n : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n }\n this.$search.set(options);\n var ranges = this.$search.findAll(this.session);\n if (!ranges.length)\n return 0;\n var selection = this.multiSelect;\n if (!additive)\n selection.toSingleRange(ranges[0]);\n for (var i = ranges.length; i--;)\n selection.addRange(ranges[i], true);\n if (range && selection.rangeList.rangeAtPoint(range.start))\n selection.addRange(range, true);\n return ranges.length;\n };\n this.selectMoreLines = function (dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn)\n screenLead.column = this.selection.$desiredColumn;\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n }\n else {\n var anchor = lead;\n }\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n }\n else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n }\n else {\n if (skip)\n var toRemove = range.cursor;\n }\n this.selection.addRange(newRange);\n if (toRemove)\n this.selection.substractPoint(toRemove);\n };\n this.transposeSelections = function (dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n for (var i = all.length; i--;) {\n var range = all[i];\n if (range.isEmpty()) {\n var tmp = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n range.end.row = tmp.end.row;\n range.end.column = tmp.end.column;\n }\n }\n sel.mergeOverlappingRanges();\n var words = [];\n for (var i = all.length; i--;) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n if (dir < 0)\n words.unshift(words.pop());\n else\n words.push(words.shift());\n for (var i = all.length; i--;) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n sel.fromOrientedRange(sel.ranges[0]);\n };\n this.selectMore = function (dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n var range = sel.toOrientedRange();\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst)\n return;\n }\n var needle = session.getTextRange(range);\n var newRange = find(session, needle, dir);\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n if (skip)\n this.multiSelect.substractPoint(range.cursor);\n };\n this.alignCursors = function () {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function (r) {\n if (r.cursor.row == row)\n return true;\n row = r.cursor.row;\n });\n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row, lr = range.end.row;\n var guessRange = fr == lr;\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n if (fr < 0)\n fr = 0;\n if (lr >= max)\n lr = max - 1;\n }\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({ row: fr, column: 0 }, lines.join(\"\\n\") + \"\\n\");\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n this.selection.setRange(range);\n }\n else {\n sameRowRanges.forEach(function (r) {\n sel.substractPoint(r.cursor);\n });\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function (r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1)\n spaceOffset = 0;\n if (p.column > maxCol)\n maxCol = p.column;\n if (spaceOffset < minSpace)\n minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function (r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d)\n session.insert(p, lang.stringRepeat(\" \", l - d));\n else\n session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n this.$reAlignText = function (lines, forceLeft) {\n var isLeftAligned = true, isRightAligned = true;\n var startW, textW, endW;\n return lines.map(function (line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m)\n return [line];\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n isRightAligned = false;\n if (startW != m[1].length)\n isLeftAligned = false;\n if (startW > m[1].length)\n startW = m[1].length;\n if (textW < m[2].length)\n textW = m[2].length;\n if (endW > m[3].length)\n endW = m[3].length;\n return m;\n }).map(forceLeft ? alignLeft :\n isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(textW - m[2].length + endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n}).call(Editor.prototype);\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function (e) {\n var session = e.session;\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n this.multiSelect = session && session.multiSelect;\n var oldSession = e.oldSession;\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode)\n this.$onMultiSelect();\n else\n this.$onSingleSelect();\n }\n};\nfunction MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange)\n return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n addAltCursorListeners(editor);\n}\nfunction addAltCursorListeners(editor) {\n if (!editor.textInput)\n return;\n var el = editor.textInput.getElement();\n var altCursor = false;\n event.addListener(el, \"keydown\", function (e) {\n var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n if (editor.$blockSelectEnabled && altDown) {\n if (!altCursor) {\n editor.renderer.setMouseCursor(\"crosshair\");\n altCursor = true;\n }\n }\n else if (altCursor) {\n reset();\n }\n }, editor);\n event.addListener(el, \"keyup\", reset, editor);\n event.addListener(el, \"blur\", reset, editor);\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n}\nexports.MultiSelect = MultiSelect;\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function (val) {\n MultiSelect(this);\n if (val) {\n this.on(\"mousedown\", onMouseDown);\n }\n else {\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function (val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n});\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\n(function () {\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line))\n return \"start\";\n if (foldStyle == \"markbeginend\"\n && this.foldingStopMarker\n && this.foldingStopMarker.test(line))\n return \"end\";\n return \"\";\n };\n this.getFoldWidgetRange = function (session, foldStyle, row) {\n return null;\n };\n this.indentationBlock = function (session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1)\n return;\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n if (level == -1)\n continue;\n if (level <= startLevel) {\n var token = session.getTokenAt(row, 0);\n if (!token || token.type !== \"string\")\n break;\n }\n endRow = row;\n }\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n this.openingBracketBlock = function (session, bracket, row, column, typeRe) {\n var start = { row: row, column: column + 1 };\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end)\n return;\n var fw = session.foldWidgets[end.row];\n if (fw == null)\n fw = session.getFoldWidget(end.row);\n if (fw == \"start\" && end.row > start.row) {\n end.row--;\n end.column = session.getLine(end.row).length;\n }\n return Range.fromPoints(start, end);\n };\n this.closingBracketBlock = function (session, bracket, row, column, typeRe) {\n var end = { row: row, column: column };\n var start = session.$findOpeningBracket(bracket, end);\n if (!start)\n return;\n start.column++;\n end.column--;\n return Range.fromPoints(start, end);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar LineWidgets = require(\"../line_widgets\").LineWidgets;\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\nvar nls = require(\"../config\").nls;\nfunction binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n while (first <= last) {\n var mid = (first + last) >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0)\n first = mid + 1;\n else if (c < 0)\n last = mid - 1;\n else\n return mid;\n }\n return -(first + 1);\n}\nfunction findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length)\n return;\n var i = binarySearch(annotations, { row: row, column: -1 }, Range.comparePoints);\n if (i < 0)\n i = -i - 1;\n if (i >= annotations.length)\n i = dir > 0 ? 0 : annotations.length - 1;\n else if (i === 0 && dir < 0)\n i = annotations.length - 1;\n var annotation = annotations[i];\n if (!annotation || !dir)\n return;\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n if (!annotation)\n return annotations.slice();\n }\n var matched = [];\n row = annotation.row;\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n return matched.length && matched;\n}\nexports.showErrorMarker = function (editor, dir) {\n var session = editor.session;\n if (!session.widgetManager) {\n session.widgetManager = new LineWidgets(session);\n session.widgetManager.attach(editor);\n }\n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function (w) {\n return w.type == \"errorMarker\";\n })[0];\n if (oldWidget) {\n oldWidget.destroy();\n }\n else {\n row -= dir;\n }\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\"\n ? annotation.pos.sc\n : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n }\n else if (oldWidget) {\n return;\n }\n else {\n gutterAnno = {\n text: [nls(\"Looks good!\")],\n className: \"ace_ok\"\n };\n }\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n var w = {\n row: pos.row,\n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n var left = editor.renderer.$cursorLayer\n .getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n el.innerHTML = gutterAnno.text.join(\"
\");\n el.appendChild(dom.createElement(\"div\"));\n var kb = function (_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return { command: \"null\" };\n }\n };\n w.destroy = function () {\n if (editor.$mouseHandler.isMousePressed)\n return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n editor.session.widgetManager.addLineWidget(w);\n w.el.onmousedown = editor.focus.bind(editor);\n editor.renderer.scrollCursorIntoView(null, 0.5, { bottom: w.el.offsetHeight });\n};\ndom.importCssString(\"\\n .error_widget_wrapper {\\n background: inherit;\\n color: inherit;\\n border:none\\n }\\n .error_widget {\\n border-top: solid 2px;\\n border-bottom: solid 2px;\\n margin: 5px 0;\\n padding: 10px 40px;\\n white-space: pre-wrap;\\n }\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\n border-color: #ff5a5a\\n }\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\n border-color: #F1D817\\n }\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\n border-color: #5a5a5a\\n }\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\n border-color: #5aaa5a\\n }\\n .error_widget_arrow {\\n position: absolute;\\n border: solid 5px;\\n border-top-color: transparent!important;\\n border-right-color: transparent!important;\\n border-left-color: transparent!important;\\n top: -5px;\\n }\\n\", \"error_marker.css\", false);\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\",\"ace/loader_build\"], function(require, exports, module){/**\n * The main class required to set up an Ace instance in the browser.\n *\n * @class Ace\n **/\n\"use strict\";\nrequire(\"./loader_build\")(exports)\nvar dom = require(\"./lib/dom\");\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\nexports.config = require(\"./config\");\nexports.edit = function (el, options) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el)\n throw new Error(\"ace.edit can't find div #\" + _id);\n }\n if (el && el.env && el.env.editor instanceof Editor)\n return el.env.editor;\n var value = \"\";\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n }\n else if (el) {\n value = el.textContent;\n el.innerHTML = \"\";\n }\n var doc = exports.createEditSession(value);\n var editor = new Editor(new Renderer(el), doc, options);\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode)\n env.textarea = oldNode;\n editor.on(\"destroy\", function () {\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n};\nexports.createEditSession = function (text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n};\nexports.Range = Range;\nexports.Editor = Editor;\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.VirtualRenderer = Renderer;\nexports.version = exports.config.version;\n\n}); (function() {\n ace.require([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n var global = (function () {\n return this;\n })();\n if (!global && typeof window != \"undefined\") global = window; // can happen in strict mode\n if (!global && typeof self != \"undefined\") global = self; // can happen in webworker\n \n if (!global.ace)\n global.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n global.ace[key] = a[key];\n global.ace[\"default\"] = global.ace;\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = global.ace;\n }\n });\n })();\n ","ace.define(\"ace/split\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/editor\",\"ace/virtual_renderer\",\"ace/edit_session\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Editor = require(\"./editor\").Editor;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Split = function (container, theme, splits) {\n this.BELOW = 1;\n this.BESIDE = 0;\n this.$container = container;\n this.$theme = theme;\n this.$splits = 0;\n this.$editorCSS = \"\";\n this.$editors = [];\n this.$orientation = this.BESIDE;\n this.setSplits(splits || 1);\n this.$cEditor = this.$editors[0];\n this.on(\"focus\", function (editor) {\n this.$cEditor = editor;\n }.bind(this));\n};\n(function () {\n oop.implement(this, EventEmitter);\n this.$createEditor = function () {\n var el = document.createElement(\"div\");\n el.className = this.$editorCSS;\n el.style.cssText = \"position: absolute; top:0px; bottom:0px\";\n this.$container.appendChild(el);\n var editor = new Editor(new Renderer(el, this.$theme));\n editor.on(\"focus\", function () {\n this._emit(\"focus\", editor);\n }.bind(this));\n this.$editors.push(editor);\n editor.setFontSize(this.$fontSize);\n return editor;\n };\n this.setSplits = function (splits) {\n var editor;\n if (splits < 1) {\n throw \"The number of splits have to be > 0!\";\n }\n if (splits == this.$splits) {\n return;\n }\n else if (splits > this.$splits) {\n while (this.$splits < this.$editors.length && this.$splits < splits) {\n editor = this.$editors[this.$splits];\n this.$container.appendChild(editor.container);\n editor.setFontSize(this.$fontSize);\n this.$splits++;\n }\n while (this.$splits < splits) {\n this.$createEditor();\n this.$splits++;\n }\n }\n else {\n while (this.$splits > splits) {\n editor = this.$editors[this.$splits - 1];\n this.$container.removeChild(editor.container);\n this.$splits--;\n }\n }\n this.resize();\n };\n this.getSplits = function () {\n return this.$splits;\n };\n this.getEditor = function (idx) {\n return this.$editors[idx];\n };\n this.getCurrentEditor = function () {\n return this.$cEditor;\n };\n this.focus = function () {\n this.$cEditor.focus();\n };\n this.blur = function () {\n this.$cEditor.blur();\n };\n this.setTheme = function (theme) {\n this.$editors.forEach(function (editor) {\n editor.setTheme(theme);\n });\n };\n this.setKeyboardHandler = function (keybinding) {\n this.$editors.forEach(function (editor) {\n editor.setKeyboardHandler(keybinding);\n });\n };\n this.forEach = function (callback, scope) {\n this.$editors.forEach(callback, scope);\n };\n this.$fontSize = \"\";\n this.setFontSize = function (size) {\n this.$fontSize = size;\n this.forEach(function (editor) {\n editor.setFontSize(size);\n });\n };\n this.$cloneSession = function (session) {\n var s = new EditSession(session.getDocument(), session.getMode());\n var undoManager = session.getUndoManager();\n s.setUndoManager(undoManager);\n s.setTabSize(session.getTabSize());\n s.setUseSoftTabs(session.getUseSoftTabs());\n s.setOverwrite(session.getOverwrite());\n s.setBreakpoints(session.getBreakpoints());\n s.setUseWrapMode(session.getUseWrapMode());\n s.setUseWorker(session.getUseWorker());\n s.setWrapLimitRange(session.$wrapLimitRange.min, session.$wrapLimitRange.max);\n s.$foldData = session.$cloneFoldData();\n return s;\n };\n this.setSession = function (session, idx) {\n var editor;\n if (idx == null) {\n editor = this.$cEditor;\n }\n else {\n editor = this.$editors[idx];\n }\n var isUsed = this.$editors.some(function (editor) {\n return editor.session === session;\n });\n if (isUsed) {\n session = this.$cloneSession(session);\n }\n editor.setSession(session);\n return session;\n };\n this.getOrientation = function () {\n return this.$orientation;\n };\n this.setOrientation = function (orientation) {\n if (this.$orientation == orientation) {\n return;\n }\n this.$orientation = orientation;\n this.resize();\n };\n this.resize = function () {\n var width = this.$container.clientWidth;\n var height = this.$container.clientHeight;\n var editor;\n if (this.$orientation == this.BESIDE) {\n var editorWidth = width / this.$splits;\n for (var i = 0; i < this.$splits; i++) {\n editor = this.$editors[i];\n editor.container.style.width = editorWidth + \"px\";\n editor.container.style.top = \"0px\";\n editor.container.style.left = i * editorWidth + \"px\";\n editor.container.style.height = height + \"px\";\n editor.resize();\n }\n }\n else {\n var editorHeight = height / this.$splits;\n for (var i = 0; i < this.$splits; i++) {\n editor = this.$editors[i];\n editor.container.style.width = width + \"px\";\n editor.container.style.top = i * editorHeight + \"px\";\n editor.container.style.left = \"0px\";\n editor.container.style.height = editorHeight + \"px\";\n editor.resize();\n }\n }\n };\n}).call(Split.prototype);\nexports.Split = Split;\n\n});\n\nace.define(\"ace/ext/split\",[\"require\",\"exports\",\"module\",\"ace/split\"], function(require, exports, module){\"use strict\";\nmodule.exports = require(\"../split\");\n\n}); (function() {\n ace.require([\"ace/ext/split\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","/**\n * Diff Match and Patch\n * Copyright 2018 The diff-match-patch Authors.\n * https://github.com/google/diff-match-patch\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Computes the difference between two texts to create a patch.\n * Applies the patch onto another text, allowing for errors.\n * @author fraser@google.com (Neil Fraser)\n */\n\n/**\n * Class containing the diff, match and patch methods.\n * @constructor\n */\nvar diff_match_patch = function() {\n\n // Defaults.\n // Redefine these in your program to override the defaults.\n\n // Number of seconds to map a diff before giving up (0 for infinity).\n this.Diff_Timeout = 1.0;\n // Cost of an empty edit operation in terms of edit characters.\n this.Diff_EditCost = 4;\n // At what point is no match declared (0.0 = perfection, 1.0 = very loose).\n this.Match_Threshold = 0.5;\n // How far to search for a match (0 = exact location, 1000+ = broad match).\n // A match this many characters away from the expected location will add\n // 1.0 to the score (0.0 is a perfect match).\n this.Match_Distance = 1000;\n // When deleting a large block of text (over ~64 characters), how close do\n // the contents have to be to match the expected contents. (0.0 = perfection,\n // 1.0 = very loose). Note that Match_Threshold controls how closely the\n // end points of a delete need to match.\n this.Patch_DeleteThreshold = 0.5;\n // Chunk size for context length.\n this.Patch_Margin = 4;\n\n // The number of bits in an int.\n this.Match_MaxBits = 32;\n};\n\n\n// DIFF FUNCTIONS\n\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n/**\n * Class representing one diff tuple.\n * ~Attempts to look like a two-element array (which is what this used to be).~\n * Constructor returns an actual two-element array, to allow destructing @JackuB\n * See https://github.com/JackuB/diff-match-patch/issues/14 for details\n * @param {number} op Operation, one of: DIFF_DELETE, DIFF_INSERT, DIFF_EQUAL.\n * @param {string} text Text to be deleted, inserted, or retained.\n * @constructor\n */\ndiff_match_patch.Diff = function(op, text) {\n return [op, text];\n};\n\n/**\n * Find the differences between two texts. Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean=} opt_checklines Optional speedup flag. If present and false,\n * then don't run a line-level diff first to identify the changed areas.\n * Defaults to true, which does a faster, slightly less optimal diff.\n * @param {number=} opt_deadline Optional time when the diff should be complete\n * by. Used internally for recursive calls. Users should set DiffTimeout\n * instead.\n * @return {!Array.} Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_main = function(text1, text2, opt_checklines,\n opt_deadline) {\n // Set a deadline by which time the diff must be complete.\n if (typeof opt_deadline == 'undefined') {\n if (this.Diff_Timeout <= 0) {\n opt_deadline = Number.MAX_VALUE;\n } else {\n opt_deadline = (new Date).getTime() + this.Diff_Timeout * 1000;\n }\n }\n var deadline = opt_deadline;\n\n // Check for null inputs.\n if (text1 == null || text2 == null) {\n throw new Error('Null input. (diff_main)');\n }\n\n // Check for equality (speedup).\n if (text1 == text2) {\n if (text1) {\n return [new diff_match_patch.Diff(DIFF_EQUAL, text1)];\n }\n return [];\n }\n\n if (typeof opt_checklines == 'undefined') {\n opt_checklines = true;\n }\n var checklines = opt_checklines;\n\n // Trim off common prefix (speedup).\n var commonlength = this.diff_commonPrefix(text1, text2);\n var commonprefix = text1.substring(0, commonlength);\n text1 = text1.substring(commonlength);\n text2 = text2.substring(commonlength);\n\n // Trim off common suffix (speedup).\n commonlength = this.diff_commonSuffix(text1, text2);\n var commonsuffix = text1.substring(text1.length - commonlength);\n text1 = text1.substring(0, text1.length - commonlength);\n text2 = text2.substring(0, text2.length - commonlength);\n\n // Compute the diff on the middle block.\n var diffs = this.diff_compute_(text1, text2, checklines, deadline);\n\n // Restore the prefix and suffix.\n if (commonprefix) {\n diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, commonprefix));\n }\n if (commonsuffix) {\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, commonsuffix));\n }\n this.diff_cleanupMerge(diffs);\n return diffs;\n};\n\n\n/**\n * Find the differences between two texts. Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean} checklines Speedup flag. If false, then don't run a\n * line-level diff first to identify the changed areas.\n * If true, then run a faster, slightly less optimal diff.\n * @param {number} deadline Time when the diff should be complete by.\n * @return {!Array.} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_compute_ = function(text1, text2, checklines,\n deadline) {\n var diffs;\n\n if (!text1) {\n // Just add some text (speedup).\n return [new diff_match_patch.Diff(DIFF_INSERT, text2)];\n }\n\n if (!text2) {\n // Just delete some text (speedup).\n return [new diff_match_patch.Diff(DIFF_DELETE, text1)];\n }\n\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n var i = longtext.indexOf(shorttext);\n if (i != -1) {\n // Shorter text is inside the longer text (speedup).\n diffs = [new diff_match_patch.Diff(DIFF_INSERT, longtext.substring(0, i)),\n new diff_match_patch.Diff(DIFF_EQUAL, shorttext),\n new diff_match_patch.Diff(DIFF_INSERT,\n longtext.substring(i + shorttext.length))];\n // Swap insertions for deletions if diff is reversed.\n if (text1.length > text2.length) {\n diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n }\n return diffs;\n }\n\n if (shorttext.length == 1) {\n // Single character string.\n // After the previous speedup, the character can't be an equality.\n return [new diff_match_patch.Diff(DIFF_DELETE, text1),\n new diff_match_patch.Diff(DIFF_INSERT, text2)];\n }\n\n // Check to see if the problem can be split in two.\n var hm = this.diff_halfMatch_(text1, text2);\n if (hm) {\n // A half-match was found, sort out the return data.\n var text1_a = hm[0];\n var text1_b = hm[1];\n var text2_a = hm[2];\n var text2_b = hm[3];\n var mid_common = hm[4];\n // Send both pairs off for separate processing.\n var diffs_a = this.diff_main(text1_a, text2_a, checklines, deadline);\n var diffs_b = this.diff_main(text1_b, text2_b, checklines, deadline);\n // Merge the results.\n return diffs_a.concat([new diff_match_patch.Diff(DIFF_EQUAL, mid_common)],\n diffs_b);\n }\n\n if (checklines && text1.length > 100 && text2.length > 100) {\n return this.diff_lineMode_(text1, text2, deadline);\n }\n\n return this.diff_bisect_(text1, text2, deadline);\n};\n\n\n/**\n * Do a quick line-level diff on both strings, then rediff the parts for\n * greater accuracy.\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} deadline Time when the diff should be complete by.\n * @return {!Array.} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_lineMode_ = function(text1, text2, deadline) {\n // Scan the text on a line-by-line basis first.\n var a = this.diff_linesToChars_(text1, text2);\n text1 = a.chars1;\n text2 = a.chars2;\n var linearray = a.lineArray;\n\n var diffs = this.diff_main(text1, text2, false, deadline);\n\n // Convert the diff back to original text.\n this.diff_charsToLines_(diffs, linearray);\n // Eliminate freak matches (e.g. blank lines)\n this.diff_cleanupSemantic(diffs);\n\n // Rediff any replacement blocks, this time character-by-character.\n // Add a dummy entry at the end.\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, ''));\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n break;\n case DIFF_EQUAL:\n // Upon reaching an equality, check for prior redundancies.\n if (count_delete >= 1 && count_insert >= 1) {\n // Delete the offending records and add the merged ones.\n diffs.splice(pointer - count_delete - count_insert,\n count_delete + count_insert);\n pointer = pointer - count_delete - count_insert;\n var subDiff =\n this.diff_main(text_delete, text_insert, false, deadline);\n for (var j = subDiff.length - 1; j >= 0; j--) {\n diffs.splice(pointer, 0, subDiff[j]);\n }\n pointer = pointer + subDiff.length;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n pointer++;\n }\n diffs.pop(); // Remove the dummy entry at the end.\n\n return diffs;\n};\n\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} deadline Time at which to bail if not yet complete.\n * @return {!Array.} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_bisect_ = function(text1, text2, deadline) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n var max_d = Math.ceil((text1_length + text2_length) / 2);\n var v_offset = max_d;\n var v_length = 2 * max_d;\n var v1 = new Array(v_length);\n var v2 = new Array(v_length);\n // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n // integers and undefined.\n for (var x = 0; x < v_length; x++) {\n v1[x] = -1;\n v2[x] = -1;\n }\n v1[v_offset + 1] = 0;\n v2[v_offset + 1] = 0;\n var delta = text1_length - text2_length;\n // If the total number of characters is odd, then the front path will collide\n // with the reverse path.\n var front = (delta % 2 != 0);\n // Offsets for start and end of k loop.\n // Prevents mapping of space beyond the grid.\n var k1start = 0;\n var k1end = 0;\n var k2start = 0;\n var k2end = 0;\n for (var d = 0; d < max_d; d++) {\n // Bail out if deadline is reached.\n if ((new Date()).getTime() > deadline) {\n break;\n }\n\n // Walk the front path one step.\n for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n var k1_offset = v_offset + k1;\n var x1;\n if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n x1 = v1[k1_offset + 1];\n } else {\n x1 = v1[k1_offset - 1] + 1;\n }\n var y1 = x1 - k1;\n while (x1 < text1_length && y1 < text2_length &&\n text1.charAt(x1) == text2.charAt(y1)) {\n x1++;\n y1++;\n }\n v1[k1_offset] = x1;\n if (x1 > text1_length) {\n // Ran off the right of the graph.\n k1end += 2;\n } else if (y1 > text2_length) {\n // Ran off the bottom of the graph.\n k1start += 2;\n } else if (front) {\n var k2_offset = v_offset + delta - k1;\n if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) {\n // Mirror x2 onto top-left coordinate system.\n var x2 = text1_length - v2[k2_offset];\n if (x1 >= x2) {\n // Overlap detected.\n return this.diff_bisectSplit_(text1, text2, x1, y1, deadline);\n }\n }\n }\n }\n\n // Walk the reverse path one step.\n for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n var k2_offset = v_offset + k2;\n var x2;\n if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n x2 = v2[k2_offset + 1];\n } else {\n x2 = v2[k2_offset - 1] + 1;\n }\n var y2 = x2 - k2;\n while (x2 < text1_length && y2 < text2_length &&\n text1.charAt(text1_length - x2 - 1) ==\n text2.charAt(text2_length - y2 - 1)) {\n x2++;\n y2++;\n }\n v2[k2_offset] = x2;\n if (x2 > text1_length) {\n // Ran off the left of the graph.\n k2end += 2;\n } else if (y2 > text2_length) {\n // Ran off the top of the graph.\n k2start += 2;\n } else if (!front) {\n var k1_offset = v_offset + delta - k2;\n if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) {\n var x1 = v1[k1_offset];\n var y1 = v_offset + x1 - k1_offset;\n // Mirror x2 onto top-left coordinate system.\n x2 = text1_length - x2;\n if (x1 >= x2) {\n // Overlap detected.\n return this.diff_bisectSplit_(text1, text2, x1, y1, deadline);\n }\n }\n }\n }\n }\n // Diff took too long and hit the deadline or\n // number of diffs equals number of characters, no commonality at all.\n return [new diff_match_patch.Diff(DIFF_DELETE, text1),\n new diff_match_patch.Diff(DIFF_INSERT, text2)];\n};\n\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @param {number} deadline Time at which to bail if not yet complete.\n * @return {!Array.} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_bisectSplit_ = function(text1, text2, x, y,\n deadline) {\n var text1a = text1.substring(0, x);\n var text2a = text2.substring(0, y);\n var text1b = text1.substring(x);\n var text2b = text2.substring(y);\n\n // Compute both diffs serially.\n var diffs = this.diff_main(text1a, text2a, false, deadline);\n var diffsb = this.diff_main(text1b, text2b, false, deadline);\n\n return diffs.concat(diffsb);\n};\n\n\n/**\n * Split two texts into an array of strings. Reduce the texts to a string of\n * hashes where each Unicode character represents one line.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {{chars1: string, chars2: string, lineArray: !Array.}}\n * An object containing the encoded text1, the encoded text2 and\n * the array of unique strings.\n * The zeroth element of the array of unique strings is intentionally blank.\n * @private\n */\ndiff_match_patch.prototype.diff_linesToChars_ = function(text1, text2) {\n var lineArray = []; // e.g. lineArray[4] == 'Hello\\n'\n var lineHash = {}; // e.g. lineHash['Hello\\n'] == 4\n\n // '\\x00' is a valid character, but various debuggers don't like it.\n // So we'll insert a junk entry to avoid generating a null character.\n lineArray[0] = '';\n\n /**\n * Split a text into an array of strings. Reduce the texts to a string of\n * hashes where each Unicode character represents one line.\n * Modifies linearray and linehash through being a closure.\n * @param {string} text String to encode.\n * @return {string} Encoded string.\n * @private\n */\n function diff_linesToCharsMunge_(text) {\n var chars = '';\n // Walk the text, pulling out a substring for each line.\n // text.split('\\n') would would temporarily double our memory footprint.\n // Modifying text would create many large strings to garbage collect.\n var lineStart = 0;\n var lineEnd = -1;\n // Keeping our own length variable is faster than looking it up.\n var lineArrayLength = lineArray.length;\n while (lineEnd < text.length - 1) {\n lineEnd = text.indexOf('\\n', lineStart);\n if (lineEnd == -1) {\n lineEnd = text.length - 1;\n }\n var line = text.substring(lineStart, lineEnd + 1);\n\n if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) :\n (lineHash[line] !== undefined)) {\n chars += String.fromCharCode(lineHash[line]);\n } else {\n if (lineArrayLength == maxLines) {\n // Bail out at 65535 because\n // String.fromCharCode(65536) == String.fromCharCode(0)\n line = text.substring(lineStart);\n lineEnd = text.length;\n }\n chars += String.fromCharCode(lineArrayLength);\n lineHash[line] = lineArrayLength;\n lineArray[lineArrayLength++] = line;\n }\n lineStart = lineEnd + 1;\n }\n return chars;\n }\n // Allocate 2/3rds of the space for text1, the rest for text2.\n var maxLines = 40000;\n var chars1 = diff_linesToCharsMunge_(text1);\n maxLines = 65535;\n var chars2 = diff_linesToCharsMunge_(text2);\n return {chars1: chars1, chars2: chars2, lineArray: lineArray};\n};\n\n\n/**\n * Rehydrate the text in a diff from a string of line hashes to real lines of\n * text.\n * @param {!Array.} diffs Array of diff tuples.\n * @param {!Array.} lineArray Array of unique strings.\n * @private\n */\ndiff_match_patch.prototype.diff_charsToLines_ = function(diffs, lineArray) {\n for (var i = 0; i < diffs.length; i++) {\n var chars = diffs[i][1];\n var text = [];\n for (var j = 0; j < chars.length; j++) {\n text[j] = lineArray[chars.charCodeAt(j)];\n }\n diffs[i][1] = text.join('');\n }\n};\n\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n * string.\n */\ndiff_match_patch.prototype.diff_commonPrefix = function(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: https://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerstart = 0;\n while (pointermin < pointermid) {\n if (text1.substring(pointerstart, pointermid) ==\n text2.substring(pointerstart, pointermid)) {\n pointermin = pointermid;\n pointerstart = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\ndiff_match_patch.prototype.diff_commonSuffix = function(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 ||\n text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: https://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerend = 0;\n while (pointermin < pointermid) {\n if (text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n pointermin = pointermid;\n pointerend = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n\n/**\n * Determine if the suffix of one string is the prefix of another.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of the first\n * string and the start of the second string.\n * @private\n */\ndiff_match_patch.prototype.diff_commonOverlap_ = function(text1, text2) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n // Eliminate the null case.\n if (text1_length == 0 || text2_length == 0) {\n return 0;\n }\n // Truncate the longer string.\n if (text1_length > text2_length) {\n text1 = text1.substring(text1_length - text2_length);\n } else if (text1_length < text2_length) {\n text2 = text2.substring(0, text1_length);\n }\n var text_length = Math.min(text1_length, text2_length);\n // Quick check for the worst case.\n if (text1 == text2) {\n return text_length;\n }\n\n // Start by looking for a single character match\n // and increase length until no match is found.\n // Performance analysis: https://neil.fraser.name/news/2010/11/04/\n var best = 0;\n var length = 1;\n while (true) {\n var pattern = text1.substring(text_length - length);\n var found = text2.indexOf(pattern);\n if (found == -1) {\n return best;\n }\n length += found;\n if (found == 0 || text1.substring(text_length - length) ==\n text2.substring(0, length)) {\n best = length;\n length++;\n }\n }\n};\n\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.} Five element Array, containing the prefix of\n * text1, the suffix of text1, the prefix of text2, the suffix of\n * text2 and the common middle. Or null if there was no match.\n * @private\n */\ndiff_match_patch.prototype.diff_halfMatch_ = function(text1, text2) {\n if (this.Diff_Timeout <= 0) {\n // Don't risk returning a non-optimal diff if we have unlimited time.\n return null;\n }\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n return null; // Pointless.\n }\n var dmp = this; // 'this' becomes 'window' in a closure.\n\n /**\n * Does a substring of shorttext exist within longtext such that the substring\n * is at least half the length of longtext?\n * Closure, but does not reference any external variables.\n * @param {string} longtext Longer string.\n * @param {string} shorttext Shorter string.\n * @param {number} i Start index of quarter length substring within longtext.\n * @return {Array.} Five element Array, containing the prefix of\n * longtext, the suffix of longtext, the prefix of shorttext, the suffix\n * of shorttext and the common middle. Or null if there was no match.\n * @private\n */\n function diff_halfMatchI_(longtext, shorttext, i) {\n // Start with a 1/4 length substring at position i as a seed.\n var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n var j = -1;\n var best_common = '';\n var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n while ((j = shorttext.indexOf(seed, j + 1)) != -1) {\n var prefixLength = dmp.diff_commonPrefix(longtext.substring(i),\n shorttext.substring(j));\n var suffixLength = dmp.diff_commonSuffix(longtext.substring(0, i),\n shorttext.substring(0, j));\n if (best_common.length < suffixLength + prefixLength) {\n best_common = shorttext.substring(j - suffixLength, j) +\n shorttext.substring(j, j + prefixLength);\n best_longtext_a = longtext.substring(0, i - suffixLength);\n best_longtext_b = longtext.substring(i + prefixLength);\n best_shorttext_a = shorttext.substring(0, j - suffixLength);\n best_shorttext_b = shorttext.substring(j + prefixLength);\n }\n }\n if (best_common.length * 2 >= longtext.length) {\n return [best_longtext_a, best_longtext_b,\n best_shorttext_a, best_shorttext_b, best_common];\n } else {\n return null;\n }\n }\n\n // First check if the second quarter is the seed for a half-match.\n var hm1 = diff_halfMatchI_(longtext, shorttext,\n Math.ceil(longtext.length / 4));\n // Check again based on the third quarter.\n var hm2 = diff_halfMatchI_(longtext, shorttext,\n Math.ceil(longtext.length / 2));\n var hm;\n if (!hm1 && !hm2) {\n return null;\n } else if (!hm2) {\n hm = hm1;\n } else if (!hm1) {\n hm = hm2;\n } else {\n // Both matched. Select the longest.\n hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n }\n\n // A half-match was found, sort out the return data.\n var text1_a, text1_b, text2_a, text2_b;\n if (text1.length > text2.length) {\n text1_a = hm[0];\n text1_b = hm[1];\n text2_a = hm[2];\n text2_b = hm[3];\n } else {\n text2_a = hm[0];\n text2_b = hm[1];\n text1_a = hm[2];\n text1_b = hm[3];\n }\n var mid_common = hm[4];\n return [text1_a, text1_b, text2_a, text2_b, mid_common];\n};\n\n\n/**\n * Reduce the number of edits by eliminating semantically trivial equalities.\n * @param {!Array.} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupSemantic = function(diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n /** @type {?string} */\n var lastEquality = null;\n // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n var pointer = 0; // Index of current position.\n // Number of characters that changed prior to the equality.\n var length_insertions1 = 0;\n var length_deletions1 = 0;\n // Number of characters that changed after the equality.\n var length_insertions2 = 0;\n var length_deletions2 = 0;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) { // Equality found.\n equalities[equalitiesLength++] = pointer;\n length_insertions1 = length_insertions2;\n length_deletions1 = length_deletions2;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastEquality = diffs[pointer][1];\n } else { // An insertion or deletion.\n if (diffs[pointer][0] == DIFF_INSERT) {\n length_insertions2 += diffs[pointer][1].length;\n } else {\n length_deletions2 += diffs[pointer][1].length;\n }\n // Eliminate an equality that is smaller or equal to the edits on both\n // sides of it.\n if (lastEquality && (lastEquality.length <=\n Math.max(length_insertions1, length_deletions1)) &&\n (lastEquality.length <= Math.max(length_insertions2,\n length_deletions2))) {\n // Duplicate record.\n diffs.splice(equalities[equalitiesLength - 1], 0,\n new diff_match_patch.Diff(DIFF_DELETE, lastEquality));\n // Change second copy to insert.\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n // Throw away the equality we just deleted.\n equalitiesLength--;\n // Throw away the previous equality (it needs to be reevaluated).\n equalitiesLength--;\n pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n length_insertions1 = 0; // Reset the counters.\n length_deletions1 = 0;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastEquality = null;\n changes = true;\n }\n }\n pointer++;\n }\n\n // Normalize the diff.\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n this.diff_cleanupSemanticLossless(diffs);\n\n // Find any overlaps between deletions and insertions.\n // e.g: abcxxxxxxdef\n // -> abcxxxdef\n // e.g: xxxabcdefxxx\n // -> defxxxabc\n // Only extract an overlap if it is as big as the edit ahead or behind it.\n pointer = 1;\n while (pointer < diffs.length) {\n if (diffs[pointer - 1][0] == DIFF_DELETE &&\n diffs[pointer][0] == DIFF_INSERT) {\n var deletion = diffs[pointer - 1][1];\n var insertion = diffs[pointer][1];\n var overlap_length1 = this.diff_commonOverlap_(deletion, insertion);\n var overlap_length2 = this.diff_commonOverlap_(insertion, deletion);\n if (overlap_length1 >= overlap_length2) {\n if (overlap_length1 >= deletion.length / 2 ||\n overlap_length1 >= insertion.length / 2) {\n // Overlap found. Insert an equality and trim the surrounding edits.\n diffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_EQUAL,\n insertion.substring(0, overlap_length1)));\n diffs[pointer - 1][1] =\n deletion.substring(0, deletion.length - overlap_length1);\n diffs[pointer + 1][1] = insertion.substring(overlap_length1);\n pointer++;\n }\n } else {\n if (overlap_length2 >= deletion.length / 2 ||\n overlap_length2 >= insertion.length / 2) {\n // Reverse overlap found.\n // Insert an equality and swap and trim the surrounding edits.\n diffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_EQUAL,\n deletion.substring(0, overlap_length2)));\n diffs[pointer - 1][0] = DIFF_INSERT;\n diffs[pointer - 1][1] =\n insertion.substring(0, insertion.length - overlap_length2);\n diffs[pointer + 1][0] = DIFF_DELETE;\n diffs[pointer + 1][1] =\n deletion.substring(overlap_length2);\n pointer++;\n }\n }\n pointer++;\n }\n pointer++;\n }\n};\n\n\n/**\n * Look for single edits surrounded on both sides by equalities\n * which can be shifted sideways to align the edit to a word boundary.\n * e.g: The cat came. -> The cat came.\n * @param {!Array.} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupSemanticLossless = function(diffs) {\n /**\n * Given two strings, compute a score representing whether the internal\n * boundary falls on logical boundaries.\n * Scores range from 6 (best) to 0 (worst).\n * Closure, but does not reference any external variables.\n * @param {string} one First string.\n * @param {string} two Second string.\n * @return {number} The score.\n * @private\n */\n function diff_cleanupSemanticScore_(one, two) {\n if (!one || !two) {\n // Edges are the best.\n return 6;\n }\n\n // Each port of this function behaves slightly differently due to\n // subtle differences in each language's definition of things like\n // 'whitespace'. Since this function's purpose is largely cosmetic,\n // the choice has been made to use each language's native features\n // rather than force total conformity.\n var char1 = one.charAt(one.length - 1);\n var char2 = two.charAt(0);\n var nonAlphaNumeric1 = char1.match(diff_match_patch.nonAlphaNumericRegex_);\n var nonAlphaNumeric2 = char2.match(diff_match_patch.nonAlphaNumericRegex_);\n var whitespace1 = nonAlphaNumeric1 &&\n char1.match(diff_match_patch.whitespaceRegex_);\n var whitespace2 = nonAlphaNumeric2 &&\n char2.match(diff_match_patch.whitespaceRegex_);\n var lineBreak1 = whitespace1 &&\n char1.match(diff_match_patch.linebreakRegex_);\n var lineBreak2 = whitespace2 &&\n char2.match(diff_match_patch.linebreakRegex_);\n var blankLine1 = lineBreak1 &&\n one.match(diff_match_patch.blanklineEndRegex_);\n var blankLine2 = lineBreak2 &&\n two.match(diff_match_patch.blanklineStartRegex_);\n\n if (blankLine1 || blankLine2) {\n // Five points for blank lines.\n return 5;\n } else if (lineBreak1 || lineBreak2) {\n // Four points for line breaks.\n return 4;\n } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {\n // Three points for end of sentences.\n return 3;\n } else if (whitespace1 || whitespace2) {\n // Two points for whitespace.\n return 2;\n } else if (nonAlphaNumeric1 || nonAlphaNumeric2) {\n // One point for non-alphanumeric.\n return 1;\n }\n return 0;\n }\n\n var pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL) {\n // This is a single edit surrounded by equalities.\n var equality1 = diffs[pointer - 1][1];\n var edit = diffs[pointer][1];\n var equality2 = diffs[pointer + 1][1];\n\n // First, shift the edit as far left as possible.\n var commonOffset = this.diff_commonSuffix(equality1, edit);\n if (commonOffset) {\n var commonString = edit.substring(edit.length - commonOffset);\n equality1 = equality1.substring(0, equality1.length - commonOffset);\n edit = commonString + edit.substring(0, edit.length - commonOffset);\n equality2 = commonString + equality2;\n }\n\n // Second, step character by character right, looking for the best fit.\n var bestEquality1 = equality1;\n var bestEdit = edit;\n var bestEquality2 = equality2;\n var bestScore = diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n while (edit.charAt(0) === equality2.charAt(0)) {\n equality1 += edit.charAt(0);\n edit = edit.substring(1) + equality2.charAt(0);\n equality2 = equality2.substring(1);\n var score = diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n // The >= encourages trailing rather than leading whitespace on edits.\n if (score >= bestScore) {\n bestScore = score;\n bestEquality1 = equality1;\n bestEdit = edit;\n bestEquality2 = equality2;\n }\n }\n\n if (diffs[pointer - 1][1] != bestEquality1) {\n // We have an improvement, save it back to the diff.\n if (bestEquality1) {\n diffs[pointer - 1][1] = bestEquality1;\n } else {\n diffs.splice(pointer - 1, 1);\n pointer--;\n }\n diffs[pointer][1] = bestEdit;\n if (bestEquality2) {\n diffs[pointer + 1][1] = bestEquality2;\n } else {\n diffs.splice(pointer + 1, 1);\n pointer--;\n }\n }\n }\n pointer++;\n }\n};\n\n// Define some regex patterns for matching boundaries.\ndiff_match_patch.nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;\ndiff_match_patch.whitespaceRegex_ = /\\s/;\ndiff_match_patch.linebreakRegex_ = /[\\r\\n]/;\ndiff_match_patch.blanklineEndRegex_ = /\\n\\r?\\n$/;\ndiff_match_patch.blanklineStartRegex_ = /^\\r?\\n\\r?\\n/;\n\n/**\n * Reduce the number of edits by eliminating operationally trivial equalities.\n * @param {!Array.} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupEfficiency = function(diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n /** @type {?string} */\n var lastEquality = null;\n // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n var pointer = 0; // Index of current position.\n // Is there an insertion operation before the last equality.\n var pre_ins = false;\n // Is there a deletion operation before the last equality.\n var pre_del = false;\n // Is there an insertion operation after the last equality.\n var post_ins = false;\n // Is there a deletion operation after the last equality.\n var post_del = false;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) { // Equality found.\n if (diffs[pointer][1].length < this.Diff_EditCost &&\n (post_ins || post_del)) {\n // Candidate found.\n equalities[equalitiesLength++] = pointer;\n pre_ins = post_ins;\n pre_del = post_del;\n lastEquality = diffs[pointer][1];\n } else {\n // Not a candidate, and can never become one.\n equalitiesLength = 0;\n lastEquality = null;\n }\n post_ins = post_del = false;\n } else { // An insertion or deletion.\n if (diffs[pointer][0] == DIFF_DELETE) {\n post_del = true;\n } else {\n post_ins = true;\n }\n /*\n * Five types to be split:\n * ABXYCD\n * AXCD\n * ABXC\n * AXCD\n * ABXC\n */\n if (lastEquality && ((pre_ins && pre_del && post_ins && post_del) ||\n ((lastEquality.length < this.Diff_EditCost / 2) &&\n (pre_ins + pre_del + post_ins + post_del) == 3))) {\n // Duplicate record.\n diffs.splice(equalities[equalitiesLength - 1], 0,\n new diff_match_patch.Diff(DIFF_DELETE, lastEquality));\n // Change second copy to insert.\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n equalitiesLength--; // Throw away the equality we just deleted;\n lastEquality = null;\n if (pre_ins && pre_del) {\n // No changes made which could affect previous entry, keep going.\n post_ins = post_del = true;\n equalitiesLength = 0;\n } else {\n equalitiesLength--; // Throw away the previous equality.\n pointer = equalitiesLength > 0 ?\n equalities[equalitiesLength - 1] : -1;\n post_ins = post_del = false;\n }\n changes = true;\n }\n }\n pointer++;\n }\n\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n};\n\n\n/**\n * Reorder and merge like edit sections. Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {!Array.} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupMerge = function(diffs) {\n // Add a dummy entry at the end.\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, ''));\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n var commonlength;\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_EQUAL:\n // Upon reaching an equality, check for prior redundancies.\n if (count_delete + count_insert > 1) {\n if (count_delete !== 0 && count_insert !== 0) {\n // Factor out any common prefixies.\n commonlength = this.diff_commonPrefix(text_insert, text_delete);\n if (commonlength !== 0) {\n if ((pointer - count_delete - count_insert) > 0 &&\n diffs[pointer - count_delete - count_insert - 1][0] ==\n DIFF_EQUAL) {\n diffs[pointer - count_delete - count_insert - 1][1] +=\n text_insert.substring(0, commonlength);\n } else {\n diffs.splice(0, 0, new diff_match_patch.Diff(DIFF_EQUAL,\n text_insert.substring(0, commonlength)));\n pointer++;\n }\n text_insert = text_insert.substring(commonlength);\n text_delete = text_delete.substring(commonlength);\n }\n // Factor out any common suffixies.\n commonlength = this.diff_commonSuffix(text_insert, text_delete);\n if (commonlength !== 0) {\n diffs[pointer][1] = text_insert.substring(text_insert.length -\n commonlength) + diffs[pointer][1];\n text_insert = text_insert.substring(0, text_insert.length -\n commonlength);\n text_delete = text_delete.substring(0, text_delete.length -\n commonlength);\n }\n }\n // Delete the offending records and add the merged ones.\n pointer -= count_delete + count_insert;\n diffs.splice(pointer, count_delete + count_insert);\n if (text_delete.length) {\n diffs.splice(pointer, 0,\n new diff_match_patch.Diff(DIFF_DELETE, text_delete));\n pointer++;\n }\n if (text_insert.length) {\n diffs.splice(pointer, 0,\n new diff_match_patch.Diff(DIFF_INSERT, text_insert));\n pointer++;\n }\n pointer++;\n } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {\n // Merge this equality with the previous one.\n diffs[pointer - 1][1] += diffs[pointer][1];\n diffs.splice(pointer, 1);\n } else {\n pointer++;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n }\n if (diffs[diffs.length - 1][1] === '') {\n diffs.pop(); // Remove the dummy entry at the end.\n }\n\n // Second pass: look for single edits surrounded on both sides by equalities\n // which can be shifted sideways to eliminate an equality.\n // e.g: ABAC -> ABAC\n var changes = false;\n pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL) {\n // This is a single edit surrounded by equalities.\n if (diffs[pointer][1].substring(diffs[pointer][1].length -\n diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {\n // Shift the edit over the previous equality.\n diffs[pointer][1] = diffs[pointer - 1][1] +\n diffs[pointer][1].substring(0, diffs[pointer][1].length -\n diffs[pointer - 1][1].length);\n diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n diffs.splice(pointer - 1, 1);\n changes = true;\n } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n diffs[pointer + 1][1]) {\n // Shift the edit over the next equality.\n diffs[pointer - 1][1] += diffs[pointer + 1][1];\n diffs[pointer][1] =\n diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n diffs[pointer + 1][1];\n diffs.splice(pointer + 1, 1);\n changes = true;\n }\n }\n pointer++;\n }\n // If shifts were made, the diff needs reordering and another shift sweep.\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n};\n\n\n/**\n * loc is a location in text1, compute and return the equivalent location in\n * text2.\n * e.g. 'The cat' vs 'The big cat', 1->1, 5->8\n * @param {!Array.} diffs Array of diff tuples.\n * @param {number} loc Location within text1.\n * @return {number} Location within text2.\n */\ndiff_match_patch.prototype.diff_xIndex = function(diffs, loc) {\n var chars1 = 0;\n var chars2 = 0;\n var last_chars1 = 0;\n var last_chars2 = 0;\n var x;\n for (x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_INSERT) { // Equality or deletion.\n chars1 += diffs[x][1].length;\n }\n if (diffs[x][0] !== DIFF_DELETE) { // Equality or insertion.\n chars2 += diffs[x][1].length;\n }\n if (chars1 > loc) { // Overshot the location.\n break;\n }\n last_chars1 = chars1;\n last_chars2 = chars2;\n }\n // Was the location was deleted?\n if (diffs.length != x && diffs[x][0] === DIFF_DELETE) {\n return last_chars2;\n }\n // Add the remaining character length.\n return last_chars2 + (loc - last_chars1);\n};\n\n\n/**\n * Convert a diff array into a pretty HTML report.\n * @param {!Array.} diffs Array of diff tuples.\n * @return {string} HTML representation.\n */\ndiff_match_patch.prototype.diff_prettyHtml = function(diffs) {\n var html = [];\n var pattern_amp = /&/g;\n var pattern_lt = //g;\n var pattern_para = /\\n/g;\n for (var x = 0; x < diffs.length; x++) {\n var op = diffs[x][0]; // Operation (insert, delete, equal)\n var data = diffs[x][1]; // Text of change.\n var text = data.replace(pattern_amp, '&').replace(pattern_lt, '<')\n .replace(pattern_gt, '>').replace(pattern_para, '¶
');\n switch (op) {\n case DIFF_INSERT:\n html[x] = '' + text + '';\n break;\n case DIFF_DELETE:\n html[x] = '' + text + '';\n break;\n case DIFF_EQUAL:\n html[x] = '' + text + '';\n break;\n }\n }\n return html.join('');\n};\n\n\n/**\n * Compute and return the source text (all equalities and deletions).\n * @param {!Array.} diffs Array of diff tuples.\n * @return {string} Source text.\n */\ndiff_match_patch.prototype.diff_text1 = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_INSERT) {\n text[x] = diffs[x][1];\n }\n }\n return text.join('');\n};\n\n\n/**\n * Compute and return the destination text (all equalities and insertions).\n * @param {!Array.} diffs Array of diff tuples.\n * @return {string} Destination text.\n */\ndiff_match_patch.prototype.diff_text2 = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_DELETE) {\n text[x] = diffs[x][1];\n }\n }\n return text.join('');\n};\n\n\n/**\n * Compute the Levenshtein distance; the number of inserted, deleted or\n * substituted characters.\n * @param {!Array.} diffs Array of diff tuples.\n * @return {number} Number of changes.\n */\ndiff_match_patch.prototype.diff_levenshtein = function(diffs) {\n var levenshtein = 0;\n var insertions = 0;\n var deletions = 0;\n for (var x = 0; x < diffs.length; x++) {\n var op = diffs[x][0];\n var data = diffs[x][1];\n switch (op) {\n case DIFF_INSERT:\n insertions += data.length;\n break;\n case DIFF_DELETE:\n deletions += data.length;\n break;\n case DIFF_EQUAL:\n // A deletion and an insertion is one substitution.\n levenshtein += Math.max(insertions, deletions);\n insertions = 0;\n deletions = 0;\n break;\n }\n }\n levenshtein += Math.max(insertions, deletions);\n return levenshtein;\n};\n\n\n/**\n * Crush the diff into an encoded string which describes the operations\n * required to transform text1 into text2.\n * E.g. =3\\t-2\\t+ing -> Keep 3 chars, delete 2 chars, insert 'ing'.\n * Operations are tab-separated. Inserted text is escaped using %xx notation.\n * @param {!Array.} diffs Array of diff tuples.\n * @return {string} Delta text.\n */\ndiff_match_patch.prototype.diff_toDelta = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n switch (diffs[x][0]) {\n case DIFF_INSERT:\n text[x] = '+' + encodeURI(diffs[x][1]);\n break;\n case DIFF_DELETE:\n text[x] = '-' + diffs[x][1].length;\n break;\n case DIFF_EQUAL:\n text[x] = '=' + diffs[x][1].length;\n break;\n }\n }\n return text.join('\\t').replace(/%20/g, ' ');\n};\n\n\n/**\n * Given the original text1, and an encoded string which describes the\n * operations required to transform text1 into text2, compute the full diff.\n * @param {string} text1 Source string for the diff.\n * @param {string} delta Delta text.\n * @return {!Array.} Array of diff tuples.\n * @throws {!Error} If invalid input.\n */\ndiff_match_patch.prototype.diff_fromDelta = function(text1, delta) {\n var diffs = [];\n var diffsLength = 0; // Keeping our own length var is faster in JS.\n var pointer = 0; // Cursor in text1\n var tokens = delta.split(/\\t/g);\n for (var x = 0; x < tokens.length; x++) {\n // Each token begins with a one character parameter which specifies the\n // operation of this token (delete, insert, equality).\n var param = tokens[x].substring(1);\n switch (tokens[x].charAt(0)) {\n case '+':\n try {\n diffs[diffsLength++] =\n new diff_match_patch.Diff(DIFF_INSERT, decodeURI(param));\n } catch (ex) {\n // Malformed URI sequence.\n throw new Error('Illegal escape in diff_fromDelta: ' + param);\n }\n break;\n case '-':\n // Fall through.\n case '=':\n var n = parseInt(param, 10);\n if (isNaN(n) || n < 0) {\n throw new Error('Invalid number in diff_fromDelta: ' + param);\n }\n var text = text1.substring(pointer, pointer += n);\n if (tokens[x].charAt(0) == '=') {\n diffs[diffsLength++] = new diff_match_patch.Diff(DIFF_EQUAL, text);\n } else {\n diffs[diffsLength++] = new diff_match_patch.Diff(DIFF_DELETE, text);\n }\n break;\n default:\n // Blank tokens are ok (from a trailing \\t).\n // Anything else is an error.\n if (tokens[x]) {\n throw new Error('Invalid diff operation in diff_fromDelta: ' +\n tokens[x]);\n }\n }\n }\n if (pointer != text1.length) {\n throw new Error('Delta length (' + pointer +\n ') does not equal source text length (' + text1.length + ').');\n }\n return diffs;\n};\n\n\n// MATCH FUNCTIONS\n\n\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc'.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n */\ndiff_match_patch.prototype.match_main = function(text, pattern, loc) {\n // Check for null inputs.\n if (text == null || pattern == null || loc == null) {\n throw new Error('Null input. (match_main)');\n }\n\n loc = Math.max(0, Math.min(loc, text.length));\n if (text == pattern) {\n // Shortcut (potentially not guaranteed by the algorithm)\n return 0;\n } else if (!text.length) {\n // Nothing to match.\n return -1;\n } else if (text.substring(loc, loc + pattern.length) == pattern) {\n // Perfect match at the perfect spot! (Includes case of null pattern)\n return loc;\n } else {\n // Do a fuzzy compare.\n return this.match_bitap_(text, pattern, loc);\n }\n};\n\n\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc' using the\n * Bitap algorithm.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n * @private\n */\ndiff_match_patch.prototype.match_bitap_ = function(text, pattern, loc) {\n if (pattern.length > this.Match_MaxBits) {\n throw new Error('Pattern too long for this browser.');\n }\n\n // Initialise the alphabet.\n var s = this.match_alphabet_(pattern);\n\n var dmp = this; // 'this' becomes 'window' in a closure.\n\n /**\n * Compute and return the score for a match with e errors and x location.\n * Accesses loc and pattern through being a closure.\n * @param {number} e Number of errors in match.\n * @param {number} x Location of match.\n * @return {number} Overall score for match (0.0 = good, 1.0 = bad).\n * @private\n */\n function match_bitapScore_(e, x) {\n var accuracy = e / pattern.length;\n var proximity = Math.abs(loc - x);\n if (!dmp.Match_Distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy;\n }\n return accuracy + (proximity / dmp.Match_Distance);\n }\n\n // Highest score beyond which we give up.\n var score_threshold = this.Match_Threshold;\n // Is there a nearby exact match? (speedup)\n var best_loc = text.indexOf(pattern, loc);\n if (best_loc != -1) {\n score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold);\n // What about in the other direction? (speedup)\n best_loc = text.lastIndexOf(pattern, loc + pattern.length);\n if (best_loc != -1) {\n score_threshold =\n Math.min(match_bitapScore_(0, best_loc), score_threshold);\n }\n }\n\n // Initialise the bit arrays.\n var matchmask = 1 << (pattern.length - 1);\n best_loc = -1;\n\n var bin_min, bin_mid;\n var bin_max = pattern.length + text.length;\n var last_rd;\n for (var d = 0; d < pattern.length; d++) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from 'loc' we can stray at this\n // error level.\n bin_min = 0;\n bin_mid = bin_max;\n while (bin_min < bin_mid) {\n if (match_bitapScore_(d, loc + bin_mid) <= score_threshold) {\n bin_min = bin_mid;\n } else {\n bin_max = bin_mid;\n }\n bin_mid = Math.floor((bin_max - bin_min) / 2 + bin_min);\n }\n // Use the result from this iteration as the maximum for the next.\n bin_max = bin_mid;\n var start = Math.max(1, loc - bin_mid + 1);\n var finish = Math.min(loc + bin_mid, text.length) + pattern.length;\n\n var rd = Array(finish + 2);\n rd[finish + 1] = (1 << d) - 1;\n for (var j = finish; j >= start; j--) {\n // The alphabet (s) is a sparse hash, so the following line generates\n // warnings.\n var charMatch = s[text.charAt(j - 1)];\n if (d === 0) { // First pass: exact match.\n rd[j] = ((rd[j + 1] << 1) | 1) & charMatch;\n } else { // Subsequent passes: fuzzy match.\n rd[j] = (((rd[j + 1] << 1) | 1) & charMatch) |\n (((last_rd[j + 1] | last_rd[j]) << 1) | 1) |\n last_rd[j + 1];\n }\n if (rd[j] & matchmask) {\n var score = match_bitapScore_(d, j - 1);\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (score <= score_threshold) {\n // Told you so.\n score_threshold = score;\n best_loc = j - 1;\n if (best_loc > loc) {\n // When passing loc, don't exceed our current distance from loc.\n start = Math.max(1, 2 * loc - best_loc);\n } else {\n // Already passed loc, downhill from here on in.\n break;\n }\n }\n }\n }\n // No hope for a (better) match at greater error levels.\n if (match_bitapScore_(d + 1, loc) > score_threshold) {\n break;\n }\n last_rd = rd;\n }\n return best_loc;\n};\n\n\n/**\n * Initialise the alphabet for the Bitap algorithm.\n * @param {string} pattern The text to encode.\n * @return {!Object} Hash of character locations.\n * @private\n */\ndiff_match_patch.prototype.match_alphabet_ = function(pattern) {\n var s = {};\n for (var i = 0; i < pattern.length; i++) {\n s[pattern.charAt(i)] = 0;\n }\n for (var i = 0; i < pattern.length; i++) {\n s[pattern.charAt(i)] |= 1 << (pattern.length - i - 1);\n }\n return s;\n};\n\n\n// PATCH FUNCTIONS\n\n\n/**\n * Increase the context until it is unique,\n * but don't let the pattern expand beyond Match_MaxBits.\n * @param {!diff_match_patch.patch_obj} patch The patch to grow.\n * @param {string} text Source text.\n * @private\n */\ndiff_match_patch.prototype.patch_addContext_ = function(patch, text) {\n if (text.length == 0) {\n return;\n }\n if (patch.start2 === null) {\n throw Error('patch not initialized');\n }\n var pattern = text.substring(patch.start2, patch.start2 + patch.length1);\n var padding = 0;\n\n // Look for the first and last matches of pattern in text. If two different\n // matches are found, increase the pattern length.\n while (text.indexOf(pattern) != text.lastIndexOf(pattern) &&\n pattern.length < this.Match_MaxBits - this.Patch_Margin -\n this.Patch_Margin) {\n padding += this.Patch_Margin;\n pattern = text.substring(patch.start2 - padding,\n patch.start2 + patch.length1 + padding);\n }\n // Add one chunk for good luck.\n padding += this.Patch_Margin;\n\n // Add the prefix.\n var prefix = text.substring(patch.start2 - padding, patch.start2);\n if (prefix) {\n patch.diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, prefix));\n }\n // Add the suffix.\n var suffix = text.substring(patch.start2 + patch.length1,\n patch.start2 + patch.length1 + padding);\n if (suffix) {\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, suffix));\n }\n\n // Roll back the start points.\n patch.start1 -= prefix.length;\n patch.start2 -= prefix.length;\n // Extend the lengths.\n patch.length1 += prefix.length + suffix.length;\n patch.length2 += prefix.length + suffix.length;\n};\n\n\n/**\n * Compute a list of patches to turn text1 into text2.\n * Use diffs if provided, otherwise compute it ourselves.\n * There are four ways to call this function, depending on what data is\n * available to the caller:\n * Method 1:\n * a = text1, b = text2\n * Method 2:\n * a = diffs\n * Method 3 (optimal):\n * a = text1, b = diffs\n * Method 4 (deprecated, use method 3):\n * a = text1, b = text2, c = diffs\n *\n * @param {string|!Array.} a text1 (methods 1,3,4) or\n * Array of diff tuples for text1 to text2 (method 2).\n * @param {string|!Array.=} opt_b text2 (methods 1,4) or\n * Array of diff tuples for text1 to text2 (method 3) or undefined (method 2).\n * @param {string|!Array.=} opt_c Array of diff tuples\n * for text1 to text2 (method 4) or undefined (methods 1,2,3).\n * @return {!Array.} Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_make = function(a, opt_b, opt_c) {\n var text1, diffs;\n if (typeof a == 'string' && typeof opt_b == 'string' &&\n typeof opt_c == 'undefined') {\n // Method 1: text1, text2\n // Compute diffs from text1 and text2.\n text1 = /** @type {string} */(a);\n diffs = this.diff_main(text1, /** @type {string} */(opt_b), true);\n if (diffs.length > 2) {\n this.diff_cleanupSemantic(diffs);\n this.diff_cleanupEfficiency(diffs);\n }\n } else if (a && typeof a == 'object' && typeof opt_b == 'undefined' &&\n typeof opt_c == 'undefined') {\n // Method 2: diffs\n // Compute text1 from diffs.\n diffs = /** @type {!Array.} */(a);\n text1 = this.diff_text1(diffs);\n } else if (typeof a == 'string' && opt_b && typeof opt_b == 'object' &&\n typeof opt_c == 'undefined') {\n // Method 3: text1, diffs\n text1 = /** @type {string} */(a);\n diffs = /** @type {!Array.} */(opt_b);\n } else if (typeof a == 'string' && typeof opt_b == 'string' &&\n opt_c && typeof opt_c == 'object') {\n // Method 4: text1, text2, diffs\n // text2 is not used.\n text1 = /** @type {string} */(a);\n diffs = /** @type {!Array.} */(opt_c);\n } else {\n throw new Error('Unknown call format to patch_make.');\n }\n\n if (diffs.length === 0) {\n return []; // Get rid of the null case.\n }\n var patches = [];\n var patch = new diff_match_patch.patch_obj();\n var patchDiffLength = 0; // Keeping our own length var is faster in JS.\n var char_count1 = 0; // Number of characters into the text1 string.\n var char_count2 = 0; // Number of characters into the text2 string.\n // Start with text1 (prepatch_text) and apply the diffs until we arrive at\n // text2 (postpatch_text). We recreate the patches one by one to determine\n // context info.\n var prepatch_text = text1;\n var postpatch_text = text1;\n for (var x = 0; x < diffs.length; x++) {\n var diff_type = diffs[x][0];\n var diff_text = diffs[x][1];\n\n if (!patchDiffLength && diff_type !== DIFF_EQUAL) {\n // A new patch starts here.\n patch.start1 = char_count1;\n patch.start2 = char_count2;\n }\n\n switch (diff_type) {\n case DIFF_INSERT:\n patch.diffs[patchDiffLength++] = diffs[x];\n patch.length2 += diff_text.length;\n postpatch_text = postpatch_text.substring(0, char_count2) + diff_text +\n postpatch_text.substring(char_count2);\n break;\n case DIFF_DELETE:\n patch.length1 += diff_text.length;\n patch.diffs[patchDiffLength++] = diffs[x];\n postpatch_text = postpatch_text.substring(0, char_count2) +\n postpatch_text.substring(char_count2 +\n diff_text.length);\n break;\n case DIFF_EQUAL:\n if (diff_text.length <= 2 * this.Patch_Margin &&\n patchDiffLength && diffs.length != x + 1) {\n // Small equality inside a patch.\n patch.diffs[patchDiffLength++] = diffs[x];\n patch.length1 += diff_text.length;\n patch.length2 += diff_text.length;\n } else if (diff_text.length >= 2 * this.Patch_Margin) {\n // Time for a new patch.\n if (patchDiffLength) {\n this.patch_addContext_(patch, prepatch_text);\n patches.push(patch);\n patch = new diff_match_patch.patch_obj();\n patchDiffLength = 0;\n // Unlike Unidiff, our patch lists have a rolling context.\n // https://github.com/google/diff-match-patch/wiki/Unidiff\n // Update prepatch text & pos to reflect the application of the\n // just completed patch.\n prepatch_text = postpatch_text;\n char_count1 = char_count2;\n }\n }\n break;\n }\n\n // Update the current character count.\n if (diff_type !== DIFF_INSERT) {\n char_count1 += diff_text.length;\n }\n if (diff_type !== DIFF_DELETE) {\n char_count2 += diff_text.length;\n }\n }\n // Pick up the leftover patch if not empty.\n if (patchDiffLength) {\n this.patch_addContext_(patch, prepatch_text);\n patches.push(patch);\n }\n\n return patches;\n};\n\n\n/**\n * Given an array of patches, return another array that is identical.\n * @param {!Array.} patches Array of Patch objects.\n * @return {!Array.} Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_deepCopy = function(patches) {\n // Making deep copies is hard in JavaScript.\n var patchesCopy = [];\n for (var x = 0; x < patches.length; x++) {\n var patch = patches[x];\n var patchCopy = new diff_match_patch.patch_obj();\n patchCopy.diffs = [];\n for (var y = 0; y < patch.diffs.length; y++) {\n patchCopy.diffs[y] =\n new diff_match_patch.Diff(patch.diffs[y][0], patch.diffs[y][1]);\n }\n patchCopy.start1 = patch.start1;\n patchCopy.start2 = patch.start2;\n patchCopy.length1 = patch.length1;\n patchCopy.length2 = patch.length2;\n patchesCopy[x] = patchCopy;\n }\n return patchesCopy;\n};\n\n\n/**\n * Merge a set of patches onto the text. Return a patched text, as well\n * as a list of true/false values indicating which patches were applied.\n * @param {!Array.} patches Array of Patch objects.\n * @param {string} text Old text.\n * @return {!Array.>} Two element Array, containing the\n * new text and an array of boolean values.\n */\ndiff_match_patch.prototype.patch_apply = function(patches, text) {\n if (patches.length == 0) {\n return [text, []];\n }\n\n // Deep copy the patches so that no changes are made to originals.\n patches = this.patch_deepCopy(patches);\n\n var nullPadding = this.patch_addPadding(patches);\n text = nullPadding + text + nullPadding;\n\n this.patch_splitMax(patches);\n // delta keeps track of the offset between the expected and actual location\n // of the previous patch. If there are patches expected at positions 10 and\n // 20, but the first patch was found at 12, delta is 2 and the second patch\n // has an effective expected position of 22.\n var delta = 0;\n var results = [];\n for (var x = 0; x < patches.length; x++) {\n var expected_loc = patches[x].start2 + delta;\n var text1 = this.diff_text1(patches[x].diffs);\n var start_loc;\n var end_loc = -1;\n if (text1.length > this.Match_MaxBits) {\n // patch_splitMax will only provide an oversized pattern in the case of\n // a monster delete.\n start_loc = this.match_main(text, text1.substring(0, this.Match_MaxBits),\n expected_loc);\n if (start_loc != -1) {\n end_loc = this.match_main(text,\n text1.substring(text1.length - this.Match_MaxBits),\n expected_loc + text1.length - this.Match_MaxBits);\n if (end_loc == -1 || start_loc >= end_loc) {\n // Can't find valid trailing context. Drop this patch.\n start_loc = -1;\n }\n }\n } else {\n start_loc = this.match_main(text, text1, expected_loc);\n }\n if (start_loc == -1) {\n // No match found. :(\n results[x] = false;\n // Subtract the delta for this failed patch from subsequent patches.\n delta -= patches[x].length2 - patches[x].length1;\n } else {\n // Found a match. :)\n results[x] = true;\n delta = start_loc - expected_loc;\n var text2;\n if (end_loc == -1) {\n text2 = text.substring(start_loc, start_loc + text1.length);\n } else {\n text2 = text.substring(start_loc, end_loc + this.Match_MaxBits);\n }\n if (text1 == text2) {\n // Perfect match, just shove the replacement text in.\n text = text.substring(0, start_loc) +\n this.diff_text2(patches[x].diffs) +\n text.substring(start_loc + text1.length);\n } else {\n // Imperfect match. Run a diff to get a framework of equivalent\n // indices.\n var diffs = this.diff_main(text1, text2, false);\n if (text1.length > this.Match_MaxBits &&\n this.diff_levenshtein(diffs) / text1.length >\n this.Patch_DeleteThreshold) {\n // The end points match, but the content is unacceptably bad.\n results[x] = false;\n } else {\n this.diff_cleanupSemanticLossless(diffs);\n var index1 = 0;\n var index2;\n for (var y = 0; y < patches[x].diffs.length; y++) {\n var mod = patches[x].diffs[y];\n if (mod[0] !== DIFF_EQUAL) {\n index2 = this.diff_xIndex(diffs, index1);\n }\n if (mod[0] === DIFF_INSERT) { // Insertion\n text = text.substring(0, start_loc + index2) + mod[1] +\n text.substring(start_loc + index2);\n } else if (mod[0] === DIFF_DELETE) { // Deletion\n text = text.substring(0, start_loc + index2) +\n text.substring(start_loc + this.diff_xIndex(diffs,\n index1 + mod[1].length));\n }\n if (mod[0] !== DIFF_DELETE) {\n index1 += mod[1].length;\n }\n }\n }\n }\n }\n }\n // Strip the padding off.\n text = text.substring(nullPadding.length, text.length - nullPadding.length);\n return [text, results];\n};\n\n\n/**\n * Add some padding on text start and end so that edges can match something.\n * Intended to be called only from within patch_apply.\n * @param {!Array.} patches Array of Patch objects.\n * @return {string} The padding string added to each side.\n */\ndiff_match_patch.prototype.patch_addPadding = function(patches) {\n var paddingLength = this.Patch_Margin;\n var nullPadding = '';\n for (var x = 1; x <= paddingLength; x++) {\n nullPadding += String.fromCharCode(x);\n }\n\n // Bump all the patches forward.\n for (var x = 0; x < patches.length; x++) {\n patches[x].start1 += paddingLength;\n patches[x].start2 += paddingLength;\n }\n\n // Add some padding on start of first diff.\n var patch = patches[0];\n var diffs = patch.diffs;\n if (diffs.length == 0 || diffs[0][0] != DIFF_EQUAL) {\n // Add nullPadding equality.\n diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, nullPadding));\n patch.start1 -= paddingLength; // Should be 0.\n patch.start2 -= paddingLength; // Should be 0.\n patch.length1 += paddingLength;\n patch.length2 += paddingLength;\n } else if (paddingLength > diffs[0][1].length) {\n // Grow first equality.\n var extraLength = paddingLength - diffs[0][1].length;\n diffs[0][1] = nullPadding.substring(diffs[0][1].length) + diffs[0][1];\n patch.start1 -= extraLength;\n patch.start2 -= extraLength;\n patch.length1 += extraLength;\n patch.length2 += extraLength;\n }\n\n // Add some padding on end of last diff.\n patch = patches[patches.length - 1];\n diffs = patch.diffs;\n if (diffs.length == 0 || diffs[diffs.length - 1][0] != DIFF_EQUAL) {\n // Add nullPadding equality.\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, nullPadding));\n patch.length1 += paddingLength;\n patch.length2 += paddingLength;\n } else if (paddingLength > diffs[diffs.length - 1][1].length) {\n // Grow last equality.\n var extraLength = paddingLength - diffs[diffs.length - 1][1].length;\n diffs[diffs.length - 1][1] += nullPadding.substring(0, extraLength);\n patch.length1 += extraLength;\n patch.length2 += extraLength;\n }\n\n return nullPadding;\n};\n\n\n/**\n * Look through the patches and break up any which are longer than the maximum\n * limit of the match algorithm.\n * Intended to be called only from within patch_apply.\n * @param {!Array.} patches Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_splitMax = function(patches) {\n var patch_size = this.Match_MaxBits;\n for (var x = 0; x < patches.length; x++) {\n if (patches[x].length1 <= patch_size) {\n continue;\n }\n var bigpatch = patches[x];\n // Remove the big old patch.\n patches.splice(x--, 1);\n var start1 = bigpatch.start1;\n var start2 = bigpatch.start2;\n var precontext = '';\n while (bigpatch.diffs.length !== 0) {\n // Create one of several smaller patches.\n var patch = new diff_match_patch.patch_obj();\n var empty = true;\n patch.start1 = start1 - precontext.length;\n patch.start2 = start2 - precontext.length;\n if (precontext !== '') {\n patch.length1 = patch.length2 = precontext.length;\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, precontext));\n }\n while (bigpatch.diffs.length !== 0 &&\n patch.length1 < patch_size - this.Patch_Margin) {\n var diff_type = bigpatch.diffs[0][0];\n var diff_text = bigpatch.diffs[0][1];\n if (diff_type === DIFF_INSERT) {\n // Insertions are harmless.\n patch.length2 += diff_text.length;\n start2 += diff_text.length;\n patch.diffs.push(bigpatch.diffs.shift());\n empty = false;\n } else if (diff_type === DIFF_DELETE && patch.diffs.length == 1 &&\n patch.diffs[0][0] == DIFF_EQUAL &&\n diff_text.length > 2 * patch_size) {\n // This is a large deletion. Let it pass in one chunk.\n patch.length1 += diff_text.length;\n start1 += diff_text.length;\n empty = false;\n patch.diffs.push(new diff_match_patch.Diff(diff_type, diff_text));\n bigpatch.diffs.shift();\n } else {\n // Deletion or equality. Only take as much as we can stomach.\n diff_text = diff_text.substring(0,\n patch_size - patch.length1 - this.Patch_Margin);\n patch.length1 += diff_text.length;\n start1 += diff_text.length;\n if (diff_type === DIFF_EQUAL) {\n patch.length2 += diff_text.length;\n start2 += diff_text.length;\n } else {\n empty = false;\n }\n patch.diffs.push(new diff_match_patch.Diff(diff_type, diff_text));\n if (diff_text == bigpatch.diffs[0][1]) {\n bigpatch.diffs.shift();\n } else {\n bigpatch.diffs[0][1] =\n bigpatch.diffs[0][1].substring(diff_text.length);\n }\n }\n }\n // Compute the head context for the next patch.\n precontext = this.diff_text2(patch.diffs);\n precontext =\n precontext.substring(precontext.length - this.Patch_Margin);\n // Append the end context for this patch.\n var postcontext = this.diff_text1(bigpatch.diffs)\n .substring(0, this.Patch_Margin);\n if (postcontext !== '') {\n patch.length1 += postcontext.length;\n patch.length2 += postcontext.length;\n if (patch.diffs.length !== 0 &&\n patch.diffs[patch.diffs.length - 1][0] === DIFF_EQUAL) {\n patch.diffs[patch.diffs.length - 1][1] += postcontext;\n } else {\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, postcontext));\n }\n }\n if (!empty) {\n patches.splice(++x, 0, patch);\n }\n }\n }\n};\n\n\n/**\n * Take a list of patches and return a textual representation.\n * @param {!Array.} patches Array of Patch objects.\n * @return {string} Text representation of patches.\n */\ndiff_match_patch.prototype.patch_toText = function(patches) {\n var text = [];\n for (var x = 0; x < patches.length; x++) {\n text[x] = patches[x];\n }\n return text.join('');\n};\n\n\n/**\n * Parse a textual representation of patches and return a list of Patch objects.\n * @param {string} textline Text representation of patches.\n * @return {!Array.} Array of Patch objects.\n * @throws {!Error} If invalid input.\n */\ndiff_match_patch.prototype.patch_fromText = function(textline) {\n var patches = [];\n if (!textline) {\n return patches;\n }\n var text = textline.split('\\n');\n var textPointer = 0;\n var patchHeader = /^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;\n while (textPointer < text.length) {\n var m = text[textPointer].match(patchHeader);\n if (!m) {\n throw new Error('Invalid patch string: ' + text[textPointer]);\n }\n var patch = new diff_match_patch.patch_obj();\n patches.push(patch);\n patch.start1 = parseInt(m[1], 10);\n if (m[2] === '') {\n patch.start1--;\n patch.length1 = 1;\n } else if (m[2] == '0') {\n patch.length1 = 0;\n } else {\n patch.start1--;\n patch.length1 = parseInt(m[2], 10);\n }\n\n patch.start2 = parseInt(m[3], 10);\n if (m[4] === '') {\n patch.start2--;\n patch.length2 = 1;\n } else if (m[4] == '0') {\n patch.length2 = 0;\n } else {\n patch.start2--;\n patch.length2 = parseInt(m[4], 10);\n }\n textPointer++;\n\n while (textPointer < text.length) {\n var sign = text[textPointer].charAt(0);\n try {\n var line = decodeURI(text[textPointer].substring(1));\n } catch (ex) {\n // Malformed URI sequence.\n throw new Error('Illegal escape in patch_fromText: ' + line);\n }\n if (sign == '-') {\n // Deletion.\n patch.diffs.push(new diff_match_patch.Diff(DIFF_DELETE, line));\n } else if (sign == '+') {\n // Insertion.\n patch.diffs.push(new diff_match_patch.Diff(DIFF_INSERT, line));\n } else if (sign == ' ') {\n // Minor equality.\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, line));\n } else if (sign == '@') {\n // Start of next patch.\n break;\n } else if (sign === '') {\n // Blank line? Whatever.\n } else {\n // WTF?\n throw new Error('Invalid patch mode \"' + sign + '\" in: ' + line);\n }\n textPointer++;\n }\n }\n return patches;\n};\n\n\n/**\n * Class representing one patch operation.\n * @constructor\n */\ndiff_match_patch.patch_obj = function() {\n /** @type {!Array.} */\n this.diffs = [];\n /** @type {?number} */\n this.start1 = null;\n /** @type {?number} */\n this.start2 = null;\n /** @type {number} */\n this.length1 = 0;\n /** @type {number} */\n this.length2 = 0;\n};\n\n\n/**\n * Emulate GNU diff's format.\n * Header: @@ -382,8 +481,9 @@\n * Indices are printed as 1-based, not 0-based.\n * @return {string} The GNU diff string.\n */\ndiff_match_patch.patch_obj.prototype.toString = function() {\n var coords1, coords2;\n if (this.length1 === 0) {\n coords1 = this.start1 + ',0';\n } else if (this.length1 == 1) {\n coords1 = this.start1 + 1;\n } else {\n coords1 = (this.start1 + 1) + ',' + this.length1;\n }\n if (this.length2 === 0) {\n coords2 = this.start2 + ',0';\n } else if (this.length2 == 1) {\n coords2 = this.start2 + 1;\n } else {\n coords2 = (this.start2 + 1) + ',' + this.length2;\n }\n var text = ['@@ -' + coords1 + ' +' + coords2 + ' @@\\n'];\n var op;\n // Escape the body of the patch with %xx notation.\n for (var x = 0; x < this.diffs.length; x++) {\n switch (this.diffs[x][0]) {\n case DIFF_INSERT:\n op = '+';\n break;\n case DIFF_DELETE:\n op = '-';\n break;\n case DIFF_EQUAL:\n op = ' ';\n break;\n }\n text[x + 1] = op + encodeURI(this.diffs[x][1]) + '\\n';\n }\n return text.join('').replace(/%20/g, ' ');\n};\n\n\n// The following export code was added by @ForbesLindesay\nmodule.exports = diff_match_patch;\nmodule.exports['diff_match_patch'] = diff_match_patch;\nmodule.exports['DIFF_DELETE'] = DIFF_DELETE;\nmodule.exports['DIFF_INSERT'] = DIFF_INSERT;\nmodule.exports['DIFF_EQUAL'] = DIFF_EQUAL;","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEqual;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\nvar _aceBuilds = _interopRequireWildcard(require(\"ace-builds\"));\nvar _react = _interopRequireWildcard(require(\"react\"));\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\nvar _lodash = _interopRequireDefault(require(\"lodash.isequal\"));\nvar _editorOptions = require(\"./editorOptions.js\");\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nvar ReactAce = /*#__PURE__*/function (_Component) {\n _inherits(ReactAce, _Component);\n var _super = _createSuper(ReactAce);\n function ReactAce(props) {\n var _this;\n _classCallCheck(this, ReactAce);\n _this = _super.call(this, props);\n _editorOptions.editorEvents.forEach(function (method) {\n _this[method] = _this[method].bind(_assertThisInitialized(_this));\n });\n _this.debounce = _editorOptions.debounce;\n return _this;\n }\n _createClass(ReactAce, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n var _this$props = this.props,\n className = _this$props.className,\n onBeforeLoad = _this$props.onBeforeLoad,\n onValidate = _this$props.onValidate,\n mode = _this$props.mode,\n focus = _this$props.focus,\n theme = _this$props.theme,\n fontSize = _this$props.fontSize,\n value = _this$props.value,\n defaultValue = _this$props.defaultValue,\n cursorStart = _this$props.cursorStart,\n showGutter = _this$props.showGutter,\n wrapEnabled = _this$props.wrapEnabled,\n showPrintMargin = _this$props.showPrintMargin,\n _this$props$scrollMar = _this$props.scrollMargin,\n scrollMargin = _this$props$scrollMar === void 0 ? [0, 0, 0, 0] : _this$props$scrollMar,\n keyboardHandler = _this$props.keyboardHandler,\n onLoad = _this$props.onLoad,\n commands = _this$props.commands,\n annotations = _this$props.annotations,\n markers = _this$props.markers;\n this.editor = _aceBuilds[\"default\"].edit(this.refEditor);\n if (onBeforeLoad) {\n onBeforeLoad(_aceBuilds[\"default\"]);\n }\n var editorProps = Object.keys(this.props.editorProps);\n for (var i = 0; i < editorProps.length; i++) {\n this.editor[editorProps[i]] = this.props.editorProps[editorProps[i]];\n }\n if (this.props.debounceChangePeriod) {\n this.onChange = this.debounce(this.onChange, this.props.debounceChangePeriod);\n }\n this.editor.renderer.setScrollMargin(scrollMargin[0], scrollMargin[1], scrollMargin[2], scrollMargin[3]);\n this.editor.getSession().setMode(\"ace/mode/\".concat(mode));\n this.editor.setTheme(\"ace/theme/\".concat(theme));\n this.editor.setFontSize(fontSize);\n this.editor.getSession().setValue(!defaultValue ? value : defaultValue, cursorStart);\n this.editor.navigateFileEnd();\n this.editor.renderer.setShowGutter(showGutter);\n this.editor.getSession().setUseWrapMode(wrapEnabled);\n this.editor.setShowPrintMargin(showPrintMargin);\n this.editor.on('focus', this.onFocus);\n this.editor.on('blur', this.onBlur);\n this.editor.on('copy', this.onCopy);\n this.editor.on('paste', this.onPaste);\n this.editor.on('change', this.onChange);\n this.editor.on('input', this.onInput);\n this.editor.getSession().selection.on('changeSelection', this.onSelectionChange);\n this.editor.getSession().selection.on('changeCursor', this.onCursorChange);\n if (onValidate) {\n this.editor.getSession().on('changeAnnotation', function () {\n var annotations = _this2.editor.getSession().getAnnotations();\n _this2.props.onValidate(annotations);\n });\n }\n this.editor.session.on('changeScrollTop', this.onScroll);\n this.editor.getSession().setAnnotations(annotations || []);\n if (markers && markers.length > 0) {\n this.handleMarkers(markers);\n }\n\n // get a list of possible options to avoid 'misspelled option errors'\n var availableOptions = this.editor.$options;\n for (var _i = 0; _i < _editorOptions.editorOptions.length; _i++) {\n var option = _editorOptions.editorOptions[_i];\n if (Object.prototype.hasOwnProperty.call(availableOptions, option)) {\n this.editor.setOption(option, this.props[option]);\n } else if (this.props[option]) {\n console.warn(\"ReactAce: editor option \".concat(option, \" was activated but not found. Did you need to import a related tool or did you possibly mispell the option?\"));\n }\n }\n this.handleOptions(this.props);\n if (Array.isArray(commands)) {\n commands.forEach(function (command) {\n if (typeof command.exec == 'string') {\n _this2.editor.commands.bindKey(command.bindKey, command.exec);\n } else {\n _this2.editor.commands.addCommand(command);\n }\n });\n }\n if (keyboardHandler) {\n this.editor.setKeyboardHandler('ace/keyboard/' + keyboardHandler);\n }\n if (className) {\n this.refEditor.className += ' ' + className;\n }\n if (onLoad) {\n onLoad(this.editor);\n }\n this.editor.resize();\n if (focus) {\n this.editor.focus();\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n var oldProps = prevProps;\n var nextProps = this.props;\n for (var i = 0; i < _editorOptions.editorOptions.length; i++) {\n var option = _editorOptions.editorOptions[i];\n if (nextProps[option] !== oldProps[option]) {\n this.editor.setOption(option, nextProps[option]);\n }\n }\n if (nextProps.className !== oldProps.className) {\n var appliedClasses = this.refEditor.className;\n var appliedClassesArray = appliedClasses.trim().split(' ');\n var oldClassesArray = oldProps.className.trim().split(' ');\n oldClassesArray.forEach(function (oldClass) {\n var index = appliedClassesArray.indexOf(oldClass);\n appliedClassesArray.splice(index, 1);\n });\n this.refEditor.className = ' ' + nextProps.className + ' ' + appliedClassesArray.join(' ');\n }\n\n // First process editor value, as it may create a new session (see issue #300)\n if (this.editor && this.editor.getValue() !== nextProps.value) {\n // editor.setValue is a synchronous function call, change event is emitted before setValue return.\n this.silent = true;\n var pos = this.editor.session.selection.toJSON();\n this.editor.setValue(nextProps.value, nextProps.cursorStart);\n this.editor.session.selection.fromJSON(pos);\n this.silent = false;\n }\n if (nextProps.mode !== oldProps.mode) {\n this.editor.getSession().setMode('ace/mode/' + nextProps.mode);\n }\n if (nextProps.theme !== oldProps.theme) {\n this.editor.setTheme('ace/theme/' + nextProps.theme);\n }\n if (nextProps.keyboardHandler !== oldProps.keyboardHandler) {\n if (nextProps.keyboardHandler) {\n this.editor.setKeyboardHandler('ace/keyboard/' + nextProps.keyboardHandler);\n } else {\n this.editor.setKeyboardHandler(null);\n }\n }\n if (nextProps.fontSize !== oldProps.fontSize) {\n this.editor.setFontSize(nextProps.fontSize);\n }\n if (nextProps.wrapEnabled !== oldProps.wrapEnabled) {\n this.editor.getSession().setUseWrapMode(nextProps.wrapEnabled);\n }\n if (nextProps.showPrintMargin !== oldProps.showPrintMargin) {\n this.editor.setShowPrintMargin(nextProps.showPrintMargin);\n }\n if (nextProps.showGutter !== oldProps.showGutter) {\n this.editor.renderer.setShowGutter(nextProps.showGutter);\n }\n if (!(0, _lodash[\"default\"])(nextProps.setOptions, oldProps.setOptions)) {\n this.handleOptions(nextProps);\n }\n if (!(0, _lodash[\"default\"])(nextProps.annotations, oldProps.annotations)) {\n this.editor.getSession().setAnnotations(nextProps.annotations || []);\n }\n if (!(0, _lodash[\"default\"])(nextProps.markers, oldProps.markers) && Array.isArray(nextProps.markers)) {\n this.handleMarkers(nextProps.markers);\n }\n\n // this doesn't look like it works at all....\n if (!(0, _lodash[\"default\"])(nextProps.scrollMargin, oldProps.scrollMargin)) {\n this.handleScrollMargins(nextProps.scrollMargin);\n }\n if (prevProps.height !== this.props.height || prevProps.width !== this.props.width) {\n this.editor.resize();\n }\n if (this.props.focus && !prevProps.focus) {\n this.editor.focus();\n }\n }\n }, {\n key: \"handleScrollMargins\",\n value: function handleScrollMargins() {\n var margins = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [0, 0, 0, 0];\n this.editor.renderer.setScrollMargins(margins[0], margins[1], margins[2], margins[3]);\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.editor.destroy();\n this.editor = null;\n }\n }, {\n key: \"onChange\",\n value: function onChange(event) {\n if (this.props.onChange && !this.silent) {\n var value = this.editor.getValue();\n this.props.onChange(value, event);\n }\n }\n }, {\n key: \"onSelectionChange\",\n value: function onSelectionChange(event) {\n if (this.props.onSelectionChange) {\n var value = this.editor.getSelection();\n this.props.onSelectionChange(value, event);\n }\n }\n }, {\n key: \"onCursorChange\",\n value: function onCursorChange(event) {\n if (this.props.onCursorChange) {\n var value = this.editor.getSelection();\n this.props.onCursorChange(value, event);\n }\n }\n }, {\n key: \"onInput\",\n value: function onInput(event) {\n if (this.props.onInput) {\n this.props.onInput(event);\n }\n }\n }, {\n key: \"onFocus\",\n value: function onFocus(event) {\n if (this.props.onFocus) {\n this.props.onFocus(event, this.editor);\n }\n }\n }, {\n key: \"onBlur\",\n value: function onBlur(event) {\n if (this.props.onBlur) {\n this.props.onBlur(event, this.editor);\n }\n }\n }, {\n key: \"onCopy\",\n value: function onCopy(text) {\n if (this.props.onCopy) {\n this.props.onCopy(text);\n }\n }\n }, {\n key: \"onPaste\",\n value: function onPaste(text) {\n if (this.props.onPaste) {\n this.props.onPaste(text);\n }\n }\n }, {\n key: \"onScroll\",\n value: function onScroll() {\n if (this.props.onScroll) {\n this.props.onScroll(this.editor);\n }\n }\n }, {\n key: \"handleOptions\",\n value: function handleOptions(props) {\n var setOptions = Object.keys(props.setOptions);\n for (var y = 0; y < setOptions.length; y++) {\n this.editor.setOption(setOptions[y], props.setOptions[setOptions[y]]);\n }\n }\n }, {\n key: \"handleMarkers\",\n value: function handleMarkers(markers) {\n var _this3 = this;\n // remove foreground markers\n var currentMarkers = this.editor.getSession().getMarkers(true);\n for (var i in currentMarkers) {\n if (Object.prototype.hasOwnProperty.call(currentMarkers, i)) {\n this.editor.getSession().removeMarker(currentMarkers[i].id);\n }\n }\n // remove background markers\n currentMarkers = this.editor.getSession().getMarkers(false);\n for (var _i2 in currentMarkers) {\n if (Object.prototype.hasOwnProperty.call(currentMarkers, _i2)) {\n this.editor.getSession().removeMarker(currentMarkers[_i2].id);\n }\n }\n // add new markers\n markers.forEach(function (_ref) {\n var startRow = _ref.startRow,\n startCol = _ref.startCol,\n endRow = _ref.endRow,\n endCol = _ref.endCol,\n className = _ref.className,\n type = _ref.type,\n _ref$inFront = _ref.inFront,\n inFront = _ref$inFront === void 0 ? false : _ref$inFront;\n var range = new _aceBuilds.Range(startRow, startCol, endRow, endCol);\n _this3.editor.getSession().addMarker(range, className, type, inFront);\n });\n }\n }, {\n key: \"updateRef\",\n value: function updateRef(item) {\n this.refEditor = item;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n name = _this$props2.name,\n width = _this$props2.width,\n height = _this$props2.height,\n style = _this$props2.style;\n var divStyle = _objectSpread({\n width: width,\n height: height\n }, style);\n return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n ref: this.updateRef,\n id: name,\n style: divStyle\n });\n }\n }]);\n return ReactAce;\n}(_react.Component);\nexports[\"default\"] = ReactAce;\nReactAce.propTypes = {\n mode: _propTypes[\"default\"].string,\n focus: _propTypes[\"default\"].bool,\n theme: _propTypes[\"default\"].string,\n name: _propTypes[\"default\"].string,\n className: _propTypes[\"default\"].string,\n height: _propTypes[\"default\"].string,\n width: _propTypes[\"default\"].string,\n fontSize: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].number, _propTypes[\"default\"].string]),\n showGutter: _propTypes[\"default\"].bool,\n onChange: _propTypes[\"default\"].func,\n onCopy: _propTypes[\"default\"].func,\n onPaste: _propTypes[\"default\"].func,\n onFocus: _propTypes[\"default\"].func,\n onInput: _propTypes[\"default\"].func,\n onBlur: _propTypes[\"default\"].func,\n onScroll: _propTypes[\"default\"].func,\n value: _propTypes[\"default\"].string,\n defaultValue: _propTypes[\"default\"].string,\n onLoad: _propTypes[\"default\"].func,\n onSelectionChange: _propTypes[\"default\"].func,\n onCursorChange: _propTypes[\"default\"].func,\n onBeforeLoad: _propTypes[\"default\"].func,\n onValidate: _propTypes[\"default\"].func,\n minLines: _propTypes[\"default\"].number,\n maxLines: _propTypes[\"default\"].number,\n readOnly: _propTypes[\"default\"].bool,\n highlightActiveLine: _propTypes[\"default\"].bool,\n tabSize: _propTypes[\"default\"].number,\n showPrintMargin: _propTypes[\"default\"].bool,\n cursorStart: _propTypes[\"default\"].number,\n debounceChangePeriod: _propTypes[\"default\"].number,\n editorProps: _propTypes[\"default\"].object,\n setOptions: _propTypes[\"default\"].object,\n style: _propTypes[\"default\"].object,\n scrollMargin: _propTypes[\"default\"].array,\n annotations: _propTypes[\"default\"].array,\n markers: _propTypes[\"default\"].array,\n keyboardHandler: _propTypes[\"default\"].string,\n wrapEnabled: _propTypes[\"default\"].bool,\n enableBasicAutocompletion: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].bool, _propTypes[\"default\"].array]),\n enableLiveAutocompletion: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].bool, _propTypes[\"default\"].array]),\n commands: _propTypes[\"default\"].array\n};\nReactAce.defaultProps = {\n name: 'ace-editor',\n focus: false,\n mode: '',\n theme: '',\n height: '500px',\n width: '500px',\n value: '',\n fontSize: 12,\n showGutter: true,\n onChange: null,\n onPaste: null,\n onLoad: null,\n onScroll: null,\n minLines: null,\n maxLines: null,\n readOnly: false,\n highlightActiveLine: true,\n showPrintMargin: true,\n tabSize: 4,\n cursorStart: 1,\n editorProps: {},\n style: {},\n scrollMargin: [0, 0, 0, 0],\n setOptions: {},\n wrapEnabled: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: false\n};","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\nvar _split = _interopRequireDefault(require(\"./split.js\"));\nvar _react = _interopRequireWildcard(require(\"react\"));\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\nvar _diffMatchPatch = _interopRequireDefault(require(\"diff-match-patch\"));\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nvar DiffComponent = /*#__PURE__*/function (_Component) {\n _inherits(DiffComponent, _Component);\n var _super = _createSuper(DiffComponent);\n function DiffComponent() {\n _classCallCheck(this, DiffComponent);\n return _super.apply(this, arguments);\n }\n _createClass(DiffComponent, [{\n key: \"diff\",\n value: function diff() {\n var dmp = new _diffMatchPatch[\"default\"]();\n var lhString = this.props.value[0];\n var rhString = this.props.value[1];\n if (lhString.length === 0 && rhString.length === 0) {\n return [];\n }\n var diff = dmp.diff_main(lhString, rhString);\n dmp.diff_cleanupSemantic(diff);\n var diffedLines = this.generateDiffedLines(diff);\n var codeEditorSettings = this.setCodeMarkers(diffedLines);\n return codeEditorSettings;\n }\n }, {\n key: \"generateDiffedLines\",\n value: function generateDiffedLines(diff) {\n var C = {\n DIFF_EQUAL: 0,\n DIFF_DELETE: -1,\n DIFF_INSERT: 1\n };\n var diffedLines = {\n left: [],\n right: []\n };\n var cursor = {\n left: 1,\n right: 1\n };\n diff.forEach(function (chunk) {\n var chunkType = chunk[0];\n var text = chunk[1];\n var lines = text.split('\\n').length - 1;\n\n // diff-match-patch sometimes returns empty strings at random\n if (text.length === 0) {\n return;\n }\n var firstChar = text[0];\n var lastChar = text[text.length - 1];\n var linesToHighlight = 0;\n switch (chunkType) {\n case C.DIFF_EQUAL:\n cursor.left += lines;\n cursor.right += lines;\n break;\n case C.DIFF_DELETE:\n // If the deletion starts with a newline, push the cursor down to that line\n if (firstChar === '\\n') {\n cursor.left++;\n lines--;\n }\n linesToHighlight = lines;\n\n // If the deletion does not include a newline, highlight the same line on the right\n if (linesToHighlight === 0) {\n diffedLines.right.push({\n startLine: cursor.right,\n endLine: cursor.right\n });\n }\n\n // If the last character is a newline, we don't want to highlight that line\n if (lastChar === '\\n') {\n linesToHighlight -= 1;\n }\n diffedLines.left.push({\n startLine: cursor.left,\n endLine: cursor.left + linesToHighlight\n });\n cursor.left += lines;\n break;\n case C.DIFF_INSERT:\n // If the insertion starts with a newline, push the cursor down to that line\n if (firstChar === '\\n') {\n cursor.right++;\n lines--;\n }\n linesToHighlight = lines;\n\n // If the insertion does not include a newline, highlight the same line on the left\n if (linesToHighlight === 0) {\n diffedLines.left.push({\n startLine: cursor.left,\n endLine: cursor.left\n });\n }\n\n // If the last character is a newline, we don't want to highlight that line\n if (lastChar === '\\n') {\n linesToHighlight -= 1;\n }\n diffedLines.right.push({\n startLine: cursor.right,\n endLine: cursor.right + linesToHighlight\n });\n cursor.right += lines;\n break;\n default:\n throw new Error('Diff type was not defined.');\n }\n });\n return diffedLines;\n }\n\n // Receives a collection of line numbers and iterates through them to highlight appropriately\n // Returns an object that tells the render() method how to display the code editors\n }, {\n key: \"setCodeMarkers\",\n value: function setCodeMarkers() {\n var diffedLines = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n left: [],\n right: []\n };\n var codeEditorSettings = [];\n var newMarkerSet = {\n left: [],\n right: []\n };\n for (var i = 0; i < diffedLines.left.length; i++) {\n var markerObj = {\n startRow: diffedLines.left[i].startLine - 1,\n endRow: diffedLines.left[i].endLine,\n type: 'text',\n className: 'codeMarker'\n };\n newMarkerSet.left.push(markerObj);\n }\n for (var _i = 0; _i < diffedLines.right.length; _i++) {\n var _markerObj = {\n startRow: diffedLines.right[_i].startLine - 1,\n endRow: diffedLines.right[_i].endLine,\n type: 'text',\n className: 'codeMarker'\n };\n newMarkerSet.right.push(_markerObj);\n }\n codeEditorSettings[0] = newMarkerSet.left;\n codeEditorSettings[1] = newMarkerSet.right;\n return codeEditorSettings;\n }\n }, {\n key: \"render\",\n value: function render() {\n var markers = this.diff();\n return /*#__PURE__*/_react[\"default\"].createElement(_split[\"default\"], {\n name: this.props.name,\n className: this.props.className,\n focus: this.props.focus,\n orientation: this.props.orientation,\n splits: this.props.splits,\n mode: this.props.mode,\n theme: this.props.theme,\n height: this.props.height,\n width: this.props.width,\n fontSize: this.props.fontSize,\n showGutter: this.props.showGutter,\n onChange: this.props.onChange,\n onPaste: this.props.onPaste,\n onLoad: this.props.onLoad,\n onScroll: this.props.onScroll,\n minLines: this.props.minLines,\n maxLines: this.props.maxLines,\n readOnly: this.props.readOnly,\n highlightActiveLine: this.props.highlightActiveLine,\n showPrintMargin: this.props.showPrintMargin,\n tabSize: this.props.tabSize,\n cursorStart: this.props.cursorStart,\n editorProps: this.props.editorProps,\n style: this.props.style,\n scrollMargin: this.props.scrollMargin,\n setOptions: this.props.setOptions,\n wrapEnabled: this.props.wrapEnabled,\n enableBasicAutocompletion: this.props.enableBasicAutocompletion,\n enableLiveAutocompletion: this.props.enableLiveAutocompletion,\n value: this.props.value,\n markers: markers\n });\n }\n }]);\n return DiffComponent;\n}(_react.Component);\nexports[\"default\"] = DiffComponent;\nDiffComponent.propTypes = {\n cursorStart: _propTypes[\"default\"].number,\n editorProps: _propTypes[\"default\"].object,\n enableBasicAutocompletion: _propTypes[\"default\"].bool,\n enableLiveAutocompletion: _propTypes[\"default\"].bool,\n focus: _propTypes[\"default\"].bool,\n fontSize: _propTypes[\"default\"].number,\n height: _propTypes[\"default\"].string,\n highlightActiveLine: _propTypes[\"default\"].bool,\n maxLines: _propTypes[\"default\"].func,\n minLines: _propTypes[\"default\"].func,\n mode: _propTypes[\"default\"].string,\n name: _propTypes[\"default\"].string,\n className: _propTypes[\"default\"].string,\n onLoad: _propTypes[\"default\"].func,\n onPaste: _propTypes[\"default\"].func,\n onScroll: _propTypes[\"default\"].func,\n onChange: _propTypes[\"default\"].func,\n orientation: _propTypes[\"default\"].string,\n readOnly: _propTypes[\"default\"].bool,\n scrollMargin: _propTypes[\"default\"].array,\n setOptions: _propTypes[\"default\"].object,\n showGutter: _propTypes[\"default\"].bool,\n showPrintMargin: _propTypes[\"default\"].bool,\n splits: _propTypes[\"default\"].number,\n style: _propTypes[\"default\"].object,\n tabSize: _propTypes[\"default\"].number,\n theme: _propTypes[\"default\"].string,\n value: _propTypes[\"default\"].array,\n width: _propTypes[\"default\"].string,\n wrapEnabled: _propTypes[\"default\"].bool\n};\nDiffComponent.defaultProps = {\n cursorStart: 1,\n editorProps: {},\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: false,\n focus: false,\n fontSize: 12,\n height: '500px',\n highlightActiveLine: true,\n maxLines: null,\n minLines: null,\n mode: '',\n name: 'ace-editor',\n onLoad: null,\n onScroll: null,\n onPaste: null,\n onChange: null,\n orientation: 'beside',\n readOnly: false,\n scrollMargin: [0, 0, 0, 0],\n setOptions: {},\n showGutter: true,\n showPrintMargin: true,\n splits: 2,\n style: {},\n tabSize: 4,\n theme: 'github',\n value: ['', ''],\n width: '500px',\n wrapEnabled: true\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.editorOptions = exports.editorEvents = exports.debounce = void 0;\nvar editorOptions = ['minLines', 'maxLines', 'readOnly', 'highlightActiveLine', 'tabSize', 'enableBasicAutocompletion', 'enableLiveAutocompletion', 'enableSnippets'];\nexports.editorOptions = editorOptions;\nvar editorEvents = ['onChange', 'onFocus', 'onInput', 'onBlur', 'onCopy', 'onPaste', 'onSelectionChange', 'onCursorChange', 'onScroll', 'handleOptions', 'updateRef'];\nexports.editorEvents = editorEvents;\nvar debounce = function debounce(fn, delay) {\n var timer = null;\n return function () {\n var context = this,\n args = arguments;\n clearTimeout(timer);\n timer = setTimeout(function () {\n fn.apply(context, args);\n }, delay);\n };\n};\nexports.debounce = debounce;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\nObject.defineProperty(exports, \"diff\", {\n enumerable: true,\n get: function get() {\n return _diff[\"default\"];\n }\n});\nObject.defineProperty(exports, \"split\", {\n enumerable: true,\n get: function get() {\n return _split[\"default\"];\n }\n});\nvar _ace = _interopRequireDefault(require(\"./ace.js\"));\nvar _split = _interopRequireDefault(require(\"./split.js\"));\nvar _diff = _interopRequireDefault(require(\"./diff.js\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\nvar _default = _ace[\"default\"];\nexports[\"default\"] = _default;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\nvar _aceBuilds = _interopRequireWildcard(require(\"ace-builds\"));\nvar _extSplit = require(\"ace-builds/src-noconflict/ext-split\");\nvar _react = _interopRequireWildcard(require(\"react\"));\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\nvar _lodash = _interopRequireDefault(require(\"lodash.isequal\"));\nvar _lodash2 = _interopRequireDefault(require(\"lodash.get\"));\nvar _editorOptions = require(\"./editorOptions.js\");\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nvar SplitComponent = /*#__PURE__*/function (_Component) {\n _inherits(SplitComponent, _Component);\n var _super = _createSuper(SplitComponent);\n function SplitComponent(props) {\n var _this;\n _classCallCheck(this, SplitComponent);\n _this = _super.call(this, props);\n _editorOptions.editorEvents.forEach(function (method) {\n _this[method] = _this[method].bind(_assertThisInitialized(_this));\n });\n _this.debounce = _editorOptions.debounce;\n return _this;\n }\n _createClass(SplitComponent, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n var _this$props = this.props,\n className = _this$props.className,\n onBeforeLoad = _this$props.onBeforeLoad,\n mode = _this$props.mode,\n focus = _this$props.focus,\n theme = _this$props.theme,\n fontSize = _this$props.fontSize,\n value = _this$props.value,\n defaultValue = _this$props.defaultValue,\n cursorStart = _this$props.cursorStart,\n showGutter = _this$props.showGutter,\n wrapEnabled = _this$props.wrapEnabled,\n showPrintMargin = _this$props.showPrintMargin,\n _this$props$scrollMar = _this$props.scrollMargin,\n scrollMargin = _this$props$scrollMar === void 0 ? [0, 0, 0, 0] : _this$props$scrollMar,\n keyboardHandler = _this$props.keyboardHandler,\n onLoad = _this$props.onLoad,\n commands = _this$props.commands,\n annotations = _this$props.annotations,\n markers = _this$props.markers,\n splits = _this$props.splits;\n this.editor = _aceBuilds[\"default\"].edit(this.refEditor);\n if (onBeforeLoad) {\n onBeforeLoad(_aceBuilds[\"default\"]);\n }\n var editorProps = Object.keys(this.props.editorProps);\n var split = new _extSplit.Split(this.editor.container, \"ace/theme/\".concat(theme), splits);\n this.editor.env.split = split;\n this.splitEditor = split.getEditor(0);\n this.split = split;\n // in a split scenario we don't want a print margin for the entire application\n this.editor.setShowPrintMargin(false);\n this.editor.renderer.setShowGutter(false);\n // get a list of possible options to avoid 'misspelled option errors'\n var availableOptions = this.splitEditor.$options;\n if (this.props.debounceChangePeriod) {\n this.onChange = this.debounce(this.onChange, this.props.debounceChangePeriod);\n }\n split.forEach(function (editor, index) {\n for (var i = 0; i < editorProps.length; i++) {\n editor[editorProps[i]] = _this2.props.editorProps[editorProps[i]];\n }\n var defaultValueForEditor = (0, _lodash2[\"default\"])(defaultValue, index);\n var valueForEditor = (0, _lodash2[\"default\"])(value, index, '');\n editor.session.setUndoManager(new _aceBuilds.UndoManager());\n editor.setTheme(\"ace/theme/\".concat(theme));\n editor.renderer.setScrollMargin(scrollMargin[0], scrollMargin[1], scrollMargin[2], scrollMargin[3]);\n editor.getSession().setMode(\"ace/mode/\".concat(mode));\n editor.setFontSize(fontSize);\n editor.renderer.setShowGutter(showGutter);\n editor.getSession().setUseWrapMode(wrapEnabled);\n editor.setShowPrintMargin(showPrintMargin);\n editor.on('focus', _this2.onFocus);\n editor.on('blur', _this2.onBlur);\n editor.on('input', _this2.onInput);\n editor.on('copy', _this2.onCopy);\n editor.on('paste', _this2.onPaste);\n editor.on('change', _this2.onChange);\n editor.getSession().selection.on('changeSelection', _this2.onSelectionChange);\n editor.getSession().selection.on('changeCursor', _this2.onCursorChange);\n editor.session.on('changeScrollTop', _this2.onScroll);\n editor.setValue(defaultValueForEditor === undefined ? valueForEditor : defaultValueForEditor, cursorStart);\n var newAnnotations = (0, _lodash2[\"default\"])(annotations, index, []);\n var newMarkers = (0, _lodash2[\"default\"])(markers, index, []);\n editor.getSession().setAnnotations(newAnnotations);\n if (newMarkers && newMarkers.length > 0) {\n _this2.handleMarkers(newMarkers, editor);\n }\n for (var _i = 0; _i < _editorOptions.editorOptions.length; _i++) {\n var option = _editorOptions.editorOptions[_i];\n if (Object.prototype.hasOwnProperty.call(availableOptions, option)) {\n editor.setOption(option, _this2.props[option]);\n } else if (_this2.props[option]) {\n console.warn(\"ReaceAce: editor option \".concat(option, \" was activated but not found. Did you need to import a related tool or did you possibly mispell the option?\"));\n }\n }\n _this2.handleOptions(_this2.props, editor);\n if (Array.isArray(commands)) {\n commands.forEach(function (command) {\n if (typeof command.exec == 'string') {\n editor.commands.bindKey(command.bindKey, command.exec);\n } else {\n editor.commands.addCommand(command);\n }\n });\n }\n if (keyboardHandler) {\n editor.setKeyboardHandler('ace/keyboard/' + keyboardHandler);\n }\n });\n if (className) {\n this.refEditor.className += ' ' + className;\n }\n if (focus) {\n this.splitEditor.focus();\n }\n var sp = this.editor.env.split;\n sp.setOrientation(this.props.orientation === 'below' ? sp.BELOW : sp.BESIDE);\n sp.resize(true);\n if (onLoad) {\n onLoad(sp);\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n var _this3 = this;\n var oldProps = prevProps;\n var nextProps = this.props;\n var split = this.editor.env.split;\n if (nextProps.splits !== oldProps.splits) {\n split.setSplits(nextProps.splits);\n }\n if (nextProps.orientation !== oldProps.orientation) {\n split.setOrientation(nextProps.orientation === 'below' ? split.BELOW : split.BESIDE);\n }\n split.forEach(function (editor, index) {\n if (nextProps.mode !== oldProps.mode) {\n editor.getSession().setMode('ace/mode/' + nextProps.mode);\n }\n if (nextProps.keyboardHandler !== oldProps.keyboardHandler) {\n if (nextProps.keyboardHandler) {\n editor.setKeyboardHandler('ace/keyboard/' + nextProps.keyboardHandler);\n } else {\n editor.setKeyboardHandler(null);\n }\n }\n if (nextProps.fontSize !== oldProps.fontSize) {\n editor.setFontSize(nextProps.fontSize);\n }\n if (nextProps.wrapEnabled !== oldProps.wrapEnabled) {\n editor.getSession().setUseWrapMode(nextProps.wrapEnabled);\n }\n if (nextProps.showPrintMargin !== oldProps.showPrintMargin) {\n editor.setShowPrintMargin(nextProps.showPrintMargin);\n }\n if (nextProps.showGutter !== oldProps.showGutter) {\n editor.renderer.setShowGutter(nextProps.showGutter);\n }\n for (var i = 0; i < _editorOptions.editorOptions.length; i++) {\n var option = _editorOptions.editorOptions[i];\n if (nextProps[option] !== oldProps[option]) {\n editor.setOption(option, nextProps[option]);\n }\n }\n if (!(0, _lodash[\"default\"])(nextProps.setOptions, oldProps.setOptions)) {\n _this3.handleOptions(nextProps, editor);\n }\n var nextValue = (0, _lodash2[\"default\"])(nextProps.value, index, '');\n if (editor.getValue() !== nextValue) {\n // editor.setValue is a synchronous function call, change event is emitted before setValue return.\n _this3.silent = true;\n var pos = editor.session.selection.toJSON();\n editor.setValue(nextValue, nextProps.cursorStart);\n editor.session.selection.fromJSON(pos);\n _this3.silent = false;\n }\n var newAnnotations = (0, _lodash2[\"default\"])(nextProps.annotations, index, []);\n var oldAnnotations = (0, _lodash2[\"default\"])(oldProps.annotations, index, []);\n if (!(0, _lodash[\"default\"])(newAnnotations, oldAnnotations)) {\n editor.getSession().setAnnotations(newAnnotations);\n }\n var newMarkers = (0, _lodash2[\"default\"])(nextProps.markers, index, []);\n var oldMarkers = (0, _lodash2[\"default\"])(oldProps.markers, index, []);\n if (!(0, _lodash[\"default\"])(newMarkers, oldMarkers) && Array.isArray(newMarkers)) {\n _this3.handleMarkers(newMarkers, editor);\n }\n });\n if (nextProps.className !== oldProps.className) {\n var appliedClasses = this.refEditor.className;\n var appliedClassesArray = appliedClasses.trim().split(' ');\n var oldClassesArray = oldProps.className.trim().split(' ');\n oldClassesArray.forEach(function (oldClass) {\n var index = appliedClassesArray.indexOf(oldClass);\n appliedClassesArray.splice(index, 1);\n });\n this.refEditor.className = ' ' + nextProps.className + ' ' + appliedClassesArray.join(' ');\n }\n if (nextProps.theme !== oldProps.theme) {\n split.setTheme('ace/theme/' + nextProps.theme);\n }\n if (nextProps.focus && !oldProps.focus) {\n this.splitEditor.focus();\n }\n if (nextProps.height !== this.props.height || nextProps.width !== this.props.width) {\n this.editor.resize();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.editor.destroy();\n this.editor = null;\n }\n }, {\n key: \"onChange\",\n value: function onChange(event) {\n if (this.props.onChange && !this.silent) {\n var value = [];\n this.editor.env.split.forEach(function (editor) {\n value.push(editor.getValue());\n });\n this.props.onChange(value, event);\n }\n }\n }, {\n key: \"onSelectionChange\",\n value: function onSelectionChange(event) {\n if (this.props.onSelectionChange) {\n var value = [];\n this.editor.env.split.forEach(function (editor) {\n value.push(editor.getSelection());\n });\n this.props.onSelectionChange(value, event);\n }\n }\n }, {\n key: \"onCursorChange\",\n value: function onCursorChange(event) {\n if (this.props.onCursorChange) {\n var value = [];\n this.editor.env.split.forEach(function (editor) {\n value.push(editor.getSelection());\n });\n this.props.onCursorChange(value, event);\n }\n }\n }, {\n key: \"onFocus\",\n value: function onFocus(event) {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n }\n }, {\n key: \"onInput\",\n value: function onInput(event) {\n if (this.props.onInput) {\n this.props.onInput(event);\n }\n }\n }, {\n key: \"onBlur\",\n value: function onBlur(event) {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n }\n }, {\n key: \"onCopy\",\n value: function onCopy(text) {\n if (this.props.onCopy) {\n this.props.onCopy(text);\n }\n }\n }, {\n key: \"onPaste\",\n value: function onPaste(text) {\n if (this.props.onPaste) {\n this.props.onPaste(text);\n }\n }\n }, {\n key: \"onScroll\",\n value: function onScroll() {\n if (this.props.onScroll) {\n this.props.onScroll(this.editor);\n }\n }\n }, {\n key: \"handleOptions\",\n value: function handleOptions(props, editor) {\n var setOptions = Object.keys(props.setOptions);\n for (var y = 0; y < setOptions.length; y++) {\n editor.setOption(setOptions[y], props.setOptions[setOptions[y]]);\n }\n }\n }, {\n key: \"handleMarkers\",\n value: function handleMarkers(markers, editor) {\n // remove foreground markers\n var currentMarkers = editor.getSession().getMarkers(true);\n for (var i in currentMarkers) {\n if (Object.prototype.hasOwnProperty.call(currentMarkers, i)) {\n editor.getSession().removeMarker(currentMarkers[i].id);\n }\n }\n // remove background markers\n currentMarkers = editor.getSession().getMarkers(false);\n for (var _i2 in currentMarkers) {\n if (Object.prototype.hasOwnProperty.call(currentMarkers, _i2)) {\n editor.getSession().removeMarker(currentMarkers[_i2].id);\n }\n }\n // add new markers\n markers.forEach(function (_ref) {\n var startRow = _ref.startRow,\n startCol = _ref.startCol,\n endRow = _ref.endRow,\n endCol = _ref.endCol,\n className = _ref.className,\n type = _ref.type,\n _ref$inFront = _ref.inFront,\n inFront = _ref$inFront === void 0 ? false : _ref$inFront;\n var range = new _aceBuilds.Range(startRow, startCol, endRow, endCol);\n editor.getSession().addMarker(range, className, type, inFront);\n });\n }\n }, {\n key: \"updateRef\",\n value: function updateRef(item) {\n this.refEditor = item;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n name = _this$props2.name,\n width = _this$props2.width,\n height = _this$props2.height,\n style = _this$props2.style;\n var divStyle = _objectSpread({\n width: width,\n height: height\n }, style);\n return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n ref: this.updateRef,\n id: name,\n style: divStyle\n });\n }\n }]);\n return SplitComponent;\n}(_react.Component);\nexports[\"default\"] = SplitComponent;\nSplitComponent.propTypes = {\n mode: _propTypes[\"default\"].string,\n splits: _propTypes[\"default\"].number,\n orientation: _propTypes[\"default\"].string,\n focus: _propTypes[\"default\"].bool,\n theme: _propTypes[\"default\"].string,\n name: _propTypes[\"default\"].string,\n className: _propTypes[\"default\"].string,\n height: _propTypes[\"default\"].string,\n width: _propTypes[\"default\"].string,\n fontSize: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].number, _propTypes[\"default\"].string]),\n showGutter: _propTypes[\"default\"].bool,\n onChange: _propTypes[\"default\"].func,\n onCopy: _propTypes[\"default\"].func,\n onPaste: _propTypes[\"default\"].func,\n onFocus: _propTypes[\"default\"].func,\n onInput: _propTypes[\"default\"].func,\n onBlur: _propTypes[\"default\"].func,\n onScroll: _propTypes[\"default\"].func,\n value: _propTypes[\"default\"].arrayOf(_propTypes[\"default\"].string),\n defaultValue: _propTypes[\"default\"].arrayOf(_propTypes[\"default\"].string),\n debounceChangePeriod: _propTypes[\"default\"].number,\n onLoad: _propTypes[\"default\"].func,\n onSelectionChange: _propTypes[\"default\"].func,\n onCursorChange: _propTypes[\"default\"].func,\n onBeforeLoad: _propTypes[\"default\"].func,\n minLines: _propTypes[\"default\"].number,\n maxLines: _propTypes[\"default\"].number,\n readOnly: _propTypes[\"default\"].bool,\n highlightActiveLine: _propTypes[\"default\"].bool,\n tabSize: _propTypes[\"default\"].number,\n showPrintMargin: _propTypes[\"default\"].bool,\n cursorStart: _propTypes[\"default\"].number,\n editorProps: _propTypes[\"default\"].object,\n setOptions: _propTypes[\"default\"].object,\n style: _propTypes[\"default\"].object,\n scrollMargin: _propTypes[\"default\"].array,\n annotations: _propTypes[\"default\"].array,\n markers: _propTypes[\"default\"].array,\n keyboardHandler: _propTypes[\"default\"].string,\n wrapEnabled: _propTypes[\"default\"].bool,\n enableBasicAutocompletion: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].bool, _propTypes[\"default\"].array]),\n enableLiveAutocompletion: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].bool, _propTypes[\"default\"].array]),\n commands: _propTypes[\"default\"].array\n};\nSplitComponent.defaultProps = {\n name: 'ace-editor',\n focus: false,\n orientation: 'beside',\n splits: 2,\n mode: '',\n theme: '',\n height: '500px',\n width: '500px',\n value: [],\n fontSize: 12,\n showGutter: true,\n onChange: null,\n onPaste: null,\n onLoad: null,\n onScroll: null,\n minLines: null,\n maxLines: null,\n readOnly: false,\n highlightActiveLine: true,\n showPrintMargin: true,\n tabSize: 4,\n cursorStart: 1,\n editorProps: {},\n style: {},\n scrollMargin: [0, 0, 0, 0],\n setOptions: {},\n wrapEnabled: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: false\n};","ace.config.setModuleUrl(\n 'ace/ext/beautify',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-beautify.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/code_lens',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-code_lens.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/command_bar',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-command_bar.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/elastic_tabstops_lite',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-elastic_tabstops_lite.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/emmet',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-emmet.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/error_marker',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-error_marker.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/hardwrap',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-hardwrap.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/inline_autocomplete',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-inline_autocomplete.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/keyboard_menu',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-keybinding_menu.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/language_tools',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-language_tools.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/linking',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-linking.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/modelist',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-modelist.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/options',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-options.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/prompt',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-prompt.js'),\n);\nace.config.setModuleUrl('ace/ext/rtl', require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-rtl.js'));\nace.config.setModuleUrl(\n 'ace/ext/searchbox',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-searchbox.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/settings_menu',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-settings_menu.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/simple_tokenizer',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-simple_tokenizer.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/spellcheck',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-spellcheck.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/split',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-split.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/static_highlight',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-static_highlight.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/statusbar',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-statusbar.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/textarea',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-textarea.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/themelist',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-themelist.js'),\n);\nace.config.setModuleUrl(\n 'ace/ext/whitespace',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/ext-whitespace.js'),\n);\nace.config.setModuleUrl(\n 'ace/keyboard/emacs',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/keybinding-emacs.js'),\n);\nace.config.setModuleUrl(\n 'ace/keyboard/sublime',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/keybinding-sublime.js'),\n);\nace.config.setModuleUrl(\n 'ace/keyboard/vim',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/keybinding-vim.js'),\n);\nace.config.setModuleUrl(\n 'ace/keyboard/vscode',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/keybinding-vscode.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/abap',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-abap.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/abc',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-abc.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/actionscript',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-actionscript.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/ada',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-ada.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/alda',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-alda.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/apache_conf',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-apache_conf.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/apex',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-apex.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/applescript',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-applescript.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/aql',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-aql.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/asciidoc',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-asciidoc.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/asl',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-asl.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/assembly_x86',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-assembly_x86.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/astro',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-astro.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/autohotkey',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-autohotkey.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/batchfile',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-batchfile.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/bibtex',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-bibtex.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/c9search',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-c9search.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/c_cpp',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-c_cpp.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/cirru',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-cirru.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/clojure',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-clojure.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/cobol',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-cobol.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/coffee',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-coffee.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/coldfusion',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-coldfusion.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/crystal',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-crystal.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/csharp',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-csharp.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/csound_document',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-csound_document.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/csound_orchestra',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-csound_orchestra.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/csound_score',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-csound_score.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/csp',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-csp.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/css',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-css.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/curly',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-curly.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/cuttlefish',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-cuttlefish.js'),\n);\nace.config.setModuleUrl('ace/mode/d', require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-d.js'));\nace.config.setModuleUrl(\n 'ace/mode/dart',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-dart.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/diff',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-diff.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/django',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-django.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/dockerfile',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-dockerfile.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/dot',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-dot.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/drools',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-drools.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/edifact',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-edifact.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/eiffel',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-eiffel.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/ejs',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-ejs.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/elixir',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-elixir.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/elm',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-elm.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/erlang',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-erlang.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/flix',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-flix.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/forth',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-forth.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/fortran',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-fortran.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/fsharp',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-fsharp.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/fsl',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-fsl.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/ftl',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-ftl.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/gcode',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-gcode.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/gherkin',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-gherkin.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/gitignore',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-gitignore.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/glsl',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-glsl.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/gobstones',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-gobstones.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/golang',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-golang.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/graphqlschema',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-graphqlschema.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/groovy',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-groovy.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/haml',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-haml.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/handlebars',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-handlebars.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/haskell',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-haskell.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/haskell_cabal',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-haskell_cabal.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/haxe',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-haxe.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/hjson',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-hjson.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/html',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-html.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/html_elixir',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-html_elixir.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/html_ruby',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-html_ruby.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/ini',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-ini.js'),\n);\nace.config.setModuleUrl('ace/mode/io', require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-io.js'));\nace.config.setModuleUrl(\n 'ace/mode/ion',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-ion.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/jack',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-jack.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/jade',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-jade.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/java',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-java.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/javascript',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-javascript.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/jexl',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-jexl.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/json',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-json.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/json5',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-json5.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/jsoniq',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-jsoniq.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/jsp',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-jsp.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/jssm',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-jssm.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/jsx',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-jsx.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/julia',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-julia.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/kotlin',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-kotlin.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/latex',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-latex.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/latte',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-latte.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/less',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-less.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/liquid',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-liquid.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/lisp',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-lisp.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/livescript',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-livescript.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/logiql',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-logiql.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/logtalk',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-logtalk.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/lsl',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-lsl.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/lua',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-lua.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/luapage',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-luapage.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/lucene',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-lucene.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/makefile',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-makefile.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/markdown',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-markdown.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/mask',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-mask.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/matlab',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-matlab.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/maze',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-maze.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/mediawiki',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-mediawiki.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/mel',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-mel.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/mips',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-mips.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/mixal',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-mixal.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/mushcode',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-mushcode.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/mysql',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-mysql.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/nasal',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-nasal.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/nginx',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-nginx.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/nim',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-nim.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/nix',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-nix.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/nsis',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-nsis.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/nunjucks',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-nunjucks.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/objectivec',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-objectivec.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/ocaml',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-ocaml.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/odin',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-odin.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/partiql',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-partiql.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/pascal',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-pascal.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/perl',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-perl.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/pgsql',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-pgsql.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/php',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-php.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/php_laravel_blade',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-php_laravel_blade.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/pig',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-pig.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/plain_text',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-plain_text.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/plsql',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-plsql.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/powershell',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-powershell.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/praat',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-praat.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/prisma',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-prisma.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/prolog',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-prolog.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/properties',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-properties.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/protobuf',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-protobuf.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/prql',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-prql.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/puppet',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-puppet.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/python',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-python.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/qml',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-qml.js'),\n);\nace.config.setModuleUrl('ace/mode/r', require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-r.js'));\nace.config.setModuleUrl(\n 'ace/mode/raku',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-raku.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/razor',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-razor.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/rdoc',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-rdoc.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/red',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-red.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/redshift',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-redshift.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/rhtml',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-rhtml.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/robot',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-robot.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/rst',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-rst.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/ruby',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-ruby.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/rust',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-rust.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/sac',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-sac.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/sass',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-sass.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/scad',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-scad.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/scala',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-scala.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/scheme',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-scheme.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/scrypt',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-scrypt.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/scss',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-scss.js'),\n);\nace.config.setModuleUrl('ace/mode/sh', require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-sh.js'));\nace.config.setModuleUrl(\n 'ace/mode/sjs',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-sjs.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/slim',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-slim.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/smarty',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-smarty.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/smithy',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-smithy.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/snippets',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-snippets.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/soy_template',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-soy_template.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/space',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-space.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/sparql',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-sparql.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/sql',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-sql.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/sqlserver',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-sqlserver.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/stylus',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-stylus.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/svg',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-svg.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/swift',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-swift.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/tcl',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-tcl.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/terraform',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-terraform.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/tex',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-tex.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/text',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-text.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/textile',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-textile.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/toml',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-toml.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/tsx',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-tsx.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/turtle',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-turtle.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/twig',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-twig.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/typescript',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-typescript.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/vala',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-vala.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/vbscript',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-vbscript.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/velocity',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-velocity.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/verilog',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-verilog.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/vhdl',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-vhdl.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/visualforce',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-visualforce.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/wollok',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-wollok.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/xml',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-xml.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/xquery',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-xquery.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/yaml',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-yaml.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/zeek',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/mode-zeek.js'),\n);\n\nace.config.setModuleUrl(\n 'ace/theme/ambiance',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-ambiance.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/chaos',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-chaos.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/chrome',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-chrome.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/cloud9_day',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-cloud9_day.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/cloud9_night',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-cloud9_night.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/cloud9_night_low_color',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-cloud9_night_low_color.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/clouds',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-clouds.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/clouds_midnight',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-clouds_midnight.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/cobalt',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-cobalt.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/crimson_editor',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-crimson_editor.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/dawn',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-dawn.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/dracula',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-dracula.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/dreamweaver',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-dreamweaver.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/eclipse',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-eclipse.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/github',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-github.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/github_dark',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-github_dark.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/gob',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-gob.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/gruvbox',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-gruvbox.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/gruvbox_dark_hard',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-gruvbox_dark_hard.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/gruvbox_light_hard',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-gruvbox_light_hard.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/idle_fingers',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-idle_fingers.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/iplastic',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-iplastic.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/katzenmilch',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-katzenmilch.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/kr_theme',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-kr_theme.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/kuroir',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-kuroir.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/merbivore',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-merbivore.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/merbivore_soft',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-merbivore_soft.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/mono_industrial',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-mono_industrial.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/monokai',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-monokai.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/nord_dark',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-nord_dark.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/one_dark',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-one_dark.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/pastel_on_dark',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-pastel_on_dark.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/solarized_dark',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-solarized_dark.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/solarized_light',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-solarized_light.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/sqlserver',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-sqlserver.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/terminal',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-terminal.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/textmate',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-textmate.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/tomorrow',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-tomorrow.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/tomorrow_night',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-tomorrow_night.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/tomorrow_night_blue',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-tomorrow_night_blue.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/tomorrow_night_bright',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-tomorrow_night_bright.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/tomorrow_night_eighties',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-tomorrow_night_eighties.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/twilight',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-twilight.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/vibrant_ink',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-vibrant_ink.js'),\n);\nace.config.setModuleUrl(\n 'ace/theme/xcode',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/theme-xcode.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/base_worker',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/worker-base.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/coffee_worker',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/worker-coffee.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/css_worker',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/worker-css.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/html_worker',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/worker-html.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/javascript_worker',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/worker-javascript.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/json_worker',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/worker-json.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/lua_worker',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/worker-lua.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/php_worker',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/worker-php.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/xml_worker',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/worker-xml.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/xquery_worker',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/worker-xquery.js'),\n);\nace.config.setModuleUrl(\n 'ace/mode/yaml_worker',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/worker-yaml.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/abap',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/abap.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/abc',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/abc.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/actionscript',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/actionscript.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/ada',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/ada.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/alda',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/alda.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/apache_conf',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/apache_conf.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/apex',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/apex.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/applescript',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/applescript.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/aql',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/aql.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/asciidoc',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/asciidoc.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/asl',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/asl.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/assembly_x86',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/assembly_x86.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/astro',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/astro.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/autohotkey',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/autohotkey.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/batchfile',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/batchfile.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/bibtex',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/bibtex.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/c9search',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/c9search.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/c_cpp',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/c_cpp.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/cirru',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/cirru.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/clojure',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/clojure.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/cobol',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/cobol.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/coffee',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/coffee.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/coldfusion',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/coldfusion.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/crystal',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/crystal.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/csharp',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/csharp.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/csound_document',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/csound_document.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/csound_orchestra',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/csound_orchestra.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/csound_score',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/csound_score.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/csp',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/csp.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/css',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/css.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/curly',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/curly.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/cuttlefish',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/cuttlefish.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/d',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/d.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/dart',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/dart.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/diff',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/diff.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/django',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/django.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/dockerfile',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/dockerfile.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/dot',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/dot.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/drools',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/drools.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/edifact',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/edifact.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/eiffel',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/eiffel.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/ejs',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/ejs.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/elixir',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/elixir.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/elm',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/elm.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/erlang',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/erlang.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/flix',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/flix.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/forth',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/forth.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/fortran',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/fortran.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/fsharp',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/fsharp.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/fsl',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/fsl.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/ftl',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/ftl.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/gcode',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/gcode.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/gherkin',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/gherkin.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/gitignore',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/gitignore.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/glsl',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/glsl.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/gobstones',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/gobstones.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/golang',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/golang.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/graphqlschema',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/graphqlschema.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/groovy',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/groovy.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/haml',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/haml.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/handlebars',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/handlebars.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/haskell',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/haskell.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/haskell_cabal',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/haskell_cabal.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/haxe',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/haxe.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/hjson',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/hjson.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/html',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/html.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/html_elixir',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/html_elixir.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/html_ruby',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/html_ruby.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/ini',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/ini.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/io',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/io.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/ion',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/ion.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/jack',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/jack.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/jade',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/jade.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/java',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/java.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/javascript',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/javascript.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/jexl',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/jexl.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/json',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/json.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/json5',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/json5.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/jsoniq',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/jsoniq.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/jsp',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/jsp.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/jssm',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/jssm.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/jsx',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/jsx.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/julia',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/julia.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/kotlin',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/kotlin.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/latex',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/latex.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/latte',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/latte.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/less',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/less.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/liquid',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/liquid.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/lisp',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/lisp.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/livescript',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/livescript.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/logiql',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/logiql.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/logtalk',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/logtalk.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/lsl',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/lsl.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/lua',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/lua.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/luapage',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/luapage.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/lucene',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/lucene.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/makefile',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/makefile.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/markdown',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/markdown.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/mask',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/mask.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/matlab',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/matlab.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/maze',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/maze.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/mediawiki',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/mediawiki.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/mel',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/mel.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/mips',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/mips.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/mixal',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/mixal.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/mushcode',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/mushcode.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/mysql',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/mysql.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/nasal',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/nasal.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/nginx',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/nginx.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/nim',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/nim.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/nix',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/nix.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/nsis',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/nsis.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/nunjucks',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/nunjucks.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/objectivec',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/objectivec.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/ocaml',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/ocaml.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/odin',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/odin.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/partiql',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/partiql.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/pascal',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/pascal.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/perl',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/perl.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/pgsql',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/pgsql.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/php',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/php.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/php_laravel_blade',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/php_laravel_blade.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/pig',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/pig.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/plain_text',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/plain_text.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/plsql',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/plsql.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/powershell',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/powershell.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/praat',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/praat.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/prisma',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/prisma.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/prolog',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/prolog.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/properties',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/properties.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/protobuf',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/protobuf.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/prql',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/prql.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/puppet',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/puppet.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/python',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/python.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/qml',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/qml.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/r',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/r.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/raku',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/raku.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/razor',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/razor.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/rdoc',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/rdoc.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/red',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/red.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/redshift',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/redshift.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/rhtml',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/rhtml.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/robot',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/robot.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/rst',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/rst.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/ruby',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/ruby.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/rust',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/rust.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/sac',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/sac.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/sass',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/sass.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/scad',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/scad.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/scala',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/scala.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/scheme',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/scheme.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/scrypt',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/scrypt.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/scss',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/scss.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/sh',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/sh.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/sjs',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/sjs.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/slim',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/slim.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/smarty',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/smarty.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/smithy',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/smithy.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/snippets',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/snippets.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/soy_template',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/soy_template.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/space',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/space.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/sparql',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/sparql.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/sql',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/sql.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/sqlserver',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/sqlserver.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/stylus',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/stylus.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/svg',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/svg.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/swift',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/swift.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/tcl',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/tcl.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/terraform',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/terraform.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/tex',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/tex.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/text',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/text.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/textile',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/textile.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/toml',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/toml.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/tsx',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/tsx.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/turtle',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/turtle.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/twig',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/twig.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/typescript',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/typescript.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/vala',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/vala.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/vbscript',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/vbscript.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/velocity',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/velocity.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/verilog',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/verilog.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/vhdl',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/vhdl.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/visualforce',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/visualforce.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/wollok',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/wollok.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/xml',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/xml.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/xquery',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/xquery.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/yaml',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/yaml.js'),\n);\nace.config.setModuleUrl(\n 'ace/snippets/zeek',\n require('file-loader?esModule=false!ace-builds/src-min-noconflict/snippets/zeek.js'),\n);\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&Ng(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=Lg(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Tg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Rg(f.type,f.key,f.props,null,a.mode,h),h.ref=Lg(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=Sg(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);Mg(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=Qg(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Ug=Og(!0),Vg=Og(!1),Wg=Uf(null),Xg=null,Yg=null,Zg=null;function $g(){Zg=Yg=Xg=null}function ah(a){var b=Wg.current;E(Wg);a._currentValue=b}function bh(a,b,c){for(;null!==a;){var d=a.alternate;(a.childLanes&b)!==b?(a.childLanes|=b,null!==d&&(d.childLanes|=b)):null!==d&&(d.childLanes&b)!==b&&(d.childLanes|=b);if(a===c)break;a=a.return}}\nfunction ch(a,b){Xg=a;Zg=Yg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(dh=!0),a.firstContext=null)}function eh(a){var b=a._currentValue;if(Zg!==a)if(a={context:a,memoizedValue:b,next:null},null===Yg){if(null===Xg)throw Error(p(308));Yg=a;Xg.dependencies={lanes:0,firstContext:a}}else Yg=Yg.next=a;return b}var fh=null;function gh(a){null===fh?fh=[a]:fh.push(a)}\nfunction hh(a,b,c,d){var e=b.interleaved;null===e?(c.next=c,gh(b)):(c.next=e.next,e.next=c);b.interleaved=c;return ih(a,d)}function ih(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}var jh=!1;function kh(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}\nfunction lh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function mh(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}\nfunction nh(a,b,c){var d=a.updateQueue;if(null===d)return null;d=d.shared;if(0!==(K&2)){var e=d.pending;null===e?b.next=b:(b.next=e.next,e.next=b);d.pending=b;return ih(a,c)}e=d.interleaved;null===e?(b.next=b,gh(d)):(b.next=e.next,e.next=b);d.interleaved=b;return ih(a,c)}function oh(a,b,c){b=b.updateQueue;if(null!==b&&(b=b.shared,0!==(c&4194240))){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nfunction ph(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction qh(a,b,c,d){var e=a.updateQueue;jh=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var m=a.alternate;null!==m&&(m=m.updateQueue,h=m.lastBaseUpdate,h!==g&&(null===h?m.firstBaseUpdate=l:h.next=l,m.lastBaseUpdate=k))}if(null!==f){var q=e.baseState;g=0;m=l=k=null;h=f;do{var r=h.lane,y=h.eventTime;if((d&r)===r){null!==m&&(m=m.next={eventTime:y,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,\nnext:null});a:{var n=a,t=h;r=b;y=c;switch(t.tag){case 1:n=t.payload;if(\"function\"===typeof n){q=n.call(y,q,r);break a}q=n;break a;case 3:n.flags=n.flags&-65537|128;case 0:n=t.payload;r=\"function\"===typeof n?n.call(y,q,r):n;if(null===r||void 0===r)break a;q=A({},q,r);break a;case 2:jh=!0}}null!==h.callback&&0!==h.lane&&(a.flags|=64,r=e.effects,null===r?e.effects=[h]:r.push(h))}else y={eventTime:y,lane:r,tag:h.tag,payload:h.payload,callback:h.callback,next:null},null===m?(l=m=y,k=q):m=m.next=y,g|=r;\nh=h.next;if(null===h)if(h=e.shared.pending,null===h)break;else r=h,h=r.next,r.next=null,e.lastBaseUpdate=r,e.shared.pending=null}while(1);null===m&&(k=q);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=m;b=e.shared.interleaved;if(null!==b){e=b;do g|=e.lane,e=e.next;while(e!==b)}else null===f&&(e.shared.lanes=0);rh|=g;a.lanes=g;a.memoizedState=q}}\nfunction sh(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;bc?c:4;a(!0);var d=Gh.transition;Gh.transition={};try{a(!1),b()}finally{C=c,Gh.transition=d}}function wi(){return Uh().memoizedState}\nfunction xi(a,b,c){var d=yi(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,c);else if(c=hh(a,b,c,d),null!==c){var e=R();gi(c,a,d,e);Bi(c,b,d)}}\nfunction ii(a,b,c){var d=yi(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,gh(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=hh(a,b,e,d);null!==c&&(e=R(),gi(c,a,d,e),Bi(c,b,d))}}\nfunction zi(a){var b=a.alternate;return a===M||null!==b&&b===M}function Ai(a,b){Jh=Ih=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Bi(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar Rh={readContext:eh,useCallback:P,useContext:P,useEffect:P,useImperativeHandle:P,useInsertionEffect:P,useLayoutEffect:P,useMemo:P,useReducer:P,useRef:P,useState:P,useDebugValue:P,useDeferredValue:P,useTransition:P,useMutableSource:P,useSyncExternalStore:P,useId:P,unstable_isNewReconciler:!1},Oh={readContext:eh,useCallback:function(a,b){Th().memoizedState=[a,void 0===b?null:b];return a},useContext:eh,useEffect:mi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ki(4194308,\n4,pi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ki(4194308,4,a,b)},useInsertionEffect:function(a,b){return ki(4,2,a,b)},useMemo:function(a,b){var c=Th();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=xi.bind(null,M,a);return[d.memoizedState,a]},useRef:function(a){var b=\nTh();a={current:a};return b.memoizedState=a},useState:hi,useDebugValue:ri,useDeferredValue:function(a){return Th().memoizedState=a},useTransition:function(){var a=hi(!1),b=a[0];a=vi.bind(null,a[1]);Th().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=M,e=Th();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===Q)throw Error(p(349));0!==(Hh&30)||di(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;mi(ai.bind(null,d,\nf,a),[a]);d.flags|=2048;bi(9,ci.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=Th(),b=Q.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Kh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;zj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eGj&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304)}else{if(!d)if(a=Ch(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Dj(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Gj&&1073741824!==c&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=L.current,G(L,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Hj(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(fj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Ij(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return zh(),E(Wf),E(H),Eh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Bh(b),null;case 13:E(L);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(L),null;case 4:return zh(),null;case 10:return ah(b.type._context),null;case 22:case 23:return Hj(),\nnull;case 24:return null;default:return null}}var Jj=!1,U=!1,Kj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Lj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Mj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Nj=!1;\nfunction Oj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Ci(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Nj;Nj=!1;return n}\nfunction Pj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Mj(b,c,f)}e=e.next}while(e!==d)}}function Qj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Rj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Sj(a){var b=a.alternate;null!==b&&(a.alternate=null,Sj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Tj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Uj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Tj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Vj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Vj(a,b,c),a=a.sibling;null!==a;)Vj(a,b,c),a=a.sibling}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}var X=null,Xj=!1;function Yj(a,b,c){for(c=c.child;null!==c;)Zj(a,b,c),c=c.sibling}\nfunction Zj(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Lj(c,b);case 6:var d=X,e=Xj;X=null;Yj(a,b,c);X=d;Xj=e;null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Xj;X=c.stateNode.containerInfo;Xj=!0;\nYj(a,b,c);X=d;Xj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Mj(c,b,g):0!==(f&4)&&Mj(c,b,g));e=e.next}while(e!==d)}Yj(a,b,c);break;case 1:if(!U&&(Lj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Yj(a,b,c);break;case 21:Yj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Yj(a,b,c),U=d):Yj(a,b,c);break;default:Yj(a,b,c)}}function ak(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Kj);b.forEach(function(b){var d=bk.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction ck(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*lk(d/1960))-d;if(10a?16:a;if(null===wk)var d=!1;else{a=wk;wk=null;xk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-fk?Kk(a,0):rk|=c);Dk(a,b)}function Yk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=R();a=ih(a,b);null!==a&&(Ac(a,b,c),Dk(a,c))}function uj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Yk(a,c)}\nfunction bk(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Yk(a,c)}var Vk;\nVk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)dh=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return dh=!1,yj(a,b,c);dh=0!==(a.flags&131072)?!0:!1}else dh=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;ij(a,b);a=b.pendingProps;var e=Yf(b,H.current);ch(b,c);e=Nh(null,b,d,a,e,c);var f=Sh();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,kh(b),e.updater=Ei,b.stateNode=e,e._reactInternals=b,Ii(b,d,a,c),b=jj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Xi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{ij(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Zk(d);a=Ci(d,a);switch(e){case 0:b=cj(null,b,d,a,c);break a;case 1:b=hj(null,b,d,a,c);break a;case 11:b=Yi(null,b,d,a,c);break a;case 14:b=$i(null,b,d,Ci(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),cj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),hj(a,b,d,e,c);case 3:a:{kj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;lh(a,b);qh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ji(Error(p(423)),b);b=lj(a,b,d,c,e);break a}else if(d!==e){e=Ji(Error(p(424)),b);b=lj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Vg(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=Zi(a,b,c);break a}Xi(a,b,d,c)}b=b.child}return b;case 5:return Ah(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\ngj(a,b),Xi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return oj(a,b,c);case 4:return yh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Ug(b,null,d,c):Xi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),Yi(a,b,d,e,c);case 7:return Xi(a,b,b.pendingProps,c),b.child;case 8:return Xi(a,b,b.pendingProps.children,c),b.child;case 12:return Xi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Wg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=Zi(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=mh(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);bh(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);bh(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Xi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,ch(b,c),e=eh(e),d=d(e),b.flags|=1,Xi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Ci(d,b.pendingProps),e=Ci(d.type,e),$i(a,b,d,e,c);case 15:return bj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),ij(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,ch(b,c),Gi(b,d,e),Ii(b,d,e,c),jj(null,b,d,!0,a,c);case 19:return xj(a,b,c);case 22:return dj(a,b,c)}throw Error(p(156,b.tag));};function Fk(a,b){return ac(a,b)}\nfunction $k(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new $k(a,b,c,d)}function aj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction Zk(a){if(\"function\"===typeof a)return aj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction Pg(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Rg(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)aj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Tg(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return pj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Tg(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function pj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function Qg(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction Sg(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction al(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function bl(a,b,c,d,e,f,g,h,k){a=new al(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};kh(f);return a}function cl(a,b,c){var d=3>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","module.exports = __webpack_public_path__ + \"e891b16af7cb5d9df8e4d5e61eb82f25.js\";","module.exports = __webpack_public_path__ + \"f1e373d479a7d4b1db340cdd97b4f2c7.js\";","module.exports = __webpack_public_path__ + \"905f961c5b7699c7c2268d64de9a9837.js\";","module.exports = __webpack_public_path__ + \"351bf8aa1cfd5ea357a50ac0e8a943ce.js\";","module.exports = __webpack_public_path__ + \"5e553e35fd3318387121ef542101423b.js\";","module.exports = __webpack_public_path__ + \"4781f85ddf971e4685e26b481b2d0879.js\";","module.exports = __webpack_public_path__ + \"c829112fae745936906b0d0ee8e13a00.js\";","module.exports = __webpack_public_path__ + \"2f05a710110f4b8e6b188c13ca619e6b.js\";","module.exports = __webpack_public_path__ + \"8674121466ffd952eaabf6323759d1a6.js\";","module.exports = __webpack_public_path__ + \"2663d5603d246eb4bb91591e6bbf6d4b.js\";","module.exports = __webpack_public_path__ + \"d293578c305f17cb67549877f6d5545c.js\";","module.exports = __webpack_public_path__ + \"3216f39493788fb71ce35099d1b14cc9.js\";","module.exports = __webpack_public_path__ + \"0e28e1a5c594f8118f940a6a78b287e1.js\";","module.exports = __webpack_public_path__ + \"61d143bf658b74788316fb3c6218b3bc.js\";","module.exports = __webpack_public_path__ + \"b3a5b63e4e6f78c2b9e7ee3c320f8c71.js\";","module.exports = __webpack_public_path__ + \"773a1ebb8214377f202c8c6126df228f.js\";","module.exports = __webpack_public_path__ + \"e0a96197e4534aa90a7a99ba9c121950.js\";","module.exports = __webpack_public_path__ + \"5bb0785b0459bed91b2a371c46f8541d.js\";","module.exports = __webpack_public_path__ + \"0a12a4fa85d0eb73da3c6c7ce0cd1f47.js\";","module.exports = __webpack_public_path__ + \"54c14ef24cc2d42d86b2918f8bec4235.js\";","module.exports = __webpack_public_path__ + \"a9d7b624b5bdf412b6b467dd67a12aef.js\";","module.exports = __webpack_public_path__ + \"27763ae4298e3952a1a7a339c227e5f3.js\";","module.exports = __webpack_public_path__ + \"f7d2a920c06635dc693713fe47af515d.js\";","module.exports = __webpack_public_path__ + \"206890b42d50c3034d6fed75f52a1ecf.js\";","module.exports = __webpack_public_path__ + \"2ad540bf99437f2d5d125bfbc38197e9.js\";","module.exports = __webpack_public_path__ + \"2a40776d62246b927c1351303bd3a62d.js\";","module.exports = __webpack_public_path__ + \"d39cd0f0c5a57cab19e6587e5b884257.js\";","module.exports = __webpack_public_path__ + \"b673533b069a9b890f636ad77208b07e.js\";","module.exports = __webpack_public_path__ + \"a7b2a6ca62c9f490ddc820cca5da7125.js\";","module.exports = __webpack_public_path__ + \"55ade5f83426153940280a422df4d4ca.js\";","module.exports = __webpack_public_path__ + \"33f5ce4404e102ec078ea934e4442d7d.js\";","module.exports = __webpack_public_path__ + \"571fcf4c269407bed526eee538f3943c.js\";","module.exports = __webpack_public_path__ + \"c06fd8571eec90c2f52ae5edd28a56e3.js\";","module.exports = __webpack_public_path__ + \"751648e5ec29cca93cf02978185c82f1.js\";","module.exports = __webpack_public_path__ + \"9db74bded4266f67032d37fa71488088.js\";","module.exports = __webpack_public_path__ + \"87db953571934ee886fafd15ab335afa.js\";","module.exports = __webpack_public_path__ + \"969a5d8397a01e039afffb038c16e247.js\";","module.exports = __webpack_public_path__ + \"6636491ddaa95f285d58847e30264e5f.js\";","module.exports = __webpack_public_path__ + \"3c874a3524845d3e5a5ed02579337194.js\";","module.exports = __webpack_public_path__ + \"cfbf4d42354b1a147a12f669a3f7b61f.js\";","module.exports = __webpack_public_path__ + \"48bed27c369e8429a530f4a8d5eaa9ab.js\";","module.exports = __webpack_public_path__ + \"21983a3e9bb66d61c458b0f0829285b4.js\";","module.exports = __webpack_public_path__ + \"ffa8212f72350586a2b03fa767ebb75a.js\";","module.exports = __webpack_public_path__ + \"d4477b1990582ba8f2ad1bbc37c27088.js\";","module.exports = __webpack_public_path__ + \"ced6b633884765d6a42403c81ceecf63.js\";","module.exports = __webpack_public_path__ + \"a8bcbbbfdc5f3b5d9749658a34ab4e1a.js\";","module.exports = __webpack_public_path__ + \"1fd4a01ec5e766472bb37d612bc84b02.js\";","module.exports = __webpack_public_path__ + \"5c5b76b5d9c08c61b8528dab3c36ecc1.js\";","module.exports = __webpack_public_path__ + \"133499184f7a31f55ade86b58028de99.js\";","module.exports = __webpack_public_path__ + \"dc937d6fdeb4f36bacb577c1722b50f5.js\";","module.exports = __webpack_public_path__ + \"07a98c99ce1787c53440eb2312f83ecc.js\";","module.exports = __webpack_public_path__ + \"7db19241ed22e0795f10801423f31a5b.js\";","module.exports = __webpack_public_path__ + \"3c57ae534e544420be0459411574e5e7.js\";","module.exports = __webpack_public_path__ + \"665c04057eb5a0608007ec8c2c6e636d.js\";","module.exports = __webpack_public_path__ + \"eb4252bb3ea42795d2c7b39c18c1f0e0.js\";","module.exports = __webpack_public_path__ + \"ac98c8ad6667dc31321a3d92b53d032a.js\";","module.exports = __webpack_public_path__ + \"3d90e3111bbf24338ab6153c869219ea.js\";","module.exports = __webpack_public_path__ + \"e1c68e43fbdb741db3e15be1eebbabb0.js\";","module.exports = __webpack_public_path__ + \"02349cf292365fe078c27558c6347fcc.js\";","module.exports = __webpack_public_path__ + \"769dc502ea59ac4106e5945810dc72dc.js\";","module.exports = __webpack_public_path__ + \"c89ee1db19d8fcfd1ee9a6ef4d0a12cd.js\";","module.exports = __webpack_public_path__ + \"1399211518c5c3c46a713eb7cea9a3e4.js\";","module.exports = __webpack_public_path__ + \"667b58ebbf43a4496af20599bd023cae.js\";","module.exports = __webpack_public_path__ + \"8e386b5c7128609f26741662c45826d6.js\";","module.exports = __webpack_public_path__ + \"26f58fdec14b91c43e1cbdbcdff72226.js\";","module.exports = __webpack_public_path__ + \"2964d094e968fa523795631748608b20.js\";","module.exports = __webpack_public_path__ + \"b35eb373be925dc6295afcf69fff6830.js\";","module.exports = __webpack_public_path__ + \"507bee6dad8a55564e4aacf67085874e.js\";","module.exports = __webpack_public_path__ + \"81b6917ca44b9a9be89364f7a29abe89.js\";","module.exports = __webpack_public_path__ + \"458396f506171598b916ff20275760f9.js\";","module.exports = __webpack_public_path__ + \"d49ee2f0394a8f604d2258cc3247bf62.js\";","module.exports = __webpack_public_path__ + \"61db6773423071d0b8f89ed81fa785d4.js\";","module.exports = __webpack_public_path__ + \"b4673f508b78012481b2eb98fe9175e5.js\";","module.exports = __webpack_public_path__ + \"0fa22005aaae5284f7882ed9cf771edc.js\";","module.exports = __webpack_public_path__ + \"426d224684c90cc906220e2d14b09e23.js\";","module.exports = __webpack_public_path__ + \"3abb5314cfa649d885f220ee81d436f9.js\";","module.exports = __webpack_public_path__ + \"86240592c1615d3cb5f366793beaf731.js\";","module.exports = __webpack_public_path__ + \"2c5a11f3a743658948a3167bb2b6d0f3.js\";","module.exports = __webpack_public_path__ + \"a54f977b100877aee2b7db64cffb5742.js\";","module.exports = __webpack_public_path__ + \"f5ed49dbb53e9c7510a4e98639b6b017.js\";","module.exports = __webpack_public_path__ + \"c27dd5b90745eebf4534cc6f2cca832d.js\";","module.exports = __webpack_public_path__ + \"92f1480f14427ccdacbd94c88c43c397.js\";","module.exports = __webpack_public_path__ + \"581bfa4f9d660631d4846adfec9a5c6a.js\";","module.exports = __webpack_public_path__ + \"43a507b2874915008bec9fa1f487a9b2.js\";","module.exports = __webpack_public_path__ + \"9e101077e656d091c0c2280d59f26ffc.js\";","module.exports = __webpack_public_path__ + \"aba2bf5d80f3a5ce8fcb5d5c3604f86d.js\";","module.exports = __webpack_public_path__ + \"6ddf458594498d29a983915ab328c0ad.js\";","module.exports = __webpack_public_path__ + \"1886785783c479d6170252b7fb54f236.js\";","module.exports = __webpack_public_path__ + \"ae68f889b18f1b116ba03ac72d6d429f.js\";","module.exports = __webpack_public_path__ + \"85a1bc6b5349b24dcf99ffdba13e1df8.js\";","module.exports = __webpack_public_path__ + \"a3ba078b0f464c5f2d66482789e3d75c.js\";","module.exports = __webpack_public_path__ + \"9a7b83bdbdc67e0246335d82ec41b0c2.js\";","module.exports = __webpack_public_path__ + \"0bbc902ab59d8914239d07c8de74868f.js\";","module.exports = __webpack_public_path__ + \"78a7a73f85da048383a3af9214273d7d.js\";","module.exports = __webpack_public_path__ + \"9e8d5c8a54f1015ab35347007bed78af.js\";","module.exports = __webpack_public_path__ + \"4b2277cbb8eb12a3e65b412e8de13638.js\";","module.exports = __webpack_public_path__ + \"9b1b43e80f9affb081e714a14c701edc.js\";","module.exports = __webpack_public_path__ + \"35d3442102070cbd7223c7ced121ff5a.js\";","module.exports = __webpack_public_path__ + \"4278fca3068af6f0dcae92b1ae56290e.js\";","module.exports = __webpack_public_path__ + \"ce405ae6dad6d8852bbe72ca51c50b49.js\";","module.exports = __webpack_public_path__ + \"a8410bce6d59b2b7fa0482330e45f764.js\";","module.exports = __webpack_public_path__ + \"ebf0b7573c245326bfb09d6ddcccd913.js\";","module.exports = __webpack_public_path__ + \"c65fb13239bc0da0e80f6511e38a520f.js\";","module.exports = __webpack_public_path__ + \"eea934491fa018daa4f2edd1cb938c31.js\";","module.exports = __webpack_public_path__ + \"f4d36dccb4167d737764f4908a42fcef.js\";","module.exports = __webpack_public_path__ + \"bfb1430309a7ad8359a34a6c1c11f897.js\";","module.exports = __webpack_public_path__ + \"61189cd710d276ab6358af8252f48015.js\";","module.exports = __webpack_public_path__ + \"7d72c250a04fe371e0a0b44cd2d30822.js\";","module.exports = __webpack_public_path__ + \"7588f110df898038ed71daf32942b63d.js\";","module.exports = __webpack_public_path__ + \"a41e63b870ce8d34d6af620a67487752.js\";","module.exports = __webpack_public_path__ + \"68778ca5da211a18902bb033e8dfba15.js\";","module.exports = __webpack_public_path__ + \"b13d9767254c7e2d01c4983147590dfb.js\";","module.exports = __webpack_public_path__ + \"64eeba5f007ebe61877f02f7d18671ce.js\";","module.exports = __webpack_public_path__ + \"bcf79119518b18cb49a9b5dac88481b2.js\";","module.exports = __webpack_public_path__ + \"05fe5e699f87a43a7dafae80ae4546c3.js\";","module.exports = __webpack_public_path__ + \"cab6c42e72146429533f85cf0df6ce0d.js\";","module.exports = __webpack_public_path__ + \"ae67fedb85f6506155dd6332a66e17cb.js\";","module.exports = __webpack_public_path__ + \"5041bf806fbe0fe4df47495fd5309fdf.js\";","module.exports = __webpack_public_path__ + \"52ca883cc5d2c04bb0cfa7e4a60779b1.js\";","module.exports = __webpack_public_path__ + \"072651b09656e5bd76f7251db2758ffa.js\";","module.exports = __webpack_public_path__ + \"033e17fe7c9280982fe0510973e28399.js\";","module.exports = __webpack_public_path__ + \"d82b95e04fc86bb53f367b42b03c1bdd.js\";","module.exports = __webpack_public_path__ + \"eb52b8b733394593fbd7eda7be3b7049.js\";","module.exports = __webpack_public_path__ + \"d241e95fb1cf2d934ee059f1dbe90006.js\";","module.exports = __webpack_public_path__ + \"83f3a5250a4af82939b2023e6148b6c4.js\";","module.exports = __webpack_public_path__ + \"45723ee4927212f5e84048f02f891f9a.js\";","module.exports = __webpack_public_path__ + \"c0327918cc0fc68c7d073397c51735f0.js\";","module.exports = __webpack_public_path__ + \"10629f1142b85ae496f8f61781a84c3d.js\";","module.exports = __webpack_public_path__ + \"04ef5aa875b6f3d9058d75ec2c95eced.js\";","module.exports = __webpack_public_path__ + \"be0ce81a0fc9692925540352340a491c.js\";","module.exports = __webpack_public_path__ + \"d892e0ab4d785fd87b51086ca9747ff8.js\";","module.exports = __webpack_public_path__ + \"f9538090ec78f1f7d8306509878b1428.js\";","module.exports = __webpack_public_path__ + \"bcc75eef396756e8b8fb85062754a09f.js\";","module.exports = __webpack_public_path__ + \"07dbc562fbc8f4d31c1ca6cbf1afc284.js\";","module.exports = __webpack_public_path__ + \"2ed9879af32c9dc49270b1f52f4000fb.js\";","module.exports = __webpack_public_path__ + \"5447617fc3d9bb59047a95b86af0899d.js\";","module.exports = __webpack_public_path__ + \"f28b439258269a827af58940f874d61e.js\";","module.exports = __webpack_public_path__ + \"7b1fe3b1efbbffc89e28e8ce27e87a0c.js\";","module.exports = __webpack_public_path__ + \"7a97985d4c4e307a6fee963dfb06fb06.js\";","module.exports = __webpack_public_path__ + \"7193fada70b7c7229b75ef1bb8b2d73a.js\";","module.exports = __webpack_public_path__ + \"7162fab1c16509ebc0ddc273a00d7d0d.js\";","module.exports = __webpack_public_path__ + \"47067be647bb0db22ff48c5b0a37db69.js\";","module.exports = __webpack_public_path__ + \"04bb165c0d9af0ea12fd995af366ff1c.js\";","module.exports = __webpack_public_path__ + \"17487c9a6e506b76d996f3e5fa4a94ee.js\";","module.exports = __webpack_public_path__ + \"73c09ef71e77f3c29559e6d3f8c48b31.js\";","module.exports = __webpack_public_path__ + \"a46bae1b6351015ec1556856914e7d6b.js\";","module.exports = __webpack_public_path__ + \"e3f3af1b2ec900565d4809334a2cd790.js\";","module.exports = __webpack_public_path__ + \"08973e0d2ca8c8ccaf9a54ca7da18481.js\";","module.exports = __webpack_public_path__ + \"c3701df4681ab0150dd1848252cb504f.js\";","module.exports = __webpack_public_path__ + \"010f25764d60144b0217cae63b81ba5d.js\";","module.exports = __webpack_public_path__ + \"e43564c89288d9dc205f894bb77f6254.js\";","module.exports = __webpack_public_path__ + \"fffbb937e7442ff8b49e715c0a5b5d1a.js\";","module.exports = __webpack_public_path__ + \"83ce971c3511e8554133d2d3cb9aeb33.js\";","module.exports = __webpack_public_path__ + \"952d869a2a01222514a64d8045128090.js\";","module.exports = __webpack_public_path__ + \"4e01e213023d0901fd7d980cbe006046.js\";","module.exports = __webpack_public_path__ + \"44f80ae9061e51382ec7c4bf108e1731.js\";","module.exports = __webpack_public_path__ + \"489cb66da40dac22a75175c226a4935b.js\";","module.exports = __webpack_public_path__ + \"86427e8c75808119ccc5512f288adfb0.js\";","module.exports = __webpack_public_path__ + \"231a25740f3885b681aa567136c52649.js\";","module.exports = __webpack_public_path__ + \"09b89f722364eb03596c516a1f59a643.js\";","module.exports = __webpack_public_path__ + \"81e84dc9a1caa693bc8cefcbda100818.js\";","module.exports = __webpack_public_path__ + \"3168e7e00ce647f9bcdb6dfb57601186.js\";","module.exports = __webpack_public_path__ + \"512480df238c1e7a3c9d7dbc68c2cd0e.js\";","module.exports = __webpack_public_path__ + \"ac12938878556f7bc70d7f73eb2934ea.js\";","module.exports = __webpack_public_path__ + \"f40cc4bd92adc0d387a8539e8c53f2cb.js\";","module.exports = __webpack_public_path__ + \"41ecb7e0db0346b5f5058c3516cb9ab8.js\";","module.exports = __webpack_public_path__ + \"ceb489bd915c55d3646858f477b14c8c.js\";","module.exports = __webpack_public_path__ + \"fc223f5ca8923df97273d5e41ff6b421.js\";","module.exports = __webpack_public_path__ + \"864dc68cd12727d8304ffaf99cbb33fc.js\";","module.exports = __webpack_public_path__ + \"c88c1393fde184e940fbd038deda1777.js\";","module.exports = __webpack_public_path__ + \"d0b933a986eaa060aceee8443f81773c.js\";","module.exports = __webpack_public_path__ + \"e3f43ea806d9283c54b59ad2fec150ba.js\";","module.exports = __webpack_public_path__ + \"27f1730fa3f412d9b6a5674cb98047fe.js\";","module.exports = __webpack_public_path__ + \"2c6e11c6825581eac4472338bc7f862e.js\";","module.exports = __webpack_public_path__ + \"efe79dd628429122729e305a28254067.js\";","module.exports = __webpack_public_path__ + \"b7e5caeb4c3fe75f832ebc7567183f27.js\";","module.exports = __webpack_public_path__ + \"e84ba4f0b30c5d4b186d7f7a12dc8535.js\";","module.exports = __webpack_public_path__ + \"6d5a8998fb62f2c30cc84aeb72f72e1c.js\";","module.exports = __webpack_public_path__ + \"644cc4f026f1822de3015c8a6c93e12a.js\";","module.exports = __webpack_public_path__ + \"bcf88c1fe28c500a4424d627af4579a9.js\";","module.exports = __webpack_public_path__ + \"be0f6ca01b67dc444f647d5d1cfb3963.js\";","module.exports = __webpack_public_path__ + \"441f3dfac5b7e77c6f7c3c982f0e1abf.js\";","module.exports = __webpack_public_path__ + \"638372056030d0e2a5b6e577f0820bde.js\";","module.exports = __webpack_public_path__ + \"50d7b9d5564af41e15334c775d388b8a.js\";","module.exports = __webpack_public_path__ + \"61855d04ddae3c09a6bf853e9d43e87c.js\";","module.exports = __webpack_public_path__ + \"e459fb4d3de74e0864b61956288bf321.js\";","module.exports = __webpack_public_path__ + \"252f9e20b0ed982cb09767ffd11522b2.js\";","module.exports = __webpack_public_path__ + \"3cdbaec63719b3e447dd9c8c9227d92e.js\";","module.exports = __webpack_public_path__ + \"d5aaaf6012f46cdbc2d6957d158750bb.js\";","module.exports = __webpack_public_path__ + \"e1fdd5c4a3b2c82331120b5ad294bf6e.js\";","module.exports = __webpack_public_path__ + \"3fa5534beff0260481c6403402163150.js\";","module.exports = __webpack_public_path__ + \"5dc907b5801ae7592157ebc0810dfb7a.js\";","module.exports = __webpack_public_path__ + \"8f40f1f6eb7f424e5d2b587097130509.js\";","module.exports = __webpack_public_path__ + \"584be887e674e0927a347b3d994fd66c.js\";","module.exports = __webpack_public_path__ + \"52371ef9e37c2b029dd1183fa89f1ec2.js\";","module.exports = __webpack_public_path__ + \"ef9a1ab9eb948db0d0eed6e4b79ea66e.js\";","module.exports = __webpack_public_path__ + \"8e668fd4571abdde393fdf49b8b797eb.js\";","module.exports = __webpack_public_path__ + \"a9267a80978076cb987bf6a4cd0c5c7f.js\";","module.exports = __webpack_public_path__ + \"1d1889b3a1bf6c171c061dce1c0e92e5.js\";","module.exports = __webpack_public_path__ + \"0ffb18fb70c87335edee31a479f58a43.js\";","module.exports = __webpack_public_path__ + \"5ba4d94d5e688253299f73c9c4e14f7f.js\";","module.exports = __webpack_public_path__ + \"5f3fc5973f393af89d6498df705af754.js\";","module.exports = __webpack_public_path__ + \"75275994511d6aff2b7968855b3cd3c0.js\";","module.exports = __webpack_public_path__ + \"b633b47a370a4fcfddac913202c64734.js\";","module.exports = __webpack_public_path__ + \"4630200cbcab13b7cc10e1a13eb38685.js\";","module.exports = __webpack_public_path__ + \"8d392bbc39c7370a930e13e30cd5244b.js\";","module.exports = __webpack_public_path__ + \"937cc377142ec80ca6281848af10cae9.js\";","module.exports = __webpack_public_path__ + \"a114119af5153781dced573e65d1574e.js\";","module.exports = __webpack_public_path__ + \"5978fe3fe81415f9b780848ac6f3772d.js\";","module.exports = __webpack_public_path__ + \"6df5a91d33edeab4990a384fc574f34b.js\";","module.exports = __webpack_public_path__ + \"5a526cdb2dc025e983413d702d6412ab.js\";","module.exports = __webpack_public_path__ + \"40ddd82cee52c9daad7dd3f77b94c2c9.js\";","module.exports = __webpack_public_path__ + \"e6c2a7122df1b70c59b04de2c33be5df.js\";","module.exports = __webpack_public_path__ + \"2d9c0966a594b2f7ac5fa04883c8d951.js\";","module.exports = __webpack_public_path__ + \"4aba8f7773972fd6c47d96cbd4236ba2.js\";","module.exports = __webpack_public_path__ + \"ccb3e3dcc0ebe1c5af55658fb68b460a.js\";","module.exports = __webpack_public_path__ + \"9c15bfc874437ce152377f97e1f3a444.js\";","module.exports = __webpack_public_path__ + \"cce112a2a78f215dbf8026fccd277412.js\";","module.exports = __webpack_public_path__ + \"66c1ef9aa27305a8f2a0cf5c88aef51d.js\";","module.exports = __webpack_public_path__ + \"17e17d5b998a74fa0f5a64f9538a48ba.js\";","module.exports = __webpack_public_path__ + \"330b0c4e3c2fb85009ef6daf099b607b.js\";","module.exports = __webpack_public_path__ + \"29dd0fe96b9fb6bfee8eca138f01394d.js\";","module.exports = __webpack_public_path__ + \"4d5a5bf22332df156f82d6b223f87e93.js\";","module.exports = __webpack_public_path__ + \"acc1f9afdf512f62de124cd64fc414ec.js\";","module.exports = __webpack_public_path__ + \"e003d9c6f76f9b2bcad8bbe72f5aaf4b.js\";","module.exports = __webpack_public_path__ + \"31b457d1e9dfba8bffe535ec22ae0d8e.js\";","module.exports = __webpack_public_path__ + \"d9081202d161fd0a700316a8cb076f31.js\";","module.exports = __webpack_public_path__ + \"c7a7a718c85bba6144b2a580a717ff0e.js\";","module.exports = __webpack_public_path__ + \"05f2b6d27716f95c75421370d5ee9029.js\";","module.exports = __webpack_public_path__ + \"32ad5ac64ae1db87d820b357dd642db4.js\";","module.exports = __webpack_public_path__ + \"329fd36cc40af8cb92bd6aadc8e719f1.js\";","module.exports = __webpack_public_path__ + \"8f7b2f5e6a1fbe5447eb6b48b1b706f0.js\";","module.exports = __webpack_public_path__ + \"6e8c0ebd5905c7de447cc22128fd5799.js\";","module.exports = __webpack_public_path__ + \"c3ec73ec5450fb4cac984fc867dd54eb.js\";","module.exports = __webpack_public_path__ + \"9cf779bc2822a754e8a107ec5f78fce3.js\";","module.exports = __webpack_public_path__ + \"8205e4c3776c3cd9e6a9268b983342dc.js\";","module.exports = __webpack_public_path__ + \"f2561d02a83fd42f322510803a14d6bc.js\";","module.exports = __webpack_public_path__ + \"60954fd51b67276a98ee24a999c39174.js\";","module.exports = __webpack_public_path__ + \"1252dbb34df63db10f2b8818e38144c3.js\";","module.exports = __webpack_public_path__ + \"2011976f347dff043a461b1fbb850994.js\";","module.exports = __webpack_public_path__ + \"4ceef1d773c3bc407cb32a2a9d7a0fb7.js\";","module.exports = __webpack_public_path__ + \"3db61c65b05bc0206e606f60bfdfbe8d.js\";","module.exports = __webpack_public_path__ + \"cb5dfe7139307acb159e146a4c48e7fa.js\";","module.exports = __webpack_public_path__ + \"4a8617028050014281452ee8bcca38fb.js\";","module.exports = __webpack_public_path__ + \"3cbef9c27a8f652b5f90bdb7f50f489f.js\";","module.exports = __webpack_public_path__ + \"6261136900e4499d1bdbe6cfa5d77018.js\";","module.exports = __webpack_public_path__ + \"ac21c67fc8dc855bc0565d3013c0d86d.js\";","module.exports = __webpack_public_path__ + \"c8465177ba476b68337fa2cf3743db20.js\";","module.exports = __webpack_public_path__ + \"e89241e9bbeceb5b088f5a26724b4d41.js\";","module.exports = __webpack_public_path__ + \"c98e74fc97b04fe8bf43dcdff549afcf.js\";","module.exports = __webpack_public_path__ + \"c102279c0352bd283ce90c0c835912e4.js\";","module.exports = __webpack_public_path__ + \"2834c17662fe5902656af6505d72111a.js\";","module.exports = __webpack_public_path__ + \"c656b0772e640b9b22aec154b603e9d2.js\";","module.exports = __webpack_public_path__ + \"6247279dbb9c17a5fe8670679c2efa79.js\";","module.exports = __webpack_public_path__ + \"1046b30afca9b1942dd448bcafff2a95.js\";","module.exports = __webpack_public_path__ + \"e1a082f09baebe8b6c74d16601ec2413.js\";","module.exports = __webpack_public_path__ + \"514f848710c62bc7abe0c60d10689e38.js\";","module.exports = __webpack_public_path__ + \"9118d85d3fc7d5e18701a6fa9abaf7bf.js\";","module.exports = __webpack_public_path__ + \"f574c6ed6a178b4374b7c570ab2fce5f.js\";","module.exports = __webpack_public_path__ + \"38b2b13102a2cedd38c531675909a2e1.js\";","module.exports = __webpack_public_path__ + \"23e579d49d8f8206607964d627b336b7.js\";","module.exports = __webpack_public_path__ + \"80c513507c9d94f87356da0d4eebbab5.js\";","module.exports = __webpack_public_path__ + \"e41e9eb462c8e4e6294d3535bf99ab38.js\";","module.exports = __webpack_public_path__ + \"6b935ecf051eedddc3e5866ad9bc2407.js\";","module.exports = __webpack_public_path__ + \"0bbdfc82acc2ea66ba14ad4c65193773.js\";","module.exports = __webpack_public_path__ + \"ed467b0f1e10c0e98c4c75fa0b449b4a.js\";","module.exports = __webpack_public_path__ + \"a6bd55cbcfd8ea7298acfca95060ce20.js\";","module.exports = __webpack_public_path__ + \"f76ee9c8abfdd96fb9d70116d40435d5.js\";","module.exports = __webpack_public_path__ + \"7dee8bceaa3c2e167aa6bbd97badf4d9.js\";","module.exports = __webpack_public_path__ + \"a188d4f92371f4cd2ff24618bfd9cbd1.js\";","module.exports = __webpack_public_path__ + \"671983dc71a4a790345e0d886a5d552d.js\";","module.exports = __webpack_public_path__ + \"ef68d1d2222a45a86eb6065b77b0368c.js\";","module.exports = __webpack_public_path__ + \"447d517fa97ade2431129259df43df62.js\";","module.exports = __webpack_public_path__ + \"0a4438ad4f6617ec42fb006d2c3da2ad.js\";","module.exports = __webpack_public_path__ + \"872bd129a8f1b0ea220203636689646c.js\";","module.exports = __webpack_public_path__ + \"416ed2107351fd987a35ec4cb508e7ba.js\";","module.exports = __webpack_public_path__ + \"374d75f3f99b9a83f1b7a74f89fc7bc2.js\";","module.exports = __webpack_public_path__ + \"defb40a0b82472531a9639d25cfdf1b6.js\";","module.exports = __webpack_public_path__ + \"f7c5ee40fb757029234c03cfcfa03646.js\";","module.exports = __webpack_public_path__ + \"c0eebaec55db3f9dfe8e8e6f1eeef982.js\";","module.exports = __webpack_public_path__ + \"b727aec9e66a495d4d5b3ad745bc4aa5.js\";","module.exports = __webpack_public_path__ + \"f340f898873d57bbfffeb51bdab50f49.js\";","module.exports = __webpack_public_path__ + \"cd44d156a89a1688360746ded95efafe.js\";","module.exports = __webpack_public_path__ + \"144e38358d6dddaaa6bc2602bf312b6a.js\";","module.exports = __webpack_public_path__ + \"3068bb1a1d1e69644accc2f3945707f5.js\";","module.exports = __webpack_public_path__ + \"1261ef2b1ed112b8f15686ce9b968b0f.js\";","module.exports = __webpack_public_path__ + \"b39545e8b6775a7f4bac8993a91204c1.js\";","module.exports = __webpack_public_path__ + \"1d48b3a38a76bfc80d5718a91fd4c252.js\";","module.exports = __webpack_public_path__ + \"778b4110847987fbfc51b84b0e235e1d.js\";","module.exports = __webpack_public_path__ + \"a88efc791c64200677603e2742bb31cb.js\";","module.exports = __webpack_public_path__ + \"ec71113b34db8933ebe83f53b366d20f.js\";","module.exports = __webpack_public_path__ + \"58e61722e9d1329ed9c621f5014ebe67.js\";","module.exports = __webpack_public_path__ + \"caa320a365f2d3616ca721bcc981f1a4.js\";","module.exports = __webpack_public_path__ + \"5215a383dc75b5d5808f4e9dcabc4798.js\";","module.exports = __webpack_public_path__ + \"5187c57f286362152187a6e9b5619599.js\";","module.exports = __webpack_public_path__ + \"d43ab08fca10c1c74704907d2b6d933a.js\";","module.exports = __webpack_public_path__ + \"41a24a09e85d423db32d11ce6488a4d0.js\";","module.exports = __webpack_public_path__ + \"4f602915a313027d036689b04e8c264e.js\";","module.exports = __webpack_public_path__ + \"49db9cf6f30a219cf140f7846d87a418.js\";","module.exports = __webpack_public_path__ + \"601bafbdee8c23b55126c5e1964a3f8e.js\";","module.exports = __webpack_public_path__ + \"efae0fc6f092182099e02328bc39980f.js\";","module.exports = __webpack_public_path__ + \"f20880859755c71283bcb010ad3c71ef.js\";","module.exports = __webpack_public_path__ + \"31a7c73e2e24faf8299472bf33a95f9f.js\";","module.exports = __webpack_public_path__ + \"2f70915bee5cd7267e53e5b969d8eb9a.js\";","module.exports = __webpack_public_path__ + \"27cf2b1518f467f2f47b6eb754773c05.js\";","module.exports = __webpack_public_path__ + \"46db3c1bd8fd10cf01f4e91271fe51a2.js\";","module.exports = __webpack_public_path__ + \"75b9b4dd40e8e36ea8dd3aaa410a1edd.js\";","module.exports = __webpack_public_path__ + \"b2fbe444b88a758f45f7a1c4beb686d9.js\";","module.exports = __webpack_public_path__ + \"b53b20cabeea14ae8ad8a4d19f8da928.js\";","module.exports = __webpack_public_path__ + \"0370cbfa98f4c6ee101fabfc50494dff.js\";","module.exports = __webpack_public_path__ + \"6aa0b5af0bf54d1e02d9e01d14e51751.js\";","module.exports = __webpack_public_path__ + \"3020c220cfcf7a97372ed572fae92ec8.js\";","module.exports = __webpack_public_path__ + \"0c14e3f2bbdb026c7dbdecf587f1df62.js\";","module.exports = __webpack_public_path__ + \"2c2159514289dbaaace9dfa7ce2879e4.js\";","module.exports = __webpack_public_path__ + \"ab58394de27367bf1cb0cc26394ece44.js\";","module.exports = __webpack_public_path__ + \"6fa983289e62f70d40916e28ac753995.js\";","module.exports = __webpack_public_path__ + \"03b6f5ed432b1096271448f530f79c3a.js\";","module.exports = __webpack_public_path__ + \"69ee46622b6a45aa858ad66570490c85.js\";","module.exports = __webpack_public_path__ + \"809aad7340c184c76c4bf229a697df28.js\";","module.exports = __webpack_public_path__ + \"0a84849cb72c84fb6a9b4d831df64ffa.js\";","module.exports = __webpack_public_path__ + \"daa5b3009f7d0a190395dbe21d9ff89b.js\";","module.exports = __webpack_public_path__ + \"d313df4eab72b5bcdd6d64098167a8c0.js\";","module.exports = __webpack_public_path__ + \"9b0ee69b55e67d310e8165850d26b516.js\";","module.exports = __webpack_public_path__ + \"f7f74eec10f0f40d32b9a3c4283f92e0.js\";","module.exports = __webpack_public_path__ + \"2fe20f67f87f89304d126829a63e97ec.js\";","module.exports = __webpack_public_path__ + \"4d3535459dc8829878c59eec84dd7d50.js\";","module.exports = __webpack_public_path__ + \"a1883a50fa7e229ceeb72b409367a1b1.js\";","module.exports = __webpack_public_path__ + \"b3c8fac34d63a9fe758b737a2560c911.js\";","module.exports = __webpack_public_path__ + \"5659bda221c28b734675cd7b003936cf.js\";","module.exports = __webpack_public_path__ + \"b543f2132fa98d7f3fbb4cc21b85798d.js\";","module.exports = __webpack_public_path__ + \"4ba67801fa5b8763a193b659cdaa39f2.js\";","module.exports = __webpack_public_path__ + \"85ada81b8ae00c5c02f3e7d78c1c7bab.js\";","module.exports = __webpack_public_path__ + \"5f02ed5b50e96d24c9be55e81725e4e3.js\";","module.exports = __webpack_public_path__ + \"86261f3873c6c41cd7b202869eda8711.js\";","module.exports = __webpack_public_path__ + \"76673952d5d955ad3d06c57fc2ceb1bc.js\";","module.exports = __webpack_public_path__ + \"b0292b4a05603f08f48adf55fca0526d.js\";","module.exports = __webpack_public_path__ + \"77be0eaf4d31d3a1e6e16e9905ca80bc.js\";","module.exports = __webpack_public_path__ + \"4696e1bce7cbb0d562307a9b78ed3d27.js\";","module.exports = __webpack_public_path__ + \"40064f074583135ca817d3240c2ed429.js\";","module.exports = __webpack_public_path__ + \"3b7aa4bec85f22922900b661299b0167.js\";","module.exports = __webpack_public_path__ + \"8b1930520e20f14d59f03846b26ee631.js\";","module.exports = __webpack_public_path__ + \"14fb9744f459ee2b7fa3173f522a3ebe.js\";","module.exports = __webpack_public_path__ + \"5eb3eb988b6e830c0223e6c98cda5fae.js\";","module.exports = __webpack_public_path__ + \"a4e596382ff74ce76300b0d13854ee60.js\";","module.exports = __webpack_public_path__ + \"95feaecc61642afa67a5da13324b01ba.js\";","module.exports = __webpack_public_path__ + \"b322f95f1e5bebb4a5b18f9f2b458273.js\";","module.exports = __webpack_public_path__ + \"92193223f1119a6d4dc3e4e598cb52cc.js\";","module.exports = __webpack_public_path__ + \"ef939a6546ba280ff6df495187b1fea9.js\";","module.exports = __webpack_public_path__ + \"a978aefb28207349dd499e7e48b8b24c.js\";","module.exports = __webpack_public_path__ + \"8b2f56ada6f4e413d1f786360ca56a7a.js\";","module.exports = __webpack_public_path__ + \"40725ca7663b7b9062abc36c7fdda924.js\";","module.exports = __webpack_public_path__ + \"1abe08b3249335736c0f016631f03702.js\";","module.exports = __webpack_public_path__ + \"9d02ff47bb53872e090c2a9d95d10661.js\";","module.exports = __webpack_public_path__ + \"07de343f3a3a86b4c67e887239399197.js\";","module.exports = __webpack_public_path__ + \"282a92c1da5b14659f7e53c26dba3b5a.js\";","module.exports = __webpack_public_path__ + \"32ad89f1eb8d218e23f74b7524372b75.js\";","module.exports = __webpack_public_path__ + \"eab387dee57def86c245a3d71365a614.js\";","module.exports = __webpack_public_path__ + \"68fe89dbba54111bf19429b0216a9b5a.js\";","module.exports = __webpack_public_path__ + \"07011752aeaa58913a688453ba034167.js\";","module.exports = __webpack_public_path__ + \"a569398d49699663dcf96cc678e287be.js\";","module.exports = __webpack_public_path__ + \"8337eeadebdb971a02324d52274f6779.js\";","module.exports = __webpack_public_path__ + \"177aee7c327a058d40cfce553f9317d9.js\";","module.exports = __webpack_public_path__ + \"f542ac16a923e0535afa0f2e0949d36a.js\";","module.exports = __webpack_public_path__ + \"5b1d2b627fc4ab262f046c3d4df39896.js\";","module.exports = __webpack_public_path__ + \"b7fd910a3ae745f5f74c065a25cbd640.js\";","module.exports = __webpack_public_path__ + \"9157540a213078aaca3efb693fe0431b.js\";","module.exports = __webpack_public_path__ + \"83d96a9f8c82b870aa08a2a01b667cdc.js\";","module.exports = __webpack_public_path__ + \"8555c9e84b1a7796821635d4418bc10b.js\";","module.exports = __webpack_public_path__ + \"a46b2436ca8aefa702a802793beb6284.js\";","module.exports = __webpack_public_path__ + \"5e299868db8f582a38bfd49191c66452.js\";","module.exports = __webpack_public_path__ + \"0852f92938fb8c4aae7dfcc307a636c6.js\";","module.exports = __webpack_public_path__ + \"3b0327da890a2fc2c6b1b3b9534306f3.js\";","module.exports = __webpack_public_path__ + \"0d23aba2dc82c8a5b2c908efb76d1b53.js\";","module.exports = __webpack_public_path__ + \"78f57b4c6c98f3226c710b994071e12b.js\";","module.exports = __webpack_public_path__ + \"8adc477823e6d755e4bb908723108013.js\";","module.exports = __webpack_public_path__ + \"36d912af93162b402b55b5afb365f960.js\";","module.exports = __webpack_public_path__ + \"1bfb62a79fa8c12cd02be55ec9646ea4.js\";","module.exports = __webpack_public_path__ + \"b9bded89e6e24aabbc3352ed5af3706d.js\";","module.exports = __webpack_public_path__ + \"6b0e6ef64d1b67ffdd756f3756f67a8d.js\";","module.exports = __webpack_public_path__ + \"6e5f9acbcc653e38f81ecd924eeb956b.js\";","module.exports = __webpack_public_path__ + \"baf58bc17b0fecf5ddcaa117f451715c.js\";","module.exports = __webpack_public_path__ + \"4d60660cfabdb7fe2ffbf84c1b6b61ec.js\";","module.exports = __webpack_public_path__ + \"77c544b2ce5f734e61e3c3d63ea7f827.js\";","module.exports = __webpack_public_path__ + \"f4dfd0c9ebf076ba045b2e2b3c5490c8.js\";","module.exports = __webpack_public_path__ + \"794526d5f0d0ea12f761eb3b6dea7a33.js\";","module.exports = __webpack_public_path__ + \"051172af4df2228c8acf8d04d449ab1d.js\";","module.exports = __webpack_public_path__ + \"47feb3313fd4914e51f4744a5143a182.js\";","module.exports = __webpack_public_path__ + \"e3dcf6e782f47a8ae315d506571e57bf.js\";","module.exports = __webpack_public_path__ + \"944f4aa96bfa69a0ebbf61c2af1cfb85.js\";","module.exports = __webpack_public_path__ + \"db1f36e971cc752e709cc9ccf3e78970.js\";","module.exports = __webpack_public_path__ + \"bf24eb9b91f882cafcfa6a7e8e3c56b1.js\";","module.exports = __webpack_public_path__ + \"0c93349d05810059db73cafb8956afd5.js\";","module.exports = __webpack_public_path__ + \"a2bdeadee19fc235201177a881aa36d3.js\";","module.exports = __webpack_public_path__ + \"b0e6205a0e4e8e8bc47ea70edb1b438a.js\";","module.exports = __webpack_public_path__ + \"8cb6636bef46b785ae2538eca302e268.js\";","module.exports = __webpack_public_path__ + \"f56d32e1f2b28367fb9708336457c4a6.js\";","module.exports = __webpack_public_path__ + \"216159cd8fdffa505cf076d5f63d6d63.js\";","module.exports = __webpack_public_path__ + \"ff8b71b1bce6feb81065d8340e07dfeb.js\";","module.exports = __webpack_public_path__ + \"b6bbe63b8bee85fdb29d83a7d6eb6b13.js\";","module.exports = __webpack_public_path__ + \"1b7b64ca98b308253619de9983f137da.js\";","module.exports = __webpack_public_path__ + \"8b306fac8264cf38848c86ffd3605cdf.js\";","module.exports = __webpack_public_path__ + \"14de4e2d134ba188b7779aec466c329e.js\";","module.exports = __webpack_public_path__ + \"b84be858a642bbca8ce37f024c8cf077.js\";","module.exports = __webpack_public_path__ + \"299f60eb59b60b0f2478f771104213e3.js\";","module.exports = __webpack_public_path__ + \"d917b953089af88146c9d372fae04338.js\";","module.exports = __webpack_public_path__ + \"983dcb1a5f27734f41896255b87c053a.js\";","module.exports = __webpack_public_path__ + \"2dcab909ac3cf23566caa42f7775fc79.js\";","module.exports = __webpack_public_path__ + \"8110c13625ce97e4790940658da9b15b.js\";","module.exports = __webpack_public_path__ + \"5ad9c45cdae7f33538cbf9d242f13a45.js\";","module.exports = __webpack_public_path__ + \"b1a20f23a11d3780fba0aece5974f92f.js\";","module.exports = __webpack_public_path__ + \"3de616b9d6094762bae2db8efe2585b0.js\";","module.exports = __webpack_public_path__ + \"faff7eac3e85d097bddb499853cadf3f.js\";","module.exports = __webpack_public_path__ + \"e5d228da9027233b57157a38488472e2.js\";","module.exports = __webpack_public_path__ + \"10128da3035f009482388eca243671f9.js\";","module.exports = __webpack_public_path__ + \"69ad85fc5ee5694ca9d7fb6e5c414b64.js\";","module.exports = __webpack_public_path__ + \"c5c1e5d310c7694ae9a2f546c86777fe.js\";","module.exports = __webpack_public_path__ + \"d7cbf0d6e3498f1b8e262f59d616f2d7.js\";","module.exports = __webpack_public_path__ + \"e106919da9b2f009089927f80180964a.js\";","module.exports = __webpack_public_path__ + \"151885260b4c93e887637ae8ef45d283.js\";","module.exports = __webpack_public_path__ + \"9fcfd41d2c010d34003792af72b7b789.js\";","module.exports = __webpack_public_path__ + \"8994085bb894159bb94680f99b3b4880.js\";","module.exports = __webpack_public_path__ + \"ad1cb0c4b00d25aeaa9e054cc9b14003.js\";","module.exports = __webpack_public_path__ + \"599094eab03a98c55e5f5196a6890d00.js\";","module.exports = __webpack_public_path__ + \"1d035622577e7ec4029da2b48c932b58.js\";","module.exports = __webpack_public_path__ + \"9abea5f1a5bb015268626d071ef77ce9.js\";","module.exports = __webpack_public_path__ + \"f727bae2914614dc4ee7c35e15afd157.js\";","module.exports = __webpack_public_path__ + \"4a26cc3909c29f1af7812d24064b790c.js\";","module.exports = __webpack_public_path__ + \"003eb537d61ff38473315eadca618b1f.js\";","module.exports = __webpack_public_path__ + \"2c9d94e29e42dc191a498ca23c7022a2.js\";","module.exports = __webpack_public_path__ + \"ec40d9e787c4a8e1a9e40efaf22a0832.js\";","module.exports = __webpack_public_path__ + \"ee7d37ce1c8d4786dcfa00848388d1b6.js\";","module.exports = __webpack_public_path__ + \"5d6d8a7c67fe51f30cf4272a2bcbb8e9.js\";","module.exports = __webpack_public_path__ + \"be6fc4dc465d36347cbabb636453fd06.js\";","module.exports = __webpack_public_path__ + \"9fe528273e42538a10b8ccc8f905840b.js\";","module.exports = __webpack_public_path__ + \"91b54a9bf64eb1fabfd3e05d0c8417e3.js\";","module.exports = __webpack_public_path__ + \"34c0e330f47483a4d075fae01b853508.js\";","module.exports = __webpack_public_path__ + \"6e8bdb014a8610c18e1a5faaff6f5c56.js\";","module.exports = __webpack_public_path__ + \"4ae78f4e4907a47a101038f6ea29360b.js\";","module.exports = __webpack_public_path__ + \"5a327a0d51f3302df1514fda4df462ea.js\";","module.exports = __webpack_public_path__ + \"1125ca5a19c36894e8c6145b1db99c01.js\";","module.exports = __webpack_public_path__ + \"751c5aca7113e87a95082ca044d11f52.js\";","module.exports = __webpack_public_path__ + \"4579d65059a2ece3373e23132f4e5786.js\";","module.exports = __webpack_public_path__ + \"6ada81b2963c4d9832c093c0a4862059.js\";","module.exports = __webpack_public_path__ + \"c0c00138dd80320e9162a2e165137375.js\";","module.exports = __webpack_public_path__ + \"2ee01ce3c388775e341e2879e1782822.js\";","module.exports = __webpack_public_path__ + \"fc7f2002981f66fd41313de5a02e74ec.js\";","module.exports = __webpack_public_path__ + \"594f30af0bde34cecea1a5c9d76f84c1.js\";","module.exports = __webpack_public_path__ + \"bba802f115be653f74ec489c80ff7946.js\";","module.exports = __webpack_public_path__ + \"ff33a9dadaa99152666e2168dcb23aa1.js\";","module.exports = __webpack_public_path__ + \"88f76ad2dfb344ab14cd45d42b2fa775.js\";","module.exports = __webpack_public_path__ + \"7add9505ab183ee5d628f711369e1ee7.js\";","module.exports = __webpack_public_path__ + \"5cb96f6aa6100070085deca2806b8512.js\";","module.exports = __webpack_public_path__ + \"0f85d6a8dee452fba44ba167171582e1.js\";","module.exports = __webpack_public_path__ + \"056a22210b24fede14f63222066e1ce2.js\";","module.exports = __webpack_public_path__ + \"70896c45cb42a1a16168cef789116031.js\";","module.exports = __webpack_public_path__ + \"7d8b51dc1769347f50c0f5f85a5bf6ec.js\";","module.exports = __webpack_public_path__ + \"f0b9f73f874277dc39a4ef32bc51030b.js\";","module.exports = __webpack_public_path__ + \"66532514de90e08ac0c7d1e4b6e5286c.js\";","module.exports = __webpack_public_path__ + \"7fa82f5ff5a7265dd27f3e2e19e8a0ef.js\";","module.exports = __webpack_public_path__ + \"16470d85f9e6b184411b622ce1783fd0.js\";","module.exports = __webpack_public_path__ + \"194d7f4e3cb321b79020a3ad1ea4be7f.js\";","'use strict';\n\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\nvar undefined = (function(undefined) {\n return undefined;\n})();\n\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nfunction isString(value) {\n return (typeof value == 'string') ||\n (Object.prototype.toString.call(value) == '[object String]');\n}\n\nfunction isDateTime(value) {\n return (Object.prototype.toString.call(value) == '[object Date]');\n}\n\nfunction isObject(value) {\n return (value !== null) && (typeof value == 'object');\n}\n\nfunction isFunction(value) {\n return typeof value == 'function';\n}\n\nfunction isLength(value) {\n return (typeof value == 'number') &&\n (value > -1) && (value % 1 == 0) &&\n (value <= MAX_SAFE_INTEGER);\n}\n\nfunction isArray(value) {\n return Object.prototype.toString.call(value) == '[object Array]';\n}\n\nfunction isArrayLike(value) {\n return isObject(value) && !isFunction(value) && isLength(value.length);\n}\n\nfunction isArrayBuffer(value) {\n return Object.prototype.toString.call(value) == '[object ArrayBuffer]';\n}\n\nfunction map(array, iteratee) {\n return Array.prototype.map.call(array, iteratee);\n}\n\nfunction find(array, iteratee) {\n var result = undefined;\n\n if (isFunction(iteratee)) {\n Array.prototype.every.call(array, function(item, index, array) {\n var found = iteratee(item, index, array);\n if (found) {\n result = item;\n }\n return !found; // continue if not found\n });\n }\n\n return result;\n}\n\nfunction extend(target /* ...sources */) {\n return Object.assign.apply(null, arguments);\n}\n\nfunction toUint8Array(value) {\n var i;\n var length;\n var result;\n\n if (isString(value)) {\n length = value.length;\n result = new Uint8Array(length);\n for (i = 0; i < length; i++) {\n result[i] = value.charCodeAt(i) & 0xFF;\n }\n return result;\n }\n\n if (isArrayBuffer(value)) {\n return new Uint8Array(value);\n }\n\n if (isObject(value) && isArrayBuffer(value.buffer)) {\n return new Uint8Array(value.buffer);\n }\n\n if (isArrayLike(value)) {\n return new Uint8Array(value);\n }\n\n if (isObject(value) && isFunction(value.toString)) {\n return toUint8Array(value.toString());\n }\n\n return new Uint8Array();\n}\n\nmodule.exports.MAX_SAFE_INTEGER = MAX_SAFE_INTEGER;\n\nmodule.exports.isUndefined = isUndefined;\nmodule.exports.isString = isString;\nmodule.exports.isObject = isObject;\nmodule.exports.isDateTime = isDateTime;\nmodule.exports.isFunction = isFunction;\nmodule.exports.isArray = isArray;\nmodule.exports.isArrayLike = isArrayLike;\nmodule.exports.isArrayBuffer = isArrayBuffer;\nmodule.exports.map = map;\nmodule.exports.find = find;\nmodule.exports.extend = extend;\nmodule.exports.toUint8Array = toUint8Array;\n","'use strict';\n\nvar NULL_CHAR = '\\u0000';\n\nmodule.exports = {\n /* eslint-disable key-spacing */\n\n NULL_CHAR: NULL_CHAR,\n\n TMAGIC: 'ustar' + NULL_CHAR + '00', // 'ustar', NULL, '00'\n OLDGNU_MAGIC: 'ustar ' + NULL_CHAR, // 'ustar ', NULL\n\n // Values used in typeflag field.\n REGTYPE: 0, // regular file\n LNKTYPE: 1, // link\n SYMTYPE: 2, // reserved\n CHRTYPE: 3, // character special\n BLKTYPE: 4, // block special\n DIRTYPE: 5, // directory\n FIFOTYPE: 6, // FIFO special\n CONTTYPE: 7, // reserved\n\n // Bits used in the mode field, values in octal.\n TSUID: parseInt('4000', 8), // set UID on execution\n TSGID: parseInt('2000', 8), // set GID on execution\n TSVTX: parseInt('1000', 8), // reserved\n\n // file permissions\n TUREAD: parseInt('0400', 8), // read by owner\n TUWRITE: parseInt('0200', 8), // write by owner\n TUEXEC: parseInt('0100', 8), // execute/search by owner\n TGREAD: parseInt('0040', 8), // read by group\n TGWRITE: parseInt('0020', 8), // write by group\n TGEXEC: parseInt('0010', 8), // execute/search by group\n TOREAD: parseInt('0004', 8), // read by other\n TOWRITE: parseInt('0002', 8), // write by other\n TOEXEC: parseInt('0001', 8), // execute/search by other\n\n TPERMALL: parseInt('0777', 8), // rwxrwxrwx\n TPERMMASK: parseInt('0777', 8) // permissions bitmask\n\n /* eslint-enable key-spacing */\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar constants = require('./constants');\n\nvar recordSize = 512;\nvar defaultFileMode = constants.TPERMALL; // rwxrwxrwx\nvar defaultUid = 0; // root\nvar defaultGid = 0; // root\n\n/*\n struct posix_header { // byte offset\n char name[100]; // 0\n char mode[8]; // 100\n char uid[8]; // 108\n char gid[8]; // 116\n char size[12]; // 124\n char mtime[12]; // 136\n char chksum[8]; // 148\n char typeflag; // 156\n char linkname[100]; // 157\n char magic[6]; // 257\n char version[2]; // 263\n char uname[32]; // 265\n char gname[32]; // 297\n char devmajor[8]; // 329\n char devminor[8]; // 337\n char prefix[131]; // 345\n char atime[12]; // 476\n char ctime[12]; // 488\n };\n */\n\nvar posixHeader = [\n // , , , , , , [ ]\n ['name', 100, 0, function(file, field) {\n return formatTarString(file[field[0]], field[1]);\n }, function(buffer, offset, field) {\n return parseTarString(buffer.slice(offset, offset + field[1]));\n }],\n ['mode', 8, 100, function(file, field) {\n var mode = file[field[0]] || defaultFileMode;\n mode = mode & constants.TPERMMASK;\n return formatTarNumber(mode, field[1], defaultFileMode);\n }, function(buffer, offset, field) {\n var result = parseTarNumber(buffer.slice(offset, offset + field[1]));\n result &= constants.TPERMMASK;\n return result;\n }],\n ['uid', 8, 108, function(file, field) {\n return formatTarNumber(file[field[0]], field[1], defaultUid);\n }, function(buffer, offset, field) {\n return parseTarNumber(buffer.slice(offset, offset + field[1]));\n }],\n ['gid', 8, 116, function(file, field) {\n return formatTarNumber(file[field[0]], field[1], defaultGid);\n }, function(buffer, offset, field) {\n return parseTarNumber(buffer.slice(offset, offset + field[1]));\n }],\n ['size', 12, 124, function(file, field) {\n return formatTarNumber(file.data.length, field[1]);\n }, function(buffer, offset, field) {\n return parseTarNumber(buffer.slice(offset, offset + field[1]));\n }],\n ['modifyTime', 12, 136, function(file, field) {\n return formatTarDateTime(file[field[0]], field[1]);\n }, function(buffer, offset, field) {\n return parseTarDateTime(buffer.slice(offset, offset + field[1]));\n }],\n ['checksum', 8, 148, function(file, field) {\n return ' '; // placeholder\n }, function(buffer, offset, field) {\n return parseTarNumber(buffer.slice(offset, offset + field[1]));\n }],\n ['type', 1, 156, function(file, field) {\n // get last octal digit; 0 - regular file\n return '' + ((parseInt(file[field[0]], 10) || 0) % 8);\n }, function(buffer, offset, field) {\n return (parseInt(String.fromCharCode(buffer[offset]), 10) || 0) % 8;\n }],\n ['linkName', 100, 157, function(file, field) {\n return ''; // only regular files are supported\n }, function(buffer, offset, field) {\n return parseTarString(buffer.slice(offset, offset + field[1]));\n }],\n ['ustar', 8, 257, function(file, field) {\n return constants.TMAGIC; // magic + version\n }, function(buffer, offset, field) {\n return fixUstarMagic(\n parseTarString(buffer.slice(offset, offset + field[1]), true)\n );\n }, function(file, field) {\n return (file[field[0]] == constants.TMAGIC) ||\n (file[field[0]] == constants.OLDGNU_MAGIC);\n }],\n ['owner', 32, 265, function(file, field) {\n return formatTarString(file[field[0]], field[1]);\n }, function(buffer, offset, field) {\n return parseTarString(buffer.slice(offset, offset + field[1]));\n }],\n ['group', 32, 297, function(file, field) {\n return formatTarString(file[field[0]], field[1]);\n }, function(buffer, offset, field) {\n return parseTarString(buffer.slice(offset, offset + field[1]));\n }],\n ['majorNumber', 8, 329, function(file, field) {\n return ''; // only regular files are supported\n }, function(buffer, offset, field) {\n return parseTarNumber(buffer.slice(offset, offset + field[1]));\n }],\n ['minorNumber', 8, 337, function(file, field) {\n return ''; // only regular files are supported\n }, function(buffer, offset, field) {\n return parseTarNumber(buffer.slice(offset, offset + field[1]));\n }],\n ['prefix', 131, 345, function(file, field) {\n return formatTarString(file[field[0]], field[1]);\n }, function(buffer, offset, field) {\n return parseTarString(buffer.slice(offset, offset + field[1]));\n }],\n ['accessTime', 12, 476, function(file, field) {\n return formatTarDateTime(file[field[0]], field[1]);\n }, function(buffer, offset, field) {\n return parseTarDateTime(buffer.slice(offset, offset + field[1]));\n }],\n ['createTime', 12, 488, function(file, field) {\n return formatTarDateTime(file[field[0]], field[1]);\n }, function(buffer, offset, field) {\n return parseTarDateTime(buffer.slice(offset, offset + field[1]));\n }]\n];\n\nvar effectiveHeaderSize = (function(header) {\n var last = header[header.length - 1];\n return last[2] + last[1]; // offset + size\n})(posixHeader);\n\nfunction fixUstarMagic(value) {\n if (value.length == 8) {\n var chars = value.split('');\n\n if (chars[5] == constants.NULL_CHAR) {\n // TMAGIC ?\n if ((chars[6] == ' ') || (chars[6] == constants.NULL_CHAR)) {\n chars[6] = '0';\n }\n if ((chars[7] == ' ') || (chars[7] == constants.NULL_CHAR)) {\n chars[7] = '0';\n }\n chars = chars.join('');\n return chars == constants.TMAGIC ? chars : value;\n } else if (chars[7] == constants.NULL_CHAR) {\n // OLDGNU_MAGIC ?\n if (chars[5] == constants.NULL_CHAR) {\n chars[5] = ' ';\n }\n if (chars[6] == constants.NULL_CHAR) {\n chars[6] = ' ';\n }\n return chars == constants.OLDGNU_MAGIC ? chars : value;\n }\n }\n return value;\n}\n\nfunction formatTarString(value, length) {\n length -= 1; // preserve space for trailing null-char\n if (utils.isUndefined(value)) {\n value = '';\n }\n value = ('' + value).substr(0, length);\n return value + constants.NULL_CHAR;\n}\n\nfunction formatTarNumber(value, length, defaultValue) {\n defaultValue = parseInt(defaultValue) || 0;\n length -= 1; // preserve space for trailing null-char\n value = (parseInt(value) || defaultValue)\n .toString(8).substr(-length, length);\n while (value.length < length) {\n value = '0' + value;\n }\n return value + constants.NULL_CHAR;\n}\n\nfunction formatTarDateTime(value, length) {\n if (utils.isDateTime(value)) {\n value = Math.floor(1 * value / 1000);\n } else {\n value = parseInt(value, 10);\n if (isFinite(value)) {\n if (value <= 0) {\n return '';\n }\n } else {\n value = Math.floor(1 * new Date() / 1000);\n }\n }\n return formatTarNumber(value, length, 0);\n}\n\nfunction parseTarString(bytes, returnUnprocessed) {\n var result = String.fromCharCode.apply(null, bytes);\n if (returnUnprocessed) {\n return result;\n }\n var index = result.indexOf(constants.NULL_CHAR);\n return index >= 0 ? result.substr(0, index) : result;\n}\n\nfunction parseTarNumber(bytes) {\n var result = String.fromCharCode.apply(null, bytes);\n return parseInt(result.replace(/^0+$/g, ''), 8) || 0;\n}\n\nfunction parseTarDateTime(bytes) {\n if ((bytes.length == 0) || (bytes[0] == 0)) {\n return null;\n }\n return new Date(1000 * parseTarNumber(bytes));\n}\n\nfunction calculateChecksum(buffer, offset, skipChecksum) {\n var from = parseInt(offset, 10) || 0;\n var to = Math.min(from + effectiveHeaderSize, buffer.length);\n var result = 0;\n\n // When calculating checksum, `checksum` field should be\n // threat as filled with space char (byte 32)\n var skipFrom = 0;\n var skipTo = 0;\n if (skipChecksum) {\n posixHeader.every(function(field) {\n if (field[0] == 'checksum') {\n skipFrom = from + field[2];\n skipTo = skipFrom + field[1];\n return false;\n }\n return true;\n });\n }\n\n var whitespace = ' '.charCodeAt(0);\n for (var i = from; i < to; i++) {\n // 262144 = 8^6 - 6 octal digits - maximum possible value for checksum;\n // wrap to avoid numeric overflow\n var byte = (i >= skipFrom) && (i < skipTo) ? whitespace : buffer[i];\n result = (result + byte) % 262144;\n }\n return result;\n}\n\nmodule.exports.recordSize = recordSize;\nmodule.exports.defaultFileMode = defaultFileMode;\nmodule.exports.defaultUid = defaultUid;\nmodule.exports.defaultGid = defaultGid;\nmodule.exports.posixHeader = posixHeader;\nmodule.exports.effectiveHeaderSize = effectiveHeaderSize;\n\nmodule.exports.calculateChecksum = calculateChecksum;\nmodule.exports.formatTarString = formatTarString;\nmodule.exports.formatTarNumber = formatTarNumber;\nmodule.exports.formatTarDateTime = formatTarDateTime;\nmodule.exports.parseTarString = parseTarString;\nmodule.exports.parseTarNumber = parseTarNumber;\nmodule.exports.parseTarDateTime = parseTarDateTime;\n\n","'use strict';\n\nvar constants = require('./constants');\nvar utils = require('./utils');\nvar types = require('./types');\n\nfunction headerSize(file) {\n // header has fixed size\n return types.recordSize;\n}\n\nfunction dataSize(file) {\n // align to record boundary\n return Math.ceil(file.data.length / types.recordSize) * types.recordSize;\n}\n\nfunction allocateBuffer(files) {\n var totalSize = 0;\n\n // Calculate space that will be used by each file\n files.forEach(function(file) {\n totalSize += headerSize(file) + dataSize(file);\n });\n\n // TAR must end with two empty records\n totalSize += types.recordSize * 2;\n\n // Array SHOULD be initialized with zeros:\n // from TypedArray constructor docs:\n // > When creating a TypedArray instance (i.e. instance of Int8Array\n // > or similar), an array buffer is created internally\n // from ArrayBuffer constructor docs:\n // > A new ArrayBuffer object of the specified size.\n // > Its contents are initialized to 0.\n return new Uint8Array(totalSize);\n}\n\nfunction writeHeader(buffer, file, offset) {\n offset = parseInt(offset) || 0;\n\n var currentOffset = offset;\n types.posixHeader.forEach(function(field) {\n var value = field[3](file, field);\n var length = value.length;\n for (var i = 0; i < length; i += 1) {\n buffer[currentOffset + i] = value.charCodeAt(i) & 0xFF;\n }\n currentOffset += field[1]; // move to the next field\n });\n\n var field = utils.find(types.posixHeader, function(field) {\n return field[0] == 'checksum';\n });\n\n if (field) {\n // Patch checksum field\n var checksum = types.calculateChecksum(buffer, offset, true);\n var value = types.formatTarNumber(checksum, field[1] - 2) +\n constants.NULL_CHAR + ' ';\n currentOffset = offset + field[2];\n for (var i = 0; i < value.length; i += 1) {\n // put bytes\n buffer[currentOffset] = value.charCodeAt(i) & 0xFF;\n currentOffset++;\n }\n }\n\n return offset + headerSize(file);\n}\n\nfunction writeData(buffer, file, offset) {\n offset = parseInt(offset, 10) || 0;\n buffer.set(file.data, offset);\n return offset + dataSize(file);\n}\n\nfunction tar(files) {\n files = utils.map(files, function(file) {\n return utils.extend({}, file, {\n data: utils.toUint8Array(file.data)\n });\n });\n\n var buffer = allocateBuffer(files);\n\n var offset = 0;\n files.forEach(function(file) {\n offset = writeHeader(buffer, file, offset);\n offset = writeData(buffer, file, offset);\n });\n\n return buffer;\n}\n\nmodule.exports.tar = tar;\n","'use strict';\n\nvar constants = require('./constants');\nvar utils = require('./utils');\nvar types = require('./types');\n\nvar defaultOptions = {\n extractData: true,\n checkHeader: true,\n checkChecksum: true,\n checkFileSize: true\n};\n\nvar excludeFields = {\n size: true,\n checksum: true,\n ustar: true\n};\n\nvar messages = {\n unexpectedEndOfFile: 'Unexpected end of file.',\n fileCorrupted: 'File is corrupted.',\n checksumCheckFailed: 'Checksum check failed.'\n};\n\nfunction headerSize(header) {\n // header has fixed size\n return types.recordSize;\n}\n\nfunction dataSize(size) {\n // align to record boundary\n return Math.ceil(size / types.recordSize) * types.recordSize;\n}\n\nfunction isEndOfFile(buffer, offset) {\n var from = offset;\n var to = Math.min(buffer.length, offset + types.recordSize * 2);\n for (var i = from; i < to; i++) {\n if (buffer[i] != 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction readHeader(buffer, offset, options) {\n if (buffer.length - offset < types.recordSize) {\n if (options.checkFileSize) {\n throw new Error(messages.unexpectedEndOfFile);\n }\n return null;\n }\n\n offset = parseInt(offset) || 0;\n\n var result = {};\n var currentOffset = offset;\n types.posixHeader.forEach(function(field) {\n result[field[0]] = field[4](buffer, currentOffset, field);\n currentOffset += field[1];\n });\n\n if (result.type != 0) { // only regular files can have data\n result.size = 0;\n }\n\n if (options.checkHeader) {\n types.posixHeader.forEach(function(field) {\n if (utils.isFunction(field[5]) && !field[5](result, field)) {\n var error = new Error(messages.fileCorrupted);\n error.data = {\n offset: offset + field[2],\n field: field[0]\n };\n throw error;\n }\n });\n }\n\n if (options.checkChecksum) {\n var checksum = types.calculateChecksum(buffer, offset, true);\n if (checksum != result.checksum) {\n var error = new Error(messages.checksumCheckFailed);\n error.data = {\n offset: offset,\n header: result,\n checksum: checksum\n };\n throw error;\n }\n }\n\n return result;\n}\n\nfunction readData(buffer, offset, header, options) {\n if (!options.extractData) {\n return null;\n }\n\n if (header.size <= 0) {\n return new Uint8Array();\n }\n return buffer.slice(offset, offset + header.size);\n}\n\nfunction createFile(header, data) {\n var result = {};\n types.posixHeader.forEach(function(field) {\n var name = field[0];\n if (!excludeFields[name]) {\n result[name] = header[name];\n }\n });\n\n result.isOldGNUFormat = header.ustar == constants.OLDGNU_MAGIC;\n\n if (data) {\n result.data = data;\n }\n\n return result;\n}\n\nfunction untar(buffer, options) {\n options = utils.extend({}, defaultOptions, options);\n\n var result = [];\n var offset = 0;\n var size = buffer.length;\n\n while (size - offset >= types.recordSize) {\n buffer = utils.toUint8Array(buffer);\n var header = readHeader(buffer, offset, options);\n if (!header) {\n break;\n }\n offset += headerSize(header);\n\n var data = readData(buffer, offset, header, options);\n result.push(createFile(header, data));\n offset += dataSize(header.size);\n\n if (isEndOfFile(buffer, offset)) {\n break;\n }\n }\n\n return result;\n}\n\nmodule.exports.untar = untar;\n","'use strict';\n\n// http://www.gnu.org/software/tar/manual/html_node/Standard.html\n\nvar utils = require('./lib/utils');\nvar constants = require('./lib/constants');\nvar tar = require('./lib/tar');\nvar untar = require('./lib/untar');\n\nutils.extend(module.exports, tar, untar, constants);\n","import type { PostgresMod, FS } from '../postgresMod.js'\nimport type { DumpTarCompressionOptions } from './tarUtils.js'\n\nexport type FsType =\n | 'nodefs'\n | 'idbfs'\n | 'memoryfs'\n | 'opfs-worker'\n | 'opfs-ahp'\n\nexport interface FilesystemFactory {\n new (dataDir: string): Filesystem\n}\n\nexport interface Filesystem {\n /**\n * Returns the options to pass to the emscripten module.\n */\n emscriptenOpts(opts: Partial): Promise>\n\n /**\n * Sync the filesystem to the emscripten filesystem.\n */\n syncToFs(mod: FS, relaxedDurability?: boolean): Promise\n\n /**\n * Sync the emscripten filesystem to the filesystem.\n */\n initialSyncFs(FS: FS): Promise\n\n /**\n * Dump the PGDATA dir from the filesystem to a gziped tarball.\n */\n dumpTar(\n FS: FS,\n dbname: string,\n compression?: DumpTarCompressionOptions,\n ): Promise\n\n /**\n * Close the filesystem.\n */\n close(FS: FS): Promise\n}\n\nexport abstract class FilesystemBase implements Filesystem {\n protected dataDir?: string\n constructor(dataDir?: string) {\n this.dataDir = dataDir\n }\n abstract emscriptenOpts(\n opts: Partial,\n ): Promise>\n async syncToFs(_mod: FS, _relaxedDurability?: boolean) {}\n async initialSyncFs(_mod: FS) {}\n abstract dumpTar(mod: FS, dbname: string): Promise\n async close(_FS: FS) {}\n}\n","import { tar, untar, type TarFile, REGTYPE, DIRTYPE } from 'tinytar'\nimport { FS } from '../postgresMod.js'\nimport { PGDATA } from './index.js'\n\nexport type DumpTarCompressionOptions = 'none' | 'gzip' | 'auto'\n\nexport async function dumpTar(\n FS: FS,\n dbname?: string,\n compression: DumpTarCompressionOptions = 'auto',\n): Promise {\n const tarball = createTarball(FS, PGDATA)\n const [compressed, zipped] = await maybeZip(tarball, compression)\n const filename = (dbname || 'pgdata') + (zipped ? '.tar.gz' : '.tar')\n const type = zipped ? 'application/x-gzip' : 'application/x-tar'\n if (typeof File !== 'undefined') {\n return new File([compressed], filename, {\n type,\n })\n } else {\n return new Blob([compressed], {\n type,\n })\n }\n}\n\nconst compressedMimeTypes = [\n 'application/x-gtar',\n 'application/x-tar+gzip',\n 'application/x-gzip',\n 'application/gzip',\n]\n\nexport async function loadTar(FS: FS, file: File | Blob): Promise {\n let tarball = new Uint8Array(await file.arrayBuffer())\n const filename =\n typeof File !== 'undefined' && file instanceof File ? file.name : undefined\n const compressed =\n compressedMimeTypes.includes(file.type) ||\n filename?.endsWith('.tgz') ||\n filename?.endsWith('.tar.gz')\n if (compressed) {\n tarball = await unzip(tarball)\n }\n\n const files = untar(tarball)\n for (const file of files) {\n const filePath = PGDATA + file.name\n\n // Ensure the directory structure exists\n const dirPath = filePath.split('/').slice(0, -1)\n for (let i = 1; i <= dirPath.length; i++) {\n const dir = dirPath.slice(0, i).join('/')\n if (!FS.analyzePath(dir).exists) {\n FS.mkdir(dir)\n }\n }\n\n // Write the file or directory\n if (file.type === REGTYPE) {\n FS.writeFile(filePath, file.data)\n FS.utime(\n filePath,\n dateToUnixTimestamp(file.modifyTime),\n dateToUnixTimestamp(file.modifyTime),\n )\n } else if (file.type === DIRTYPE) {\n FS.mkdir(filePath)\n }\n }\n}\n\nfunction readDirectory(FS: FS, path: string) {\n const files: TarFile[] = []\n\n const traverseDirectory = (currentPath: string) => {\n const entries = FS.readdir(currentPath)\n entries.forEach((entry) => {\n if (entry === '.' || entry === '..') {\n return\n }\n const fullPath = currentPath + '/' + entry\n const stats = FS.stat(fullPath)\n const data = FS.isFile(stats.mode)\n ? FS.readFile(fullPath, { encoding: 'binary' })\n : new Uint8Array(0)\n files.push({\n name: fullPath.substring(path.length), // remove the root path\n mode: stats.mode,\n size: stats.size,\n type: FS.isFile(stats.mode) ? REGTYPE : DIRTYPE,\n modifyTime: stats.mtime,\n data,\n })\n if (FS.isDir(stats.mode)) {\n traverseDirectory(fullPath)\n }\n })\n }\n\n traverseDirectory(path)\n return files\n}\n\nexport function createTarball(FS: FS, directoryPath: string) {\n const files = readDirectory(FS, directoryPath)\n const tarball = tar(files)\n return tarball\n}\n\nexport async function maybeZip(\n file: Uint8Array,\n compression: DumpTarCompressionOptions = 'auto',\n): Promise<[Uint8Array, boolean]> {\n if (compression === 'none') {\n return [file, false]\n } else if (typeof CompressionStream !== 'undefined') {\n return [await zipBrowser(file), true]\n } else if (\n typeof process !== 'undefined' &&\n process.versions &&\n process.versions.node\n ) {\n return [await zipNode(file), true]\n } else if (compression === 'auto') {\n return [file, false]\n } else {\n throw new Error('Compression not supported in this environment')\n }\n}\n\nexport async function zipBrowser(file: Uint8Array): Promise {\n const cs = new CompressionStream('gzip')\n const writer = cs.writable.getWriter()\n const reader = cs.readable.getReader()\n\n writer.write(file)\n writer.close()\n\n const chunks: Uint8Array[] = []\n\n while (true) {\n const { value, done } = await reader.read()\n if (done) break\n if (value) chunks.push(value)\n }\n\n const compressed = new Uint8Array(\n chunks.reduce((acc, chunk) => acc + chunk.length, 0),\n )\n let offset = 0\n chunks.forEach((chunk) => {\n compressed.set(chunk, offset)\n offset += chunk.length\n })\n\n return compressed\n}\n\nexport async function zipNode(file: Uint8Array): Promise {\n const { promisify } = await import('util')\n const { gzip } = await import('zlib')\n const gzipPromise = promisify(gzip)\n return await gzipPromise(file)\n}\n\nexport async function unzip(file: Uint8Array): Promise {\n if (typeof CompressionStream !== 'undefined') {\n return await unzipBrowser(file)\n } else if (\n typeof process !== 'undefined' &&\n process.versions &&\n process.versions.node\n ) {\n return await unzipNode(file)\n } else {\n throw new Error('Unsupported environment for decompression')\n }\n}\n\nexport async function unzipBrowser(file: Uint8Array): Promise {\n const ds = new DecompressionStream('gzip')\n const writer = ds.writable.getWriter()\n const reader = ds.readable.getReader()\n\n writer.write(file)\n writer.close()\n\n const chunks: Uint8Array[] = []\n\n while (true) {\n const { value, done } = await reader.read()\n if (done) break\n if (value) chunks.push(value)\n }\n\n const decompressed = new Uint8Array(\n chunks.reduce((acc, chunk) => acc + chunk.length, 0),\n )\n let offset = 0\n chunks.forEach((chunk) => {\n decompressed.set(chunk, offset)\n offset += chunk.length\n })\n\n return decompressed\n}\n\nexport async function unzipNode(file: Uint8Array): Promise {\n const { promisify } = await import('util')\n const { gunzip } = await import('zlib')\n const gunzipPromise = promisify(gunzip)\n return await gunzipPromise(file)\n}\n\nfunction dateToUnixTimestamp(date: Date | number | undefined): number {\n if (!date) {\n return Math.floor(Date.now() / 1000)\n } else {\n return typeof date === 'number' ? date : Math.floor(date.getTime() / 1000)\n }\n}\n","import type { FsType, Filesystem } from './types.js'\nimport { IdbFs } from './idbfs.js'\nimport { MemoryFS } from './memoryfs.js'\n\nexport type * from './types.js'\n\nexport const WASM_PREFIX = '/tmp/pglite'\nexport const PGDATA = WASM_PREFIX + '/' + 'base'\n\nexport function parseDataDir(dataDir?: string) {\n let fsType: FsType\n if (dataDir?.startsWith('file://')) {\n // Remove the file:// prefix, and use node filesystem\n dataDir = dataDir.slice(7)\n if (!dataDir) {\n throw new Error('Invalid dataDir, must be a valid path')\n }\n fsType = 'nodefs'\n } else if (dataDir?.startsWith('idb://')) {\n // Remove the idb:// prefix, and use indexeddb filesystem\n dataDir = dataDir.slice(6)\n fsType = 'idbfs'\n } else if (dataDir?.startsWith('opfs-ahp://')) {\n // Remove the opfsahp:// prefix, and use opfs access handle pool filesystem\n dataDir = dataDir.slice(11)\n fsType = 'opfs-ahp'\n } else if (!dataDir || dataDir?.startsWith('memory://')) {\n // Use in-memory filesystem\n fsType = 'memoryfs'\n } else {\n // No prefix, use node filesystem\n fsType = 'nodefs'\n }\n return { dataDir, fsType }\n}\n\nexport async function loadFs(dataDir?: string, fsType?: FsType) {\n let fs: Filesystem\n if (dataDir && fsType === 'nodefs') {\n // Lazy load the nodefs to avoid bundling it in the browser\n const { NodeFS } = await import('./nodefs.js')\n fs = new NodeFS(dataDir)\n } else if (dataDir && fsType === 'idbfs') {\n fs = new IdbFs(dataDir)\n } else if (dataDir && fsType === 'opfs-ahp') {\n // Lazy load the opfs-ahp to so that it's optional in the bundle\n const { OpfsAhpFS } = await import('./opfs-ahp/index.js')\n fs = new OpfsAhpFS(dataDir)\n } else {\n fs = new MemoryFS()\n }\n return fs\n}\n","import { FilesystemBase } from './types.js'\nimport type { FS, PostgresMod } from '../postgresMod.js'\nimport { PGDATA } from './index.js'\nimport { dumpTar, type DumpTarCompressionOptions } from './tarUtils.js'\n\nexport class IdbFs extends FilesystemBase {\n async emscriptenOpts(opts: Partial) {\n const options: Partial = {\n ...opts,\n preRun: [\n ...(opts.preRun || []),\n (mod: any) => {\n const idbfs = mod.FS.filesystems.IDBFS\n // Mount the idbfs to the users dataDir then symlink the PGDATA to the\n // idbfs mount point.\n // We specifically use /pglite as the root directory for the idbfs\n // as the fs will ber persisted in the indexeddb as a database with\n // the path as the name.\n mod.FS.mkdir(`/pglite`)\n mod.FS.mkdir(`/pglite/${this.dataDir}`)\n mod.FS.mount(idbfs, {}, `/pglite/${this.dataDir}`)\n mod.FS.symlink(`/pglite/${this.dataDir}`, PGDATA)\n },\n ],\n }\n return options\n }\n\n initialSyncFs(fs: FS) {\n return new Promise((resolve, reject) => {\n fs.syncfs(true, (err: any) => {\n if (err) {\n reject(err)\n } else {\n resolve()\n }\n })\n })\n }\n\n syncToFs(fs: FS, _relaxedDurability?: boolean) {\n return new Promise((resolve, reject) => {\n fs.syncfs(false, (err: any) => {\n if (err) {\n reject(err)\n } else {\n resolve()\n }\n })\n })\n }\n\n async dumpTar(\n mod: FS,\n dbname: string,\n compression?: DumpTarCompressionOptions,\n ) {\n return dumpTar(mod, dbname, compression)\n }\n\n async close(FS: FS): Promise {\n // IDBDatabase.close() method is essentially async, but returns immediately,\n // the database will be closed when all transactions are complete.\n // This needs to be handled in application code if you want to delete the\n // database after it has been closed. If you try to delete the database\n // before it has fully closed it will throw a blocking error.\n const indexedDb = FS.filesystems.IDBFS.dbs[this.dataDir!]\n if (indexedDb) {\n indexedDb.close()\n }\n FS.quit()\n }\n}\n","import { FilesystemBase } from './types.js'\nimport type { PostgresMod, FS } from '../postgresMod.js'\nimport { dumpTar, type DumpTarCompressionOptions } from './tarUtils.js'\n\nexport class MemoryFS extends FilesystemBase {\n async emscriptenOpts(opts: Partial) {\n // Nothing to do for memoryfs\n return opts\n }\n\n async dumpTar(\n mod: FS,\n dbname: string,\n compression?: DumpTarCompressionOptions,\n ) {\n return dumpTar(mod, dbname, compression)\n }\n\n async close(FS: FS): Promise {\n FS.quit()\n }\n}\n","// Shim globals in esm bundle\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","\nvar Module = (() => {\n var _scriptName = import.meta.url;\n \n return (\nasync function(moduleArg = {}) {\n var moduleRtn;\n\n// include: shell.js\n// The Module object: Our interface to the outside world. We import\n// and export values on it. There are various ways Module can be used:\n// 1. Not defined. We create it here\n// 2. A function parameter, function(moduleArg) => Promise\n// 3. pre-run appended it, var Module = {}; ..generated code..\n// 4. External script tag defines var Module.\n// We need to check if Module already exists (e.g. case 3 above).\n// Substitution will be replaced with actual code on later stage of the build,\n// this way Closure Compiler will not mangle it (e.g. case 4. above).\n// Note that if you want to run closure, and also to use Module\n// after the generated code, you will need to define var Module = {};\n// before the code. Then that object will be used in the code, and you\n// can continue to use Module afterwards as well.\nvar Module = moduleArg;\n\n// Set up the promise that indicates the Module is initialized\nvar readyPromiseResolve, readyPromiseReject;\nvar readyPromise = new Promise((resolve, reject) => {\n readyPromiseResolve = resolve;\n readyPromiseReject = reject;\n});\n\n// Determine the runtime environment we are in. You can customize this by\n// setting the ENVIRONMENT setting at compile time (see settings.js).\n\n// Attempt to auto-detect the environment\nvar ENVIRONMENT_IS_WEB = typeof window == 'object';\nvar ENVIRONMENT_IS_WORKER = typeof importScripts == 'function';\n// N.b. Electron.js environment is simultaneously a NODE-environment, but\n// also a web environment.\nvar ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer';\nvar ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;\n\nif (ENVIRONMENT_IS_NODE) {\n // `require()` is no-op in an ESM module, use `createRequire()` to construct\n // the require()` function. This is only necessary for multi-environment\n // builds, `-sENVIRONMENT=node` emits a static import declaration instead.\n // TODO: Swap all `require()`'s with `import()`'s?\n const { createRequire } = await import('module');\n let dirname = import.meta.url;\n if (dirname.startsWith(\"data:\")) {\n dirname = '/';\n }\n /** @suppress{duplicate} */\n var require = createRequire(dirname);\n\n}\n\n// --pre-jses are emitted after the Module integration code, so that they can\n// refer to Module (if they choose; they can also define Module)\n// include: /tmp/tmp03stmbl_.js\n\n if (!Module['expectedDataFileDownloads']) {\n Module['expectedDataFileDownloads'] = 0;\n }\n\n Module['expectedDataFileDownloads']++;\n (() => {\n // Do not attempt to redownload the virtual filesystem data when in a pthread or a Wasm Worker context.\n var isPthread = typeof ENVIRONMENT_IS_PTHREAD != 'undefined' && ENVIRONMENT_IS_PTHREAD;\n var isWasmWorker = typeof ENVIRONMENT_IS_WASM_WORKER != 'undefined' && ENVIRONMENT_IS_WASM_WORKER;\n if (isPthread || isWasmWorker) return;\n function loadPackage(metadata) {\n\n var PACKAGE_PATH = '';\n if (typeof window === 'object') {\n PACKAGE_PATH = window['encodeURIComponent'](window.location.pathname.toString().substring(0, window.location.pathname.toString().lastIndexOf('/')) + '/');\n } else if (typeof process === 'undefined' && typeof location !== 'undefined') {\n // web worker\n PACKAGE_PATH = encodeURIComponent(location.pathname.toString().substring(0, location.pathname.toString().lastIndexOf('/')) + '/');\n }\n var PACKAGE_NAME = 'postgres.data';\n var REMOTE_PACKAGE_BASE = 'postgres.data';\n if (typeof Module['locateFilePackage'] === 'function' && !Module['locateFile']) {\n Module['locateFile'] = Module['locateFilePackage'];\n err('warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)');\n }\n var REMOTE_PACKAGE_NAME = Module['locateFile'] ? Module['locateFile'](REMOTE_PACKAGE_BASE, '') : REMOTE_PACKAGE_BASE;\nvar REMOTE_PACKAGE_SIZE = metadata['remote_package_size'];\n\n function fetchRemotePackage(packageName, packageSize, callback, errback) {\n if (typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string') {\n require('fs').readFile(packageName, (err, contents) => {\n if (err) {\n errback(err);\n } else {\n callback(contents.buffer);\n }\n });\n return;\n }\n Module['dataFileDownloads'] ??= {};\n fetch(packageName)\n .catch((cause) => Promise.reject(new Error(`Network Error: ${packageName}`, {cause}))) // If fetch fails, rewrite the error to include the failing URL & the cause.\n .then((response) => {\n if (!response.ok) {\n return Promise.reject(new Error(`${response.status}: ${response.url}`));\n }\n\n if (!response.body && response.arrayBuffer) { // If we're using the polyfill, readers won't be available...\n return response.arrayBuffer().then(callback);\n }\n\n const reader = response.body.getReader();\n const iterate = () => reader.read().then(handleChunk).catch((cause) => {\n return Promise.reject(new Error(`Unexpected error while handling : ${response.url} ${cause}`, {cause}));\n });\n\n const chunks = [];\n const headers = response.headers;\n const total = Number(headers.get('Content-Length') ?? packageSize);\n let loaded = 0;\n\n const handleChunk = ({done, value}) => {\n if (!done) {\n chunks.push(value);\n loaded += value.length;\n Module['dataFileDownloads'][packageName] = {loaded, total};\n\n let totalLoaded = 0;\n let totalSize = 0;\n\n for (const download of Object.values(Module['dataFileDownloads'])) {\n totalLoaded += download.loaded;\n totalSize += download.total;\n }\n\n Module['setStatus']?.(`Downloading data... (${totalLoaded}/${totalSize})`);\n return iterate();\n } else {\n const packageData = new Uint8Array(chunks.map((c) => c.length).reduce((a, b) => a + b, 0));\n let offset = 0;\n for (const chunk of chunks) {\n packageData.set(chunk, offset);\n offset += chunk.length;\n }\n callback(packageData.buffer);\n }\n };\n\n Module['setStatus']?.('Downloading data...');\n return iterate();\n });\n };\n\n function handleError(error) {\n console.error('package error:', error);\n };\n\n var fetchedCallback = null;\n var fetched = Module['getPreloadedPackage'] ? Module['getPreloadedPackage'](REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE) : null;\n\n if (!fetched) fetchRemotePackage(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE, (data) => {\n if (fetchedCallback) {\n fetchedCallback(data);\n fetchedCallback = null;\n } else {\n fetched = data;\n }\n }, handleError);\n\n function runWithFS(Module) {\n\n function assert(check, msg) {\n if (!check) throw msg + new Error().stack;\n }\nModule['FS_createPath'](\"/\", \"home\", true, true);\nModule['FS_createPath'](\"/home\", \"web_user\", true, true);\nModule['FS_createPath'](\"/\", \"tmp\", true, true);\nModule['FS_createPath'](\"/tmp\", \"pglite\", true, true);\nModule['FS_createPath'](\"/tmp/pglite\", \"bin\", true, true);\nModule['FS_createPath'](\"/tmp/pglite\", \"lib\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/lib\", \"postgresql\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/lib/postgresql\", \"pgxs\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/lib/postgresql/pgxs\", \"config\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/lib/postgresql/pgxs\", \"src\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/lib/postgresql/pgxs/src\", \"makefiles\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/lib/postgresql/pgxs/src\", \"test\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/lib/postgresql/pgxs/src/test\", \"isolation\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/lib/postgresql/pgxs/src/test\", \"regress\", true, true);\nModule['FS_createPath'](\"/tmp/pglite\", \"share\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share\", \"postgresql\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql\", \"extension\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql\", \"timezone\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone\", \"Africa\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone\", \"America\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone/America\", \"Argentina\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone/America\", \"Indiana\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone/America\", \"Kentucky\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone/America\", \"North_Dakota\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone\", \"Antarctica\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone\", \"Arctic\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone\", \"Asia\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone\", \"Atlantic\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone\", \"Australia\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone\", \"Brazil\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone\", \"Canada\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone\", \"Chile\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone\", \"Etc\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone\", \"Europe\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone\", \"Indian\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone\", \"Mexico\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone\", \"Pacific\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql/timezone\", \"US\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql\", \"timezonesets\", true, true);\nModule['FS_createPath'](\"/tmp/pglite/share/postgresql\", \"tsearch_data\", true, true);\n\n /** @constructor */\n function DataRequest(start, end, audio) {\n this.start = start;\n this.end = end;\n this.audio = audio;\n }\n DataRequest.prototype = {\n requests: {},\n open: function(mode, name) {\n this.name = name;\n this.requests[name] = this;\n Module['addRunDependency'](`fp ${this.name}`);\n },\n send: function() {},\n onload: function() {\n var byteArray = this.byteArray.subarray(this.start, this.end);\n this.finish(byteArray);\n },\n finish: function(byteArray) {\n var that = this;\n // canOwn this data in the filesystem, it is a slide into the heap that will never change\n Module['FS_createDataFile'](this.name, null, byteArray, true, true, true);\n Module['removeRunDependency'](`fp ${that.name}`);\n this.requests[this.name] = null;\n }\n };\n\n var files = metadata['files'];\n for (var i = 0; i < files.length; ++i) {\n new DataRequest(files[i]['start'], files[i]['end'], files[i]['audio'] || 0).open('GET', files[i]['filename']);\n }\n\n function processPackageData(arrayBuffer) {\n assert(arrayBuffer, 'Loading data file failed.');\n assert(arrayBuffer.constructor.name === ArrayBuffer.name, 'bad input to processPackageData');\n var byteArray = new Uint8Array(arrayBuffer);\n var curr;\n // Reuse the bytearray from the XHR as the source for file reads.\n DataRequest.prototype.byteArray = byteArray;\n var files = metadata['files'];\n for (var i = 0; i < files.length; ++i) {\n DataRequest.prototype.requests[files[i].filename].onload();\n } Module['removeRunDependency']('datafile_postgres.data');\n\n };\n Module['addRunDependency']('datafile_postgres.data');\n\n if (!Module['preloadResults']) Module['preloadResults'] = {};\n\n Module['preloadResults'][PACKAGE_NAME] = {fromCache: false};\n if (fetched) {\n processPackageData(fetched);\n fetched = null;\n } else {\n fetchedCallback = processPackageData;\n }\n\n }\n if (Module['calledRun']) {\n runWithFS(Module);\n } else {\n if (!Module['preRun']) Module['preRun'] = [];\n Module[\"preRun\"].push(runWithFS); // FS is not initialized yet, wait for it\n }\n\n }\n loadPackage({\"files\": [{\"filename\": \"/home/web_user/.pgpass\", \"start\": 0, \"end\": 135}, {\"filename\": \"/tmp/pglite/bin/initdb\", \"start\": 135, \"end\": 147}, {\"filename\": \"/tmp/pglite/bin/postgres\", \"start\": 147, \"end\": 159}, {\"filename\": \"/tmp/pglite/lib/postgresql/cyrillic_and_mic.so\", \"start\": 159, \"end\": 5738}, {\"filename\": \"/tmp/pglite/lib/postgresql/dict_snowball.so\", \"start\": 5738, \"end\": 580838}, {\"filename\": \"/tmp/pglite/lib/postgresql/euc2004_sjis2004.so\", \"start\": 580838, \"end\": 583216}, {\"filename\": \"/tmp/pglite/lib/postgresql/euc_cn_and_mic.so\", \"start\": 583216, \"end\": 584483}, {\"filename\": \"/tmp/pglite/lib/postgresql/euc_jp_and_sjis.so\", \"start\": 584483, \"end\": 592223}, {\"filename\": \"/tmp/pglite/lib/postgresql/euc_kr_and_mic.so\", \"start\": 592223, \"end\": 593530}, {\"filename\": \"/tmp/pglite/lib/postgresql/euc_tw_and_big5.so\", \"start\": 593530, \"end\": 598650}, {\"filename\": \"/tmp/pglite/lib/postgresql/latin2_and_win1250.so\", \"start\": 598650, \"end\": 600595}, {\"filename\": \"/tmp/pglite/lib/postgresql/latin_and_mic.so\", \"start\": 600595, \"end\": 602068}, {\"filename\": \"/tmp/pglite/lib/postgresql/libpqwalreceiver.so\", \"start\": 602068, \"end\": 725255}, {\"filename\": \"/tmp/pglite/lib/postgresql/pgoutput.so\", \"start\": 725255, \"end\": 741345}, {\"filename\": \"/tmp/pglite/lib/postgresql/pgxs/config/install-sh\", \"start\": 741345, \"end\": 755342}, {\"filename\": \"/tmp/pglite/lib/postgresql/pgxs/config/missing\", \"start\": 755342, \"end\": 756690}, {\"filename\": \"/tmp/pglite/lib/postgresql/pgxs/src/Makefile.global\", \"start\": 756690, \"end\": 792812}, {\"filename\": \"/tmp/pglite/lib/postgresql/pgxs/src/Makefile.port\", \"start\": 792812, \"end\": 793088}, {\"filename\": \"/tmp/pglite/lib/postgresql/pgxs/src/Makefile.shlib\", \"start\": 793088, \"end\": 809126}, {\"filename\": \"/tmp/pglite/lib/postgresql/pgxs/src/makefiles/pgxs.mk\", \"start\": 809126, \"end\": 824054}, {\"filename\": \"/tmp/pglite/lib/postgresql/pgxs/src/nls-global.mk\", \"start\": 824054, \"end\": 830939}, {\"filename\": \"/tmp/pglite/lib/postgresql/pgxs/src/test/isolation/isolationtester.cjs\", \"start\": 830939, \"end\": 927086}, {\"filename\": \"/tmp/pglite/lib/postgresql/pgxs/src/test/isolation/pg_isolation_regress.cjs\", \"start\": 927086, \"end\": 1003500}, {\"filename\": \"/tmp/pglite/lib/postgresql/pgxs/src/test/regress/pg_regress.cjs\", \"start\": 1003500, \"end\": 1079904}, {\"filename\": \"/tmp/pglite/lib/postgresql/plpgsql.so\", \"start\": 1079904, \"end\": 1239297}, {\"filename\": \"/tmp/pglite/password\", \"start\": 1239297, \"end\": 1239306}, {\"filename\": \"/tmp/pglite/share/postgresql/errcodes.txt\", \"start\": 1239306, \"end\": 1272764}, {\"filename\": \"/tmp/pglite/share/postgresql/extension/plpgsql--1.0.sql\", \"start\": 1272764, \"end\": 1273422}, {\"filename\": \"/tmp/pglite/share/postgresql/extension/plpgsql.control\", \"start\": 1273422, \"end\": 1273615}, {\"filename\": \"/tmp/pglite/share/postgresql/fix-CVE-2024-4317.sql\", \"start\": 1273615, \"end\": 1279380}, {\"filename\": \"/tmp/pglite/share/postgresql/information_schema.sql\", \"start\": 1279380, \"end\": 1394355}, {\"filename\": \"/tmp/pglite/share/postgresql/pg_hba.conf.sample\", \"start\": 1394355, \"end\": 1399980}, {\"filename\": \"/tmp/pglite/share/postgresql/pg_ident.conf.sample\", \"start\": 1399980, \"end\": 1402620}, {\"filename\": \"/tmp/pglite/share/postgresql/pg_service.conf.sample\", \"start\": 1402620, \"end\": 1403224}, {\"filename\": \"/tmp/pglite/share/postgresql/postgres.bki\", \"start\": 1403224, \"end\": 2347328}, {\"filename\": \"/tmp/pglite/share/postgresql/postgresql.conf.sample\", \"start\": 2347328, \"end\": 2376975}, {\"filename\": \"/tmp/pglite/share/postgresql/psqlrc.sample\", \"start\": 2376975, \"end\": 2377253}, {\"filename\": \"/tmp/pglite/share/postgresql/snowball_create.sql\", \"start\": 2377253, \"end\": 2421429}, {\"filename\": \"/tmp/pglite/share/postgresql/sql_features.txt\", \"start\": 2421429, \"end\": 2457110}, {\"filename\": \"/tmp/pglite/share/postgresql/system_constraints.sql\", \"start\": 2457110, \"end\": 2466005}, {\"filename\": \"/tmp/pglite/share/postgresql/system_functions.sql\", \"start\": 2466005, \"end\": 2489320}, {\"filename\": \"/tmp/pglite/share/postgresql/system_views.sql\", \"start\": 2489320, \"end\": 2539593}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Abidjan\", \"start\": 2539593, \"end\": 2539723}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Accra\", \"start\": 2539723, \"end\": 2539853}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Addis_Ababa\", \"start\": 2539853, \"end\": 2540044}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Algiers\", \"start\": 2540044, \"end\": 2540514}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Asmara\", \"start\": 2540514, \"end\": 2540705}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Asmera\", \"start\": 2540705, \"end\": 2540896}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Bamako\", \"start\": 2540896, \"end\": 2541026}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Bangui\", \"start\": 2541026, \"end\": 2541206}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Banjul\", \"start\": 2541206, \"end\": 2541336}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Bissau\", \"start\": 2541336, \"end\": 2541485}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Blantyre\", \"start\": 2541485, \"end\": 2541616}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Brazzaville\", \"start\": 2541616, \"end\": 2541796}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Bujumbura\", \"start\": 2541796, \"end\": 2541927}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Cairo\", \"start\": 2541927, \"end\": 2543236}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Casablanca\", \"start\": 2543236, \"end\": 2545155}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Ceuta\", \"start\": 2545155, \"end\": 2545717}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Conakry\", \"start\": 2545717, \"end\": 2545847}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Dakar\", \"start\": 2545847, \"end\": 2545977}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Dar_es_Salaam\", \"start\": 2545977, \"end\": 2546168}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Djibouti\", \"start\": 2546168, \"end\": 2546359}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Douala\", \"start\": 2546359, \"end\": 2546539}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/El_Aaiun\", \"start\": 2546539, \"end\": 2548369}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Freetown\", \"start\": 2548369, \"end\": 2548499}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Gaborone\", \"start\": 2548499, \"end\": 2548630}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Harare\", \"start\": 2548630, \"end\": 2548761}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Johannesburg\", \"start\": 2548761, \"end\": 2548951}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Juba\", \"start\": 2548951, \"end\": 2549409}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Kampala\", \"start\": 2549409, \"end\": 2549600}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Khartoum\", \"start\": 2549600, \"end\": 2550058}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Kigali\", \"start\": 2550058, \"end\": 2550189}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Kinshasa\", \"start\": 2550189, \"end\": 2550369}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Lagos\", \"start\": 2550369, \"end\": 2550549}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Libreville\", \"start\": 2550549, \"end\": 2550729}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Lome\", \"start\": 2550729, \"end\": 2550859}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Luanda\", \"start\": 2550859, \"end\": 2551039}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Lubumbashi\", \"start\": 2551039, \"end\": 2551170}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Lusaka\", \"start\": 2551170, \"end\": 2551301}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Malabo\", \"start\": 2551301, \"end\": 2551481}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Maputo\", \"start\": 2551481, \"end\": 2551612}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Maseru\", \"start\": 2551612, \"end\": 2551802}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Mbabane\", \"start\": 2551802, \"end\": 2551992}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Mogadishu\", \"start\": 2551992, \"end\": 2552183}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Monrovia\", \"start\": 2552183, \"end\": 2552347}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Nairobi\", \"start\": 2552347, \"end\": 2552538}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Ndjamena\", \"start\": 2552538, \"end\": 2552698}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Niamey\", \"start\": 2552698, \"end\": 2552878}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Nouakchott\", \"start\": 2552878, \"end\": 2553008}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Ouagadougou\", \"start\": 2553008, \"end\": 2553138}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Porto-Novo\", \"start\": 2553138, \"end\": 2553318}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Sao_Tome\", \"start\": 2553318, \"end\": 2553491}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Timbuktu\", \"start\": 2553491, \"end\": 2553621}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Tripoli\", \"start\": 2553621, \"end\": 2554052}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Tunis\", \"start\": 2554052, \"end\": 2554501}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Africa/Windhoek\", \"start\": 2554501, \"end\": 2555139}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Adak\", \"start\": 2555139, \"end\": 2556108}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Anchorage\", \"start\": 2556108, \"end\": 2557085}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Anguilla\", \"start\": 2557085, \"end\": 2557262}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Antigua\", \"start\": 2557262, \"end\": 2557439}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Araguaina\", \"start\": 2557439, \"end\": 2558031}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Argentina/Buenos_Aires\", \"start\": 2558031, \"end\": 2558739}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Argentina/Catamarca\", \"start\": 2558739, \"end\": 2559447}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Argentina/ComodRivadavia\", \"start\": 2559447, \"end\": 2560155}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Argentina/Cordoba\", \"start\": 2560155, \"end\": 2560863}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Argentina/Jujuy\", \"start\": 2560863, \"end\": 2561553}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Argentina/La_Rioja\", \"start\": 2561553, \"end\": 2562270}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Argentina/Mendoza\", \"start\": 2562270, \"end\": 2562978}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Argentina/Rio_Gallegos\", \"start\": 2562978, \"end\": 2563686}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Argentina/Salta\", \"start\": 2563686, \"end\": 2564376}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Argentina/San_Juan\", \"start\": 2564376, \"end\": 2565093}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Argentina/San_Luis\", \"start\": 2565093, \"end\": 2565810}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Argentina/Tucuman\", \"start\": 2565810, \"end\": 2566536}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Argentina/Ushuaia\", \"start\": 2566536, \"end\": 2567244}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Aruba\", \"start\": 2567244, \"end\": 2567421}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Asuncion\", \"start\": 2567421, \"end\": 2568305}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Atikokan\", \"start\": 2568305, \"end\": 2568454}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Atka\", \"start\": 2568454, \"end\": 2569423}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Bahia\", \"start\": 2569423, \"end\": 2570105}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Bahia_Banderas\", \"start\": 2570105, \"end\": 2570833}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Barbados\", \"start\": 2570833, \"end\": 2571111}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Belem\", \"start\": 2571111, \"end\": 2571505}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Belize\", \"start\": 2571505, \"end\": 2572550}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Blanc-Sablon\", \"start\": 2572550, \"end\": 2572727}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Boa_Vista\", \"start\": 2572727, \"end\": 2573157}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Bogota\", \"start\": 2573157, \"end\": 2573336}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Boise\", \"start\": 2573336, \"end\": 2574335}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Buenos_Aires\", \"start\": 2574335, \"end\": 2575043}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Cambridge_Bay\", \"start\": 2575043, \"end\": 2575926}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Campo_Grande\", \"start\": 2575926, \"end\": 2576878}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Cancun\", \"start\": 2576878, \"end\": 2577407}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Caracas\", \"start\": 2577407, \"end\": 2577597}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Catamarca\", \"start\": 2577597, \"end\": 2578305}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Cayenne\", \"start\": 2578305, \"end\": 2578456}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Cayman\", \"start\": 2578456, \"end\": 2578605}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Chicago\", \"start\": 2578605, \"end\": 2580359}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Chihuahua\", \"start\": 2580359, \"end\": 2581050}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Ciudad_Juarez\", \"start\": 2581050, \"end\": 2581768}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Coral_Harbour\", \"start\": 2581768, \"end\": 2581917}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Cordoba\", \"start\": 2581917, \"end\": 2582625}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Costa_Rica\", \"start\": 2582625, \"end\": 2582857}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Creston\", \"start\": 2582857, \"end\": 2583097}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Cuiaba\", \"start\": 2583097, \"end\": 2584031}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Curacao\", \"start\": 2584031, \"end\": 2584208}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Danmarkshavn\", \"start\": 2584208, \"end\": 2584655}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Dawson\", \"start\": 2584655, \"end\": 2585684}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Dawson_Creek\", \"start\": 2585684, \"end\": 2586367}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Denver\", \"start\": 2586367, \"end\": 2587409}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Detroit\", \"start\": 2587409, \"end\": 2588308}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Dominica\", \"start\": 2588308, \"end\": 2588485}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Edmonton\", \"start\": 2588485, \"end\": 2589455}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Eirunepe\", \"start\": 2589455, \"end\": 2589891}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/El_Salvador\", \"start\": 2589891, \"end\": 2590067}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Ensenada\", \"start\": 2590067, \"end\": 2591092}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Fort_Nelson\", \"start\": 2591092, \"end\": 2592540}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Fort_Wayne\", \"start\": 2592540, \"end\": 2593071}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Fortaleza\", \"start\": 2593071, \"end\": 2593555}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Glace_Bay\", \"start\": 2593555, \"end\": 2594435}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Godthab\", \"start\": 2594435, \"end\": 2595400}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Goose_Bay\", \"start\": 2595400, \"end\": 2596980}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Grand_Turk\", \"start\": 2596980, \"end\": 2597833}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Grenada\", \"start\": 2597833, \"end\": 2598010}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Guadeloupe\", \"start\": 2598010, \"end\": 2598187}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Guatemala\", \"start\": 2598187, \"end\": 2598399}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Guayaquil\", \"start\": 2598399, \"end\": 2598578}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Guyana\", \"start\": 2598578, \"end\": 2598759}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Halifax\", \"start\": 2598759, \"end\": 2600431}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Havana\", \"start\": 2600431, \"end\": 2601548}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Hermosillo\", \"start\": 2601548, \"end\": 2601834}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Indiana/Indianapolis\", \"start\": 2601834, \"end\": 2602365}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Indiana/Knox\", \"start\": 2602365, \"end\": 2603381}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Indiana/Marengo\", \"start\": 2603381, \"end\": 2603948}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Indiana/Petersburg\", \"start\": 2603948, \"end\": 2604631}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Indiana/Tell_City\", \"start\": 2604631, \"end\": 2605153}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Indiana/Vevay\", \"start\": 2605153, \"end\": 2605522}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Indiana/Vincennes\", \"start\": 2605522, \"end\": 2606080}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Indiana/Winamac\", \"start\": 2606080, \"end\": 2606692}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Indianapolis\", \"start\": 2606692, \"end\": 2607223}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Inuvik\", \"start\": 2607223, \"end\": 2608040}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Iqaluit\", \"start\": 2608040, \"end\": 2608895}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Jamaica\", \"start\": 2608895, \"end\": 2609234}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Jujuy\", \"start\": 2609234, \"end\": 2609924}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Juneau\", \"start\": 2609924, \"end\": 2610890}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Kentucky/Louisville\", \"start\": 2610890, \"end\": 2612132}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Kentucky/Monticello\", \"start\": 2612132, \"end\": 2613104}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Knox_IN\", \"start\": 2613104, \"end\": 2614120}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Kralendijk\", \"start\": 2614120, \"end\": 2614297}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/La_Paz\", \"start\": 2614297, \"end\": 2614467}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Lima\", \"start\": 2614467, \"end\": 2614750}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Los_Angeles\", \"start\": 2614750, \"end\": 2616044}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Louisville\", \"start\": 2616044, \"end\": 2617286}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Lower_Princes\", \"start\": 2617286, \"end\": 2617463}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Maceio\", \"start\": 2617463, \"end\": 2617965}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Managua\", \"start\": 2617965, \"end\": 2618260}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Manaus\", \"start\": 2618260, \"end\": 2618672}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Marigot\", \"start\": 2618672, \"end\": 2618849}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Martinique\", \"start\": 2618849, \"end\": 2619027}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Matamoros\", \"start\": 2619027, \"end\": 2619464}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Mazatlan\", \"start\": 2619464, \"end\": 2620182}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Mendoza\", \"start\": 2620182, \"end\": 2620890}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Menominee\", \"start\": 2620890, \"end\": 2621807}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Merida\", \"start\": 2621807, \"end\": 2622461}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Metlakatla\", \"start\": 2622461, \"end\": 2623056}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Mexico_City\", \"start\": 2623056, \"end\": 2623829}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Miquelon\", \"start\": 2623829, \"end\": 2624379}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Moncton\", \"start\": 2624379, \"end\": 2625872}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Monterrey\", \"start\": 2625872, \"end\": 2626516}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Montevideo\", \"start\": 2626516, \"end\": 2627485}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Montreal\", \"start\": 2627485, \"end\": 2629202}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Montserrat\", \"start\": 2629202, \"end\": 2629379}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Nassau\", \"start\": 2629379, \"end\": 2631096}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/New_York\", \"start\": 2631096, \"end\": 2632840}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Nipigon\", \"start\": 2632840, \"end\": 2634557}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Nome\", \"start\": 2634557, \"end\": 2635532}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Noronha\", \"start\": 2635532, \"end\": 2636016}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/North_Dakota/Beulah\", \"start\": 2636016, \"end\": 2637059}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/North_Dakota/Center\", \"start\": 2637059, \"end\": 2638049}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/North_Dakota/New_Salem\", \"start\": 2638049, \"end\": 2639039}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Nuuk\", \"start\": 2639039, \"end\": 2640004}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Ojinaga\", \"start\": 2640004, \"end\": 2640713}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Panama\", \"start\": 2640713, \"end\": 2640862}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Pangnirtung\", \"start\": 2640862, \"end\": 2641717}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Paramaribo\", \"start\": 2641717, \"end\": 2641904}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Phoenix\", \"start\": 2641904, \"end\": 2642144}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Port-au-Prince\", \"start\": 2642144, \"end\": 2642709}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Port_of_Spain\", \"start\": 2642709, \"end\": 2642886}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Porto_Acre\", \"start\": 2642886, \"end\": 2643304}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Porto_Velho\", \"start\": 2643304, \"end\": 2643698}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Puerto_Rico\", \"start\": 2643698, \"end\": 2643875}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Punta_Arenas\", \"start\": 2643875, \"end\": 2645093}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Rainy_River\", \"start\": 2645093, \"end\": 2646387}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Rankin_Inlet\", \"start\": 2646387, \"end\": 2647194}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Recife\", \"start\": 2647194, \"end\": 2647678}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Regina\", \"start\": 2647678, \"end\": 2648316}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Resolute\", \"start\": 2648316, \"end\": 2649123}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Rio_Branco\", \"start\": 2649123, \"end\": 2649541}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Rosario\", \"start\": 2649541, \"end\": 2650249}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Santa_Isabel\", \"start\": 2650249, \"end\": 2651274}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Santarem\", \"start\": 2651274, \"end\": 2651683}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Santiago\", \"start\": 2651683, \"end\": 2653037}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Santo_Domingo\", \"start\": 2653037, \"end\": 2653354}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Sao_Paulo\", \"start\": 2653354, \"end\": 2654306}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Scoresbysund\", \"start\": 2654306, \"end\": 2655290}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Shiprock\", \"start\": 2655290, \"end\": 2656332}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Sitka\", \"start\": 2656332, \"end\": 2657288}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/St_Barthelemy\", \"start\": 2657288, \"end\": 2657465}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/St_Johns\", \"start\": 2657465, \"end\": 2659343}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/St_Kitts\", \"start\": 2659343, \"end\": 2659520}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/St_Lucia\", \"start\": 2659520, \"end\": 2659697}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/St_Thomas\", \"start\": 2659697, \"end\": 2659874}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/St_Vincent\", \"start\": 2659874, \"end\": 2660051}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Swift_Current\", \"start\": 2660051, \"end\": 2660419}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Tegucigalpa\", \"start\": 2660419, \"end\": 2660613}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Thule\", \"start\": 2660613, \"end\": 2661068}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Thunder_Bay\", \"start\": 2661068, \"end\": 2662785}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Tijuana\", \"start\": 2662785, \"end\": 2663810}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Toronto\", \"start\": 2663810, \"end\": 2665527}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Tortola\", \"start\": 2665527, \"end\": 2665704}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Vancouver\", \"start\": 2665704, \"end\": 2667034}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Virgin\", \"start\": 2667034, \"end\": 2667211}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Whitehorse\", \"start\": 2667211, \"end\": 2668240}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Winnipeg\", \"start\": 2668240, \"end\": 2669534}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Yakutat\", \"start\": 2669534, \"end\": 2670480}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/America/Yellowknife\", \"start\": 2670480, \"end\": 2671450}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Antarctica/Casey\", \"start\": 2671450, \"end\": 2671737}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Antarctica/Davis\", \"start\": 2671737, \"end\": 2671934}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Antarctica/DumontDUrville\", \"start\": 2671934, \"end\": 2672088}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Antarctica/Macquarie\", \"start\": 2672088, \"end\": 2673064}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Antarctica/Mawson\", \"start\": 2673064, \"end\": 2673216}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Antarctica/McMurdo\", \"start\": 2673216, \"end\": 2674259}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Antarctica/Palmer\", \"start\": 2674259, \"end\": 2675146}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Antarctica/Rothera\", \"start\": 2675146, \"end\": 2675278}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Antarctica/South_Pole\", \"start\": 2675278, \"end\": 2676321}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Antarctica/Syowa\", \"start\": 2676321, \"end\": 2676454}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Antarctica/Troll\", \"start\": 2676454, \"end\": 2676631}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Antarctica/Vostok\", \"start\": 2676631, \"end\": 2676801}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Arctic/Longyearbyen\", \"start\": 2676801, \"end\": 2677506}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Aden\", \"start\": 2677506, \"end\": 2677639}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Almaty\", \"start\": 2677639, \"end\": 2678257}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Amman\", \"start\": 2678257, \"end\": 2679185}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Anadyr\", \"start\": 2679185, \"end\": 2679928}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Aqtau\", \"start\": 2679928, \"end\": 2680534}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Aqtobe\", \"start\": 2680534, \"end\": 2681149}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Ashgabat\", \"start\": 2681149, \"end\": 2681524}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Ashkhabad\", \"start\": 2681524, \"end\": 2681899}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Atyrau\", \"start\": 2681899, \"end\": 2682515}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Baghdad\", \"start\": 2682515, \"end\": 2683145}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Bahrain\", \"start\": 2683145, \"end\": 2683297}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Baku\", \"start\": 2683297, \"end\": 2684041}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Bangkok\", \"start\": 2684041, \"end\": 2684193}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Barnaul\", \"start\": 2684193, \"end\": 2684946}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Beirut\", \"start\": 2684946, \"end\": 2685678}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Bishkek\", \"start\": 2685678, \"end\": 2686296}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Brunei\", \"start\": 2686296, \"end\": 2686616}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Calcutta\", \"start\": 2686616, \"end\": 2686836}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Chita\", \"start\": 2686836, \"end\": 2687586}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Choibalsan\", \"start\": 2687586, \"end\": 2688205}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Chongqing\", \"start\": 2688205, \"end\": 2688598}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Chungking\", \"start\": 2688598, \"end\": 2688991}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Colombo\", \"start\": 2688991, \"end\": 2689238}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Dacca\", \"start\": 2689238, \"end\": 2689469}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Damascus\", \"start\": 2689469, \"end\": 2690703}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Dhaka\", \"start\": 2690703, \"end\": 2690934}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Dili\", \"start\": 2690934, \"end\": 2691104}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Dubai\", \"start\": 2691104, \"end\": 2691237}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Dushanbe\", \"start\": 2691237, \"end\": 2691603}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Famagusta\", \"start\": 2691603, \"end\": 2692543}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Gaza\", \"start\": 2692543, \"end\": 2694989}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Harbin\", \"start\": 2694989, \"end\": 2695382}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Hebron\", \"start\": 2695382, \"end\": 2697846}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Ho_Chi_Minh\", \"start\": 2697846, \"end\": 2698082}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Hong_Kong\", \"start\": 2698082, \"end\": 2698857}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Hovd\", \"start\": 2698857, \"end\": 2699451}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Irkutsk\", \"start\": 2699451, \"end\": 2700211}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Istanbul\", \"start\": 2700211, \"end\": 2701411}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Jakarta\", \"start\": 2701411, \"end\": 2701659}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Jayapura\", \"start\": 2701659, \"end\": 2701830}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Jerusalem\", \"start\": 2701830, \"end\": 2702904}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Kabul\", \"start\": 2702904, \"end\": 2703063}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Kamchatka\", \"start\": 2703063, \"end\": 2703790}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Karachi\", \"start\": 2703790, \"end\": 2704056}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Kashgar\", \"start\": 2704056, \"end\": 2704189}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Kathmandu\", \"start\": 2704189, \"end\": 2704350}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Katmandu\", \"start\": 2704350, \"end\": 2704511}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Khandyga\", \"start\": 2704511, \"end\": 2705286}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Kolkata\", \"start\": 2705286, \"end\": 2705506}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Krasnoyarsk\", \"start\": 2705506, \"end\": 2706247}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Kuala_Lumpur\", \"start\": 2706247, \"end\": 2706503}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Kuching\", \"start\": 2706503, \"end\": 2706823}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Kuwait\", \"start\": 2706823, \"end\": 2706956}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Macao\", \"start\": 2706956, \"end\": 2707747}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Macau\", \"start\": 2707747, \"end\": 2708538}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Magadan\", \"start\": 2708538, \"end\": 2709289}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Makassar\", \"start\": 2709289, \"end\": 2709479}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Manila\", \"start\": 2709479, \"end\": 2709717}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Muscat\", \"start\": 2709717, \"end\": 2709850}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Nicosia\", \"start\": 2709850, \"end\": 2710447}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Novokuznetsk\", \"start\": 2710447, \"end\": 2711173}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Novosibirsk\", \"start\": 2711173, \"end\": 2711926}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Omsk\", \"start\": 2711926, \"end\": 2712667}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Oral\", \"start\": 2712667, \"end\": 2713292}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Phnom_Penh\", \"start\": 2713292, \"end\": 2713444}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Pontianak\", \"start\": 2713444, \"end\": 2713691}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Pyongyang\", \"start\": 2713691, \"end\": 2713874}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Qatar\", \"start\": 2713874, \"end\": 2714026}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Qostanay\", \"start\": 2714026, \"end\": 2714650}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Qyzylorda\", \"start\": 2714650, \"end\": 2715274}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Rangoon\", \"start\": 2715274, \"end\": 2715461}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Riyadh\", \"start\": 2715461, \"end\": 2715594}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Saigon\", \"start\": 2715594, \"end\": 2715830}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Sakhalin\", \"start\": 2715830, \"end\": 2716585}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Samarkand\", \"start\": 2716585, \"end\": 2716951}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Seoul\", \"start\": 2716951, \"end\": 2717366}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Shanghai\", \"start\": 2717366, \"end\": 2717759}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Singapore\", \"start\": 2717759, \"end\": 2718015}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Srednekolymsk\", \"start\": 2718015, \"end\": 2718757}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Taipei\", \"start\": 2718757, \"end\": 2719268}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Tashkent\", \"start\": 2719268, \"end\": 2719634}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Tbilisi\", \"start\": 2719634, \"end\": 2720263}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Tehran\", \"start\": 2720263, \"end\": 2721075}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Tel_Aviv\", \"start\": 2721075, \"end\": 2722149}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Thimbu\", \"start\": 2722149, \"end\": 2722303}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Thimphu\", \"start\": 2722303, \"end\": 2722457}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Tokyo\", \"start\": 2722457, \"end\": 2722670}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Tomsk\", \"start\": 2722670, \"end\": 2723423}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Ujung_Pandang\", \"start\": 2723423, \"end\": 2723613}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Ulaanbaatar\", \"start\": 2723613, \"end\": 2724207}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Ulan_Bator\", \"start\": 2724207, \"end\": 2724801}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Urumqi\", \"start\": 2724801, \"end\": 2724934}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Ust-Nera\", \"start\": 2724934, \"end\": 2725705}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Vientiane\", \"start\": 2725705, \"end\": 2725857}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Vladivostok\", \"start\": 2725857, \"end\": 2726599}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Yakutsk\", \"start\": 2726599, \"end\": 2727340}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Yangon\", \"start\": 2727340, \"end\": 2727527}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Yekaterinburg\", \"start\": 2727527, \"end\": 2728287}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Asia/Yerevan\", \"start\": 2728287, \"end\": 2728995}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Atlantic/Azores\", \"start\": 2728995, \"end\": 2730448}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Atlantic/Bermuda\", \"start\": 2730448, \"end\": 2731472}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Atlantic/Canary\", \"start\": 2731472, \"end\": 2731950}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Atlantic/Cape_Verde\", \"start\": 2731950, \"end\": 2732125}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Atlantic/Faeroe\", \"start\": 2732125, \"end\": 2732566}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Atlantic/Faroe\", \"start\": 2732566, \"end\": 2733007}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Atlantic/Jan_Mayen\", \"start\": 2733007, \"end\": 2733712}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Atlantic/Madeira\", \"start\": 2733712, \"end\": 2735165}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Atlantic/Reykjavik\", \"start\": 2735165, \"end\": 2735295}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Atlantic/South_Georgia\", \"start\": 2735295, \"end\": 2735427}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Atlantic/St_Helena\", \"start\": 2735427, \"end\": 2735557}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Atlantic/Stanley\", \"start\": 2735557, \"end\": 2736346}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/ACT\", \"start\": 2736346, \"end\": 2737250}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/Adelaide\", \"start\": 2737250, \"end\": 2738171}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/Brisbane\", \"start\": 2738171, \"end\": 2738460}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/Broken_Hill\", \"start\": 2738460, \"end\": 2739401}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/Canberra\", \"start\": 2739401, \"end\": 2740305}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/Currie\", \"start\": 2740305, \"end\": 2741308}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/Darwin\", \"start\": 2741308, \"end\": 2741542}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/Eucla\", \"start\": 2741542, \"end\": 2741856}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/Hobart\", \"start\": 2741856, \"end\": 2742859}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/LHI\", \"start\": 2742859, \"end\": 2743551}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/Lindeman\", \"start\": 2743551, \"end\": 2743876}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/Lord_Howe\", \"start\": 2743876, \"end\": 2744568}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/Melbourne\", \"start\": 2744568, \"end\": 2745472}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/NSW\", \"start\": 2745472, \"end\": 2746376}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/North\", \"start\": 2746376, \"end\": 2746610}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/Perth\", \"start\": 2746610, \"end\": 2746916}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/Queensland\", \"start\": 2746916, \"end\": 2747205}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/South\", \"start\": 2747205, \"end\": 2748126}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/Sydney\", \"start\": 2748126, \"end\": 2749030}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/Tasmania\", \"start\": 2749030, \"end\": 2750033}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/Victoria\", \"start\": 2750033, \"end\": 2750937}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/West\", \"start\": 2750937, \"end\": 2751243}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Australia/Yancowinna\", \"start\": 2751243, \"end\": 2752184}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Brazil/Acre\", \"start\": 2752184, \"end\": 2752602}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Brazil/DeNoronha\", \"start\": 2752602, \"end\": 2753086}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Brazil/East\", \"start\": 2753086, \"end\": 2754038}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Brazil/West\", \"start\": 2754038, \"end\": 2754450}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/CET\", \"start\": 2754450, \"end\": 2755071}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/CST6CDT\", \"start\": 2755071, \"end\": 2756022}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Canada/Atlantic\", \"start\": 2756022, \"end\": 2757694}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Canada/Central\", \"start\": 2757694, \"end\": 2758988}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Canada/Eastern\", \"start\": 2758988, \"end\": 2760705}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Canada/Mountain\", \"start\": 2760705, \"end\": 2761675}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Canada/Newfoundland\", \"start\": 2761675, \"end\": 2763553}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Canada/Pacific\", \"start\": 2763553, \"end\": 2764883}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Canada/Saskatchewan\", \"start\": 2764883, \"end\": 2765521}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Canada/Yukon\", \"start\": 2765521, \"end\": 2766550}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Chile/Continental\", \"start\": 2766550, \"end\": 2767904}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Chile/EasterIsland\", \"start\": 2767904, \"end\": 2769078}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Cuba\", \"start\": 2769078, \"end\": 2770195}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/EET\", \"start\": 2770195, \"end\": 2770692}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/EST\", \"start\": 2770692, \"end\": 2770803}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/EST5EDT\", \"start\": 2770803, \"end\": 2771754}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Egypt\", \"start\": 2771754, \"end\": 2773063}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Eire\", \"start\": 2773063, \"end\": 2774559}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT\", \"start\": 2774559, \"end\": 2774670}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT+0\", \"start\": 2774670, \"end\": 2774781}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT+1\", \"start\": 2774781, \"end\": 2774894}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT+10\", \"start\": 2774894, \"end\": 2775008}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT+11\", \"start\": 2775008, \"end\": 2775122}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT+12\", \"start\": 2775122, \"end\": 2775236}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT+2\", \"start\": 2775236, \"end\": 2775349}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT+3\", \"start\": 2775349, \"end\": 2775462}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT+4\", \"start\": 2775462, \"end\": 2775575}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT+5\", \"start\": 2775575, \"end\": 2775688}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT+6\", \"start\": 2775688, \"end\": 2775801}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT+7\", \"start\": 2775801, \"end\": 2775914}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT+8\", \"start\": 2775914, \"end\": 2776027}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT+9\", \"start\": 2776027, \"end\": 2776140}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT-0\", \"start\": 2776140, \"end\": 2776251}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT-1\", \"start\": 2776251, \"end\": 2776365}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT-10\", \"start\": 2776365, \"end\": 2776480}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT-11\", \"start\": 2776480, \"end\": 2776595}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT-12\", \"start\": 2776595, \"end\": 2776710}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT-13\", \"start\": 2776710, \"end\": 2776825}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT-14\", \"start\": 2776825, \"end\": 2776940}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT-2\", \"start\": 2776940, \"end\": 2777054}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT-3\", \"start\": 2777054, \"end\": 2777168}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT-4\", \"start\": 2777168, \"end\": 2777282}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT-5\", \"start\": 2777282, \"end\": 2777396}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT-6\", \"start\": 2777396, \"end\": 2777510}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT-7\", \"start\": 2777510, \"end\": 2777624}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT-8\", \"start\": 2777624, \"end\": 2777738}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT-9\", \"start\": 2777738, \"end\": 2777852}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/GMT0\", \"start\": 2777852, \"end\": 2777963}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/Greenwich\", \"start\": 2777963, \"end\": 2778074}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/UCT\", \"start\": 2778074, \"end\": 2778185}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/UTC\", \"start\": 2778185, \"end\": 2778296}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/Universal\", \"start\": 2778296, \"end\": 2778407}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Etc/Zulu\", \"start\": 2778407, \"end\": 2778518}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Amsterdam\", \"start\": 2778518, \"end\": 2779621}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Andorra\", \"start\": 2779621, \"end\": 2780010}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Astrakhan\", \"start\": 2780010, \"end\": 2780736}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Athens\", \"start\": 2780736, \"end\": 2781418}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Belfast\", \"start\": 2781418, \"end\": 2783017}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Belgrade\", \"start\": 2783017, \"end\": 2783495}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Berlin\", \"start\": 2783495, \"end\": 2784200}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Bratislava\", \"start\": 2784200, \"end\": 2784923}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Brussels\", \"start\": 2784923, \"end\": 2786026}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Bucharest\", \"start\": 2786026, \"end\": 2786687}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Budapest\", \"start\": 2786687, \"end\": 2787453}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Busingen\", \"start\": 2787453, \"end\": 2787950}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Chisinau\", \"start\": 2787950, \"end\": 2788705}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Copenhagen\", \"start\": 2788705, \"end\": 2789410}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Dublin\", \"start\": 2789410, \"end\": 2790906}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Gibraltar\", \"start\": 2790906, \"end\": 2792126}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Guernsey\", \"start\": 2792126, \"end\": 2793725}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Helsinki\", \"start\": 2793725, \"end\": 2794206}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Isle_of_Man\", \"start\": 2794206, \"end\": 2795805}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Istanbul\", \"start\": 2795805, \"end\": 2797005}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Jersey\", \"start\": 2797005, \"end\": 2798604}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Kaliningrad\", \"start\": 2798604, \"end\": 2799508}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Kiev\", \"start\": 2799508, \"end\": 2800066}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Kirov\", \"start\": 2800066, \"end\": 2800801}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Kyiv\", \"start\": 2800801, \"end\": 2801359}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Lisbon\", \"start\": 2801359, \"end\": 2802813}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Ljubljana\", \"start\": 2802813, \"end\": 2803291}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/London\", \"start\": 2803291, \"end\": 2804890}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Luxembourg\", \"start\": 2804890, \"end\": 2805993}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Madrid\", \"start\": 2805993, \"end\": 2806890}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Malta\", \"start\": 2806890, \"end\": 2807818}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Mariehamn\", \"start\": 2807818, \"end\": 2808299}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Minsk\", \"start\": 2808299, \"end\": 2809107}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Monaco\", \"start\": 2809107, \"end\": 2810212}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Moscow\", \"start\": 2810212, \"end\": 2811120}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Nicosia\", \"start\": 2811120, \"end\": 2811717}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Oslo\", \"start\": 2811717, \"end\": 2812422}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Paris\", \"start\": 2812422, \"end\": 2813527}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Podgorica\", \"start\": 2813527, \"end\": 2814005}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Prague\", \"start\": 2814005, \"end\": 2814728}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Riga\", \"start\": 2814728, \"end\": 2815422}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Rome\", \"start\": 2815422, \"end\": 2816369}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Samara\", \"start\": 2816369, \"end\": 2817101}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/San_Marino\", \"start\": 2817101, \"end\": 2818048}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Sarajevo\", \"start\": 2818048, \"end\": 2818526}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Saratov\", \"start\": 2818526, \"end\": 2819252}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Simferopol\", \"start\": 2819252, \"end\": 2820117}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Skopje\", \"start\": 2820117, \"end\": 2820595}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Sofia\", \"start\": 2820595, \"end\": 2821187}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Stockholm\", \"start\": 2821187, \"end\": 2821892}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Tallinn\", \"start\": 2821892, \"end\": 2822567}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Tirane\", \"start\": 2822567, \"end\": 2823171}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Tiraspol\", \"start\": 2823171, \"end\": 2823926}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Ulyanovsk\", \"start\": 2823926, \"end\": 2824686}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Uzhgorod\", \"start\": 2824686, \"end\": 2825244}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Vaduz\", \"start\": 2825244, \"end\": 2825741}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Vatican\", \"start\": 2825741, \"end\": 2826688}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Vienna\", \"start\": 2826688, \"end\": 2827346}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Vilnius\", \"start\": 2827346, \"end\": 2828022}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Volgograd\", \"start\": 2828022, \"end\": 2828775}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Warsaw\", \"start\": 2828775, \"end\": 2829698}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Zagreb\", \"start\": 2829698, \"end\": 2830176}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Zaporozhye\", \"start\": 2830176, \"end\": 2830734}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Europe/Zurich\", \"start\": 2830734, \"end\": 2831231}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Factory\", \"start\": 2831231, \"end\": 2831344}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/GB\", \"start\": 2831344, \"end\": 2832943}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/GB-Eire\", \"start\": 2832943, \"end\": 2834542}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/GMT\", \"start\": 2834542, \"end\": 2834653}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/GMT+0\", \"start\": 2834653, \"end\": 2834764}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/GMT-0\", \"start\": 2834764, \"end\": 2834875}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/GMT0\", \"start\": 2834875, \"end\": 2834986}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Greenwich\", \"start\": 2834986, \"end\": 2835097}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/HST\", \"start\": 2835097, \"end\": 2835209}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Hongkong\", \"start\": 2835209, \"end\": 2835984}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Iceland\", \"start\": 2835984, \"end\": 2836114}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Indian/Antananarivo\", \"start\": 2836114, \"end\": 2836305}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Indian/Chagos\", \"start\": 2836305, \"end\": 2836457}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Indian/Christmas\", \"start\": 2836457, \"end\": 2836609}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Indian/Cocos\", \"start\": 2836609, \"end\": 2836796}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Indian/Comoro\", \"start\": 2836796, \"end\": 2836987}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Indian/Kerguelen\", \"start\": 2836987, \"end\": 2837139}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Indian/Mahe\", \"start\": 2837139, \"end\": 2837272}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Indian/Maldives\", \"start\": 2837272, \"end\": 2837424}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Indian/Mauritius\", \"start\": 2837424, \"end\": 2837603}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Indian/Mayotte\", \"start\": 2837603, \"end\": 2837794}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Indian/Reunion\", \"start\": 2837794, \"end\": 2837927}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Iran\", \"start\": 2837927, \"end\": 2838739}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Israel\", \"start\": 2838739, \"end\": 2839813}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Jamaica\", \"start\": 2839813, \"end\": 2840152}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Japan\", \"start\": 2840152, \"end\": 2840365}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Kwajalein\", \"start\": 2840365, \"end\": 2840584}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Libya\", \"start\": 2840584, \"end\": 2841015}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/MET\", \"start\": 2841015, \"end\": 2841636}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/MST\", \"start\": 2841636, \"end\": 2841747}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/MST7MDT\", \"start\": 2841747, \"end\": 2842698}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Mexico/BajaNorte\", \"start\": 2842698, \"end\": 2843723}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Mexico/BajaSur\", \"start\": 2843723, \"end\": 2844441}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Mexico/General\", \"start\": 2844441, \"end\": 2845214}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/NZ\", \"start\": 2845214, \"end\": 2846257}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/NZ-CHAT\", \"start\": 2846257, \"end\": 2847065}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Navajo\", \"start\": 2847065, \"end\": 2848107}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/PRC\", \"start\": 2848107, \"end\": 2848500}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/PST8PDT\", \"start\": 2848500, \"end\": 2849451}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Apia\", \"start\": 2849451, \"end\": 2849858}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Auckland\", \"start\": 2849858, \"end\": 2850901}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Bougainville\", \"start\": 2850901, \"end\": 2851102}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Chatham\", \"start\": 2851102, \"end\": 2851910}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Chuuk\", \"start\": 2851910, \"end\": 2852064}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Easter\", \"start\": 2852064, \"end\": 2853238}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Efate\", \"start\": 2853238, \"end\": 2853580}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Enderbury\", \"start\": 2853580, \"end\": 2853752}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Fakaofo\", \"start\": 2853752, \"end\": 2853905}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Fiji\", \"start\": 2853905, \"end\": 2854301}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Funafuti\", \"start\": 2854301, \"end\": 2854435}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Galapagos\", \"start\": 2854435, \"end\": 2854610}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Gambier\", \"start\": 2854610, \"end\": 2854742}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Guadalcanal\", \"start\": 2854742, \"end\": 2854876}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Guam\", \"start\": 2854876, \"end\": 2855226}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Honolulu\", \"start\": 2855226, \"end\": 2855447}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Johnston\", \"start\": 2855447, \"end\": 2855668}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Kanton\", \"start\": 2855668, \"end\": 2855840}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Kiritimati\", \"start\": 2855840, \"end\": 2856014}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Kosrae\", \"start\": 2856014, \"end\": 2856256}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Kwajalein\", \"start\": 2856256, \"end\": 2856475}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Majuro\", \"start\": 2856475, \"end\": 2856609}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Marquesas\", \"start\": 2856609, \"end\": 2856748}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Midway\", \"start\": 2856748, \"end\": 2856894}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Nauru\", \"start\": 2856894, \"end\": 2857077}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Niue\", \"start\": 2857077, \"end\": 2857231}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Norfolk\", \"start\": 2857231, \"end\": 2857478}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Noumea\", \"start\": 2857478, \"end\": 2857676}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Pago_Pago\", \"start\": 2857676, \"end\": 2857822}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Palau\", \"start\": 2857822, \"end\": 2857970}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Pitcairn\", \"start\": 2857970, \"end\": 2858123}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Pohnpei\", \"start\": 2858123, \"end\": 2858257}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Ponape\", \"start\": 2858257, \"end\": 2858391}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Port_Moresby\", \"start\": 2858391, \"end\": 2858545}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Rarotonga\", \"start\": 2858545, \"end\": 2858951}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Saipan\", \"start\": 2858951, \"end\": 2859301}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Samoa\", \"start\": 2859301, \"end\": 2859447}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Tahiti\", \"start\": 2859447, \"end\": 2859580}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Tarawa\", \"start\": 2859580, \"end\": 2859714}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Tongatapu\", \"start\": 2859714, \"end\": 2859951}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Truk\", \"start\": 2859951, \"end\": 2860105}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Wake\", \"start\": 2860105, \"end\": 2860239}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Wallis\", \"start\": 2860239, \"end\": 2860373}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Pacific/Yap\", \"start\": 2860373, \"end\": 2860527}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Poland\", \"start\": 2860527, \"end\": 2861450}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Portugal\", \"start\": 2861450, \"end\": 2862904}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/ROC\", \"start\": 2862904, \"end\": 2863415}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/ROK\", \"start\": 2863415, \"end\": 2863830}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Singapore\", \"start\": 2863830, \"end\": 2864086}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Turkey\", \"start\": 2864086, \"end\": 2865286}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/UCT\", \"start\": 2865286, \"end\": 2865397}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/US/Alaska\", \"start\": 2865397, \"end\": 2866374}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/US/Aleutian\", \"start\": 2866374, \"end\": 2867343}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/US/Arizona\", \"start\": 2867343, \"end\": 2867583}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/US/Central\", \"start\": 2867583, \"end\": 2869337}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/US/East-Indiana\", \"start\": 2869337, \"end\": 2869868}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/US/Eastern\", \"start\": 2869868, \"end\": 2871612}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/US/Hawaii\", \"start\": 2871612, \"end\": 2871833}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/US/Indiana-Starke\", \"start\": 2871833, \"end\": 2872849}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/US/Michigan\", \"start\": 2872849, \"end\": 2873748}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/US/Mountain\", \"start\": 2873748, \"end\": 2874790}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/US/Pacific\", \"start\": 2874790, \"end\": 2876084}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/US/Samoa\", \"start\": 2876084, \"end\": 2876230}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/UTC\", \"start\": 2876230, \"end\": 2876341}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Universal\", \"start\": 2876341, \"end\": 2876452}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/W-SU\", \"start\": 2876452, \"end\": 2877360}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/WET\", \"start\": 2877360, \"end\": 2877854}, {\"filename\": \"/tmp/pglite/share/postgresql/timezone/Zulu\", \"start\": 2877854, \"end\": 2877965}, {\"filename\": \"/tmp/pglite/share/postgresql/timezonesets/Africa.txt\", \"start\": 2877965, \"end\": 2884938}, {\"filename\": \"/tmp/pglite/share/postgresql/timezonesets/America.txt\", \"start\": 2884938, \"end\": 2895945}, {\"filename\": \"/tmp/pglite/share/postgresql/timezonesets/Antarctica.txt\", \"start\": 2895945, \"end\": 2897079}, {\"filename\": \"/tmp/pglite/share/postgresql/timezonesets/Asia.txt\", \"start\": 2897079, \"end\": 2905390}, {\"filename\": \"/tmp/pglite/share/postgresql/timezonesets/Atlantic.txt\", \"start\": 2905390, \"end\": 2908923}, {\"filename\": \"/tmp/pglite/share/postgresql/timezonesets/Australia\", \"start\": 2908923, \"end\": 2910058}, {\"filename\": \"/tmp/pglite/share/postgresql/timezonesets/Australia.txt\", \"start\": 2910058, \"end\": 2913442}, {\"filename\": \"/tmp/pglite/share/postgresql/timezonesets/Default\", \"start\": 2913442, \"end\": 2940692}, {\"filename\": \"/tmp/pglite/share/postgresql/timezonesets/Etc.txt\", \"start\": 2940692, \"end\": 2941942}, {\"filename\": \"/tmp/pglite/share/postgresql/timezonesets/Europe.txt\", \"start\": 2941942, \"end\": 2950724}, {\"filename\": \"/tmp/pglite/share/postgresql/timezonesets/India\", \"start\": 2950724, \"end\": 2951317}, {\"filename\": \"/tmp/pglite/share/postgresql/timezonesets/Indian.txt\", \"start\": 2951317, \"end\": 2952578}, {\"filename\": \"/tmp/pglite/share/postgresql/timezonesets/Pacific.txt\", \"start\": 2952578, \"end\": 2956346}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/danish.stop\", \"start\": 2956346, \"end\": 2956770}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/dutch.stop\", \"start\": 2956770, \"end\": 2957223}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/english.stop\", \"start\": 2957223, \"end\": 2957845}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/finnish.stop\", \"start\": 2957845, \"end\": 2959424}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/french.stop\", \"start\": 2959424, \"end\": 2960229}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/german.stop\", \"start\": 2960229, \"end\": 2961578}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/hungarian.stop\", \"start\": 2961578, \"end\": 2962805}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/hunspell_sample.affix\", \"start\": 2962805, \"end\": 2963048}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/hunspell_sample_long.affix\", \"start\": 2963048, \"end\": 2963681}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/hunspell_sample_long.dict\", \"start\": 2963681, \"end\": 2963779}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/hunspell_sample_num.affix\", \"start\": 2963779, \"end\": 2964241}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/hunspell_sample_num.dict\", \"start\": 2964241, \"end\": 2964370}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/ispell_sample.affix\", \"start\": 2964370, \"end\": 2964835}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/ispell_sample.dict\", \"start\": 2964835, \"end\": 2964916}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/italian.stop\", \"start\": 2964916, \"end\": 2966570}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/nepali.stop\", \"start\": 2966570, \"end\": 2970831}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/norwegian.stop\", \"start\": 2970831, \"end\": 2971682}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/portuguese.stop\", \"start\": 2971682, \"end\": 2972949}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/russian.stop\", \"start\": 2972949, \"end\": 2974184}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/spanish.stop\", \"start\": 2974184, \"end\": 2976362}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/swedish.stop\", \"start\": 2976362, \"end\": 2976921}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/synonym_sample.syn\", \"start\": 2976921, \"end\": 2976994}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/thesaurus_sample.ths\", \"start\": 2976994, \"end\": 2977467}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/turkish.stop\", \"start\": 2977467, \"end\": 2977727}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/unaccent.rules\", \"start\": 2977727, \"end\": 2987666}, {\"filename\": \"/tmp/pglite/share/postgresql/tsearch_data/xsyn_sample.rules\", \"start\": 2987666, \"end\": 2987805}], \"remote_package_size\": 2987805});\n\n })();\n\n// end include: /tmp/tmp03stmbl_.js\n\n\n// Sometimes an existing Module object exists with properties\n// meant to overwrite the default module functionality. Here\n// we collect those properties and reapply _after_ we configure\n// the current environment's defaults to avoid having to be so\n// defensive during initialization.\nvar moduleOverrides = Object.assign({}, Module);\n\nvar arguments_ = [];\nvar thisProgram = './this.program';\nvar quit_ = (status, toThrow) => {\n throw toThrow;\n};\n\n// `/` should be present at the end if `scriptDirectory` is not empty\nvar scriptDirectory = '';\nfunction locateFile(path) {\n if (Module['locateFile']) {\n return Module['locateFile'](path, scriptDirectory);\n }\n return scriptDirectory + path;\n}\n\n// Hooks that are implemented differently in different runtime environments.\nvar readAsync, readBinary;\n\nif (ENVIRONMENT_IS_NODE) {\n\n // These modules will usually be used on Node.js. Load them eagerly to avoid\n // the complexity of lazy-loading.\n var fs = require('fs');\n var nodePath = require('path');\n\n // EXPORT_ES6 + ENVIRONMENT_IS_NODE always requires use of import.meta.url,\n // since there's no way getting the current absolute path of the module when\n // support for that is not available.\n if (!import.meta.url.startsWith('data:')) {\n scriptDirectory = nodePath.dirname(require('url').fileURLToPath(import.meta.url)) + '/';\n }\n\n// include: node_shell_read.js\nreadBinary = (filename) => {\n // We need to re-wrap `file://` strings to URLs. Normalizing isn't\n // necessary in that case, the path should already be absolute.\n filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename);\n var ret = fs.readFileSync(filename);\n return ret;\n};\n\nreadAsync = (filename, binary = true) => {\n // See the comment in the `readBinary` function.\n filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename);\n return new Promise((resolve, reject) => {\n fs.readFile(filename, binary ? undefined : 'utf8', (err, data) => {\n if (err) reject(err);\n else resolve(binary ? data.buffer : data);\n });\n });\n};\n// end include: node_shell_read.js\n if (!Module['thisProgram'] && process.argv.length > 1) {\n thisProgram = process.argv[1].replace(/\\\\/g, '/');\n }\n\n arguments_ = process.argv.slice(2);\n\n // MODULARIZE will export the module in the proper place outside, we don't need to export here\n\n quit_ = (status, toThrow) => {\n process.exitCode = status;\n throw toThrow;\n };\n\n} else\n\n// Note that this includes Node.js workers when relevant (pthreads is enabled).\n// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and\n// ENVIRONMENT_IS_NODE.\nif (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled\n scriptDirectory = self.location.href;\n } else if (typeof document != 'undefined' && document.currentScript) { // web\n scriptDirectory = document.currentScript.src;\n }\n // When MODULARIZE, this JS may be executed later, after document.currentScript\n // is gone, so we saved it, and we use it here instead of any other info.\n if (_scriptName) {\n scriptDirectory = _scriptName;\n }\n // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.\n // otherwise, slice off the final part of the url to find the script directory.\n // if scriptDirectory does not contain a slash, lastIndexOf will return -1,\n // and scriptDirectory will correctly be replaced with an empty string.\n // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #),\n // they are removed because they could contain a slash.\n if (scriptDirectory.startsWith('blob:')) {\n scriptDirectory = '';\n } else {\n scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1);\n }\n\n {\n// include: web_or_worker_shell_read.js\nif (ENVIRONMENT_IS_WORKER) {\n readBinary = (url) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, false);\n xhr.responseType = 'arraybuffer';\n xhr.send(null);\n return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response));\n };\n }\n\n readAsync = (url) => {\n // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url.\n // See https://github.com/github/fetch/pull/92#issuecomment-140665932\n // Cordova or Electron apps are typically loaded from a file:// url.\n // So use XHR on webview if URL is a file URL.\n if (isFileURI(url)) {\n return new Promise((resolve, reject) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.onload = () => {\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0\n resolve(xhr.response);\n return;\n }\n reject(xhr.status);\n };\n xhr.onerror = reject;\n xhr.send(null);\n });\n }\n return fetch(url, { credentials: 'same-origin' })\n .then((response) => {\n if (response.ok) {\n return response.arrayBuffer();\n }\n return Promise.reject(new Error(response.status + ' : ' + response.url));\n })\n };\n// end include: web_or_worker_shell_read.js\n }\n} else\n{\n}\n\nvar out = Module['print'] || console.log.bind(console);\nvar err = Module['printErr'] || console.error.bind(console);\n\n// Merge back in the overrides\nObject.assign(Module, moduleOverrides);\n// Free the object hierarchy contained in the overrides, this lets the GC\n// reclaim data used.\nmoduleOverrides = null;\n\n// Emit code to handle expected values on the Module object. This applies Module.x\n// to the proper local x. This has two benefits: first, we only emit it if it is\n// expected to arrive, and second, by using a local everywhere else that can be\n// minified.\n\nif (Module['arguments']) arguments_ = Module['arguments'];\n\nif (Module['thisProgram']) thisProgram = Module['thisProgram'];\n\n// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message\n// end include: shell.js\n\n// include: preamble.js\n// === Preamble library stuff ===\n\n// Documentation for the public APIs defined in this file must be updated in:\n// site/source/docs/api_reference/preamble.js.rst\n// A prebuilt local version of the documentation is available at:\n// site/build/text/docs/api_reference/preamble.js.txt\n// You can also build docs locally as HTML or other formats in site/\n// An online HTML version (which may be of a different version of Emscripten)\n// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html\n\nvar dynamicLibraries = Module['dynamicLibraries'] || [];\n\nvar wasmBinary = Module['wasmBinary'];\n\n// include: base64Utils.js\n// Converts a string of base64 into a byte array (Uint8Array).\nfunction intArrayFromBase64(s) {\n if (typeof ENVIRONMENT_IS_NODE != 'undefined' && ENVIRONMENT_IS_NODE) {\n var buf = Buffer.from(s, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);\n }\n\n var decoded = atob(s);\n var bytes = new Uint8Array(decoded.length);\n for (var i = 0 ; i < decoded.length ; ++i) {\n bytes[i] = decoded.charCodeAt(i);\n }\n return bytes;\n}\n\n// If filename is a base64 data URI, parses and returns data (Buffer on node,\n// Uint8Array otherwise). If filename is not a base64 data URI, returns undefined.\nfunction tryParseAsDataURI(filename) {\n if (!isDataURI(filename)) {\n return;\n }\n\n return intArrayFromBase64(filename.slice(dataURIPrefix.length));\n}\n// end include: base64Utils.js\n// Wasm globals\n\nvar wasmMemory;\n\n//========================================\n// Runtime essentials\n//========================================\n\n// whether we are quitting the application. no code should run after this.\n// set in exit() and abort()\nvar ABORT = false;\n\n// set by exit() and abort(). Passed to 'onExit' handler.\n// NOTE: This is also used as the process return code code in shell environments\n// but only when noExitRuntime is false.\nvar EXITSTATUS;\n\n// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we\n// don't define it at all in release modes. This matches the behaviour of\n// MINIMAL_RUNTIME.\n// TODO(sbc): Make this the default even without STRICT enabled.\n/** @type {function(*, string=)} */\nfunction assert(condition, text) {\n if (!condition) {\n // This build was created without ASSERTIONS defined. `assert()` should not\n // ever be called in this configuration but in case there are callers in\n // the wild leave this simple abort() implementation here for now.\n abort(text);\n }\n}\n\n// Memory management\n\nvar HEAP,\n/** @type {!Int8Array} */\n HEAP8,\n/** @type {!Uint8Array} */\n HEAPU8,\n/** @type {!Int16Array} */\n HEAP16,\n/** @type {!Uint16Array} */\n HEAPU16,\n/** @type {!Int32Array} */\n HEAP32,\n/** @type {!Uint32Array} */\n HEAPU32,\n/** @type {!Float32Array} */\n HEAPF32,\n/* BigInt64Array type is not correctly defined in closure\n/** not-@type {!BigInt64Array} */\n HEAP64,\n/* BigUint64Array type is not correctly defined in closure\n/** not-t@type {!BigUint64Array} */\n HEAPU64,\n/** @type {!Float64Array} */\n HEAPF64;\n\n// include: runtime_shared.js\nfunction updateMemoryViews() {\n var b = wasmMemory.buffer;\n Module['HEAP8'] = HEAP8 = new Int8Array(b);\n Module['HEAP16'] = HEAP16 = new Int16Array(b);\n Module['HEAPU8'] = HEAPU8 = new Uint8Array(b);\n Module['HEAPU16'] = HEAPU16 = new Uint16Array(b);\n Module['HEAP32'] = HEAP32 = new Int32Array(b);\n Module['HEAPU32'] = HEAPU32 = new Uint32Array(b);\n Module['HEAPF32'] = HEAPF32 = new Float32Array(b);\n Module['HEAPF64'] = HEAPF64 = new Float64Array(b);\n Module['HEAP64'] = HEAP64 = new BigInt64Array(b);\n Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b);\n}\n\n// end include: runtime_shared.js\n// In non-standalone/normal mode, we create the memory here.\n// include: runtime_init_memory.js\n// Create the wasm memory. (Note: this only applies if IMPORTED_MEMORY is defined)\n\n// check for full engine support (use string 'subarray' to avoid closure compiler confusion)\n\n if (Module['wasmMemory']) {\n wasmMemory = Module['wasmMemory'];\n } else\n {\n var INITIAL_MEMORY = Module['INITIAL_MEMORY'] || 134217728;\n\n wasmMemory = new WebAssembly.Memory({\n 'initial': INITIAL_MEMORY / 65536,\n // In theory we should not need to emit the maximum if we want \"unlimited\"\n // or 4GB of memory, but VMs error on that atm, see\n // https://github.com/emscripten-core/emscripten/issues/14130\n // And in the pthreads case we definitely need to emit a maximum. So\n // always emit one.\n 'maximum': 32768,\n });\n }\n\n updateMemoryViews();\n\n// end include: runtime_init_memory.js\n\n// include: runtime_stack_check.js\n// end include: runtime_stack_check.js\nvar __ATPRERUN__ = []; // functions called before the runtime is initialized\nvar __ATINIT__ = []; // functions called during startup\nvar __ATMAIN__ = []; // functions called when main() is to be run\nvar __ATEXIT__ = []; // functions called during shutdown\nvar __ATPOSTRUN__ = []; // functions called after the main() is called\n\nvar __RELOC_FUNCS__ = [];\n\nvar runtimeInitialized = false;\n\nfunction preRun() {\n if (Module['preRun']) {\n if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];\n while (Module['preRun'].length) {\n addOnPreRun(Module['preRun'].shift());\n }\n }\n callRuntimeCallbacks(__ATPRERUN__);\n}\n\nfunction initRuntime() {\n runtimeInitialized = true;\n\n callRuntimeCallbacks(__RELOC_FUNCS__);\n \nif (!Module['noFSInit'] && !FS.initialized)\n FS.init();\nFS.ignorePermissions = false;\n\nTTY.init();\nSOCKFS.root = FS.mount(SOCKFS, {}, null);\nPIPEFS.root = FS.mount(PIPEFS, {}, null);\n callRuntimeCallbacks(__ATINIT__);\n}\n\nfunction preMain() {\n \n callRuntimeCallbacks(__ATMAIN__);\n}\n\nfunction postRun() {\n\n if (Module['postRun']) {\n if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];\n while (Module['postRun'].length) {\n addOnPostRun(Module['postRun'].shift());\n }\n }\n\n callRuntimeCallbacks(__ATPOSTRUN__);\n}\n\nfunction addOnPreRun(cb) {\n __ATPRERUN__.unshift(cb);\n}\n\nfunction addOnInit(cb) {\n __ATINIT__.unshift(cb);\n}\n\nfunction addOnPreMain(cb) {\n __ATMAIN__.unshift(cb);\n}\n\nfunction addOnExit(cb) {\n}\n\nfunction addOnPostRun(cb) {\n __ATPOSTRUN__.unshift(cb);\n}\n\n// include: runtime_math.js\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc\n\n// end include: runtime_math.js\n// A counter of dependencies for calling run(). If we need to\n// do asynchronous work before running, increment this and\n// decrement it. Incrementing must happen in a place like\n// Module.preRun (used by emcc to add file preloading).\n// Note that you can add dependencies in preRun, even though\n// it happens right before run - run will be postponed until\n// the dependencies are met.\nvar runDependencies = 0;\nvar runDependencyWatcher = null;\nvar dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled\n\nfunction getUniqueRunDependency(id) {\n return id;\n}\n\nfunction addRunDependency(id) {\n runDependencies++;\n\n Module['monitorRunDependencies']?.(runDependencies);\n\n}\n\nfunction removeRunDependency(id) {\n runDependencies--;\n\n Module['monitorRunDependencies']?.(runDependencies);\n\n if (runDependencies == 0) {\n if (runDependencyWatcher !== null) {\n clearInterval(runDependencyWatcher);\n runDependencyWatcher = null;\n }\n if (dependenciesFulfilled) {\n var callback = dependenciesFulfilled;\n dependenciesFulfilled = null;\n callback(); // can add another dependenciesFulfilled\n }\n }\n}\n\n/** @param {string|number=} what */\nfunction abort(what) {\n Module['onAbort']?.(what);\n\n what = 'Aborted(' + what + ')';\n // TODO(sbc): Should we remove printing and leave it up to whoever\n // catches the exception?\n err(what);\n\n ABORT = true;\n\n what += '. Build with -sASSERTIONS for more info.';\n\n // Use a wasm runtime error, because a JS error might be seen as a foreign\n // exception, which means we'd run destructors on it. We need the error to\n // simply make the program stop.\n // FIXME This approach does not work in Wasm EH because it currently does not assume\n // all RuntimeErrors are from traps; it decides whether a RuntimeError is from\n // a trap or not based on a hidden field within the object. So at the moment\n // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that\n // allows this in the wasm spec.\n\n // Suppress closure compiler warning here. Closure compiler's builtin extern\n // definition for WebAssembly.RuntimeError claims it takes no arguments even\n // though it can.\n // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed.\n /** @suppress {checkTypes} */\n var e = new WebAssembly.RuntimeError(what);\n\n readyPromiseReject(e);\n // Throw the error whether or not MODULARIZE is set because abort is used\n // in code paths apart from instantiation where an exception is expected\n // to be thrown when abort is called.\n throw e;\n}\n\n// include: memoryprofiler.js\n// end include: memoryprofiler.js\n// include: URIUtils.js\n// Prefix of data URIs emitted by SINGLE_FILE and related options.\nvar dataURIPrefix = 'data:application/octet-stream;base64,';\n\n/**\n * Indicates whether filename is a base64 data URI.\n * @noinline\n */\nvar isDataURI = (filename) => filename.startsWith(dataURIPrefix);\n\n/**\n * Indicates whether filename is delivered via file protocol (as opposed to http/https)\n * @noinline\n */\nvar isFileURI = (filename) => filename.startsWith('file://');\n// end include: URIUtils.js\n// include: runtime_exceptions.js\n// end include: runtime_exceptions.js\nfunction findWasmBinary() {\n if (Module['locateFile']) {\n var f = 'postgres.wasm';\n if (!isDataURI(f)) {\n return locateFile(f);\n }\n return f;\n }\n // Use bundler-friendly `new URL(..., import.meta.url)` pattern; works in browsers too.\n return new URL('postgres.wasm', import.meta.url).href;\n}\n\nvar wasmBinaryFile;\n\nfunction getBinarySync(file) {\n if (file == wasmBinaryFile && wasmBinary) {\n return new Uint8Array(wasmBinary);\n }\n if (readBinary) {\n return readBinary(file);\n }\n throw 'both async and sync fetching of the wasm failed';\n}\n\nfunction getBinaryPromise(binaryFile) {\n // If we don't have the binary yet, load it asynchronously using readAsync.\n if (!wasmBinary\n ) {\n // Fetch the binary using readAsync\n return readAsync(binaryFile).then(\n (response) => new Uint8Array(/** @type{!ArrayBuffer} */(response)),\n // Fall back to getBinarySync if readAsync fails\n () => getBinarySync(binaryFile)\n );\n }\n\n // Otherwise, getBinarySync should be able to get it synchronously\n return Promise.resolve().then(() => getBinarySync(binaryFile));\n}\n\nfunction instantiateArrayBuffer(binaryFile, imports, receiver) {\n return getBinaryPromise(binaryFile).then((binary) => {\n return WebAssembly.instantiate(binary, imports);\n }).then(receiver, (reason) => {\n err(`failed to asynchronously prepare wasm: ${reason}`);\n\n abort(reason);\n });\n}\n\nfunction instantiateAsync(binary, binaryFile, imports, callback) {\n if (!binary &&\n typeof WebAssembly.instantiateStreaming == 'function' &&\n !isDataURI(binaryFile) &&\n // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously.\n !isFileURI(binaryFile) &&\n // Avoid instantiateStreaming() on Node.js environment for now, as while\n // Node.js v18.1.0 implements it, it does not have a full fetch()\n // implementation yet.\n //\n // Reference:\n // https://github.com/emscripten-core/emscripten/pull/16917\n !ENVIRONMENT_IS_NODE &&\n typeof fetch == 'function') {\n return fetch(binaryFile, { credentials: 'same-origin' }).then((response) => {\n // Suppress closure warning here since the upstream definition for\n // instantiateStreaming only allows Promise rather than\n // an actual Response.\n // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure is fixed.\n /** @suppress {checkTypes} */\n var result = WebAssembly.instantiateStreaming(response, imports);\n\n return result.then(\n callback,\n function(reason) {\n // We expect the most common failure cause to be a bad MIME type for the binary,\n // in which case falling back to ArrayBuffer instantiation should work.\n err(`wasm streaming compile failed: ${reason}`);\n err('falling back to ArrayBuffer instantiation');\n return instantiateArrayBuffer(binaryFile, imports, callback);\n });\n });\n }\n return instantiateArrayBuffer(binaryFile, imports, callback);\n}\n\nfunction getWasmImports() {\n // prepare imports\n return {\n 'env': wasmImports,\n 'wasi_snapshot_preview1': wasmImports,\n 'GOT.mem': new Proxy(wasmImports, GOTHandler),\n 'GOT.func': new Proxy(wasmImports, GOTHandler),\n }\n}\n\n// Create the wasm instance.\n// Receives the wasm imports, returns the exports.\nfunction createWasm() {\n var info = getWasmImports();\n // Load the wasm module and create an instance of using native support in the JS engine.\n // handle a generated wasm instance, receiving its exports and\n // performing other necessary setup\n /** @param {WebAssembly.Module=} module*/\n function receiveInstance(instance, module) {\n wasmExports = instance.exports;\n\n wasmExports = relocateExports(wasmExports, 67108864);\n\n var metadata = getDylinkMetadata(module);\n if (metadata.neededDynlibs) {\n dynamicLibraries = metadata.neededDynlibs.concat(dynamicLibraries);\n }\n mergeLibSymbols(wasmExports, 'main')\n LDSO.init();\n loadDylibs();\n\n \n\n addOnInit(wasmExports['__wasm_call_ctors']);\n\n __RELOC_FUNCS__.push(wasmExports['__wasm_apply_data_relocs']);\n\n removeRunDependency('wasm-instantiate');\n return wasmExports;\n }\n // wait for the pthread pool (if any)\n addRunDependency('wasm-instantiate');\n\n // Prefer streaming instantiation if available.\n function receiveInstantiationResult(result) {\n // 'result' is a ResultObject object which has both the module and instance.\n // receiveInstance() will swap in the exports (to Module.asm) so they can be called\n receiveInstance(result['instance'], result['module']);\n }\n\n // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback\n // to manually instantiate the Wasm module themselves. This allows pages to\n // run the instantiation parallel to any other async startup actions they are\n // performing.\n // Also pthreads and wasm workers initialize the wasm instance through this\n // path.\n if (Module['instantiateWasm']) {\n try {\n return Module['instantiateWasm'](info, receiveInstance);\n } catch(e) {\n err(`Module.instantiateWasm callback failed with error: ${e}`);\n // If instantiation fails, reject the module ready promise.\n readyPromiseReject(e);\n }\n }\n\n wasmBinaryFile ??= findWasmBinary();\n\n // If instantiation fails, reject the module ready promise.\n instantiateAsync(wasmBinary, wasmBinaryFile, info, receiveInstantiationResult).catch(readyPromiseReject);\n return {}; // no exports yet; we'll fill them in later\n}\n\n// include: runtime_debug.js\n// end include: runtime_debug.js\n// === Body ===\n\nvar ASM_CONSTS = {\n 69124608: ($0) => { Module.is_worker = (typeof WorkerGlobalScope !== 'undefined') && self instanceof WorkerGlobalScope; Module.FD_BUFFER_MAX = $0; Module.emscripten_copy_to = console.warn; }, \n 69124781: () => { Module['postMessage'] = function custom_postMessage(event) { console.log(\"# 1252: onCustomMessage:\",__FILE__, event); }; }, \n 69124906: () => { if (Module.is_worker) { function onCustomMessage(event) { console.log(\"onCustomMessage:\", event); }; Module['onCustomMessage'] = onCustomMessage; } else { Module['postMessage'] = function custom_postMessage(event) { switch (event.type) { case \"raw\" : { stringToUTF8( event.data, shm_rawinput, Module.FD_BUFFER_MAX); break; } case \"stdin\" : { stringToUTF8( event.data, 1, Module.FD_BUFFER_MAX); break; } case \"rcon\" : { stringToUTF8( event.data, shm_rcon, Module.FD_BUFFER_MAX); break; } default : console.warn(\"custom_postMessage?\", event); } }; }; }\n};\nfunction peek_fd(fd) { return test_data.length; }\nfunction fnc_getfd(fd) { return fnc_stdin() }\nfunction is_web_env() { try { if (window) return 1; } catch(x) {return 0} }\nis_web_env.sig = 'i';\n\n// end include: preamble.js\n\n\n /** @constructor */\n function ExitStatus(status) {\n this.name = 'ExitStatus';\n this.message = `Program terminated with exit(${status})`;\n this.status = status;\n }\n\n var GOT = {\n };\n \n var currentModuleWeakSymbols = new Set([]);\n var GOTHandler = {\n get(obj, symName) {\n var rtn = GOT[symName];\n if (!rtn) {\n rtn = GOT[symName] = new WebAssembly.Global({'value': 'i32', 'mutable': true});\n }\n if (!currentModuleWeakSymbols.has(symName)) {\n // Any non-weak reference to a symbol marks it as `required`, which\n // enabled `reportUndefinedSymbols` to report undefeind symbol errors\n // correctly.\n rtn.required = true;\n }\n return rtn;\n },\n };\n\n var callRuntimeCallbacks = (callbacks) => {\n while (callbacks.length > 0) {\n // Pass the module as the first argument.\n callbacks.shift()(Module);\n }\n };\n\n var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined;\n \n /**\n * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given\n * array that contains uint8 values, returns a copy of that string as a\n * Javascript String object.\n * heapOrArray is either a regular array, or a JavaScript typed array view.\n * @param {number} idx\n * @param {number=} maxBytesToRead\n * @return {string}\n */\n var UTF8ArrayToString = (heapOrArray, idx, maxBytesToRead) => {\n var endIdx = idx + maxBytesToRead;\n var endPtr = idx;\n // TextDecoder needs to know the byte length in advance, it doesn't stop on\n // null terminator by itself. Also, use the length info to avoid running tiny\n // strings through TextDecoder, since .subarray() allocates garbage.\n // (As a tiny code save trick, compare endPtr against endIdx using a negation,\n // so that undefined means Infinity)\n while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;\n \n if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {\n return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));\n }\n var str = '';\n // If building with TextDecoder, we have already computed the string length\n // above, so test loop end condition against that\n while (idx < endPtr) {\n // For UTF8 byte structure, see:\n // http://en.wikipedia.org/wiki/UTF-8#Description\n // https://www.ietf.org/rfc/rfc2279.txt\n // https://tools.ietf.org/html/rfc3629\n var u0 = heapOrArray[idx++];\n if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }\n var u1 = heapOrArray[idx++] & 63;\n if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }\n var u2 = heapOrArray[idx++] & 63;\n if ((u0 & 0xF0) == 0xE0) {\n u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\n } else {\n u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63);\n }\n \n if (u0 < 0x10000) {\n str += String.fromCharCode(u0);\n } else {\n var ch = u0 - 0x10000;\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\n }\n }\n return str;\n };\n var getDylinkMetadata = (binary) => {\n var offset = 0;\n var end = 0;\n \n function getU8() {\n return binary[offset++];\n }\n \n function getLEB() {\n var ret = 0;\n var mul = 1;\n while (1) {\n var byte = binary[offset++];\n ret += ((byte & 0x7f) * mul);\n mul *= 0x80;\n if (!(byte & 0x80)) break;\n }\n return ret;\n }\n \n function getString() {\n var len = getLEB();\n offset += len;\n return UTF8ArrayToString(binary, offset - len, len);\n }\n \n /** @param {string=} message */\n function failIf(condition, message) {\n if (condition) throw new Error(message);\n }\n \n var name = 'dylink.0';\n if (binary instanceof WebAssembly.Module) {\n var dylinkSection = WebAssembly.Module.customSections(binary, name);\n if (dylinkSection.length === 0) {\n name = 'dylink'\n dylinkSection = WebAssembly.Module.customSections(binary, name);\n }\n failIf(dylinkSection.length === 0, 'need dylink section');\n binary = new Uint8Array(dylinkSection[0]);\n end = binary.length\n } else {\n var int32View = new Uint32Array(new Uint8Array(binary.subarray(0, 24)).buffer);\n var magicNumberFound = int32View[0] == 0x6d736100;\n failIf(!magicNumberFound, 'need to see wasm magic number'); // \\0asm\n // we should see the dylink custom section right after the magic number and wasm version\n failIf(binary[8] !== 0, 'need the dylink section to be first')\n offset = 9;\n var section_size = getLEB(); //section size\n end = offset + section_size;\n name = getString();\n }\n \n var customSection = { neededDynlibs: [], tlsExports: new Set(), weakImports: new Set() };\n if (name == 'dylink') {\n customSection.memorySize = getLEB();\n customSection.memoryAlign = getLEB();\n customSection.tableSize = getLEB();\n customSection.tableAlign = getLEB();\n // shared libraries this module needs. We need to load them first, so that\n // current module could resolve its imports. (see tools/shared.py\n // WebAssembly.make_shared_library() for \"dylink\" section extension format)\n var neededDynlibsCount = getLEB();\n for (var i = 0; i < neededDynlibsCount; ++i) {\n var libname = getString();\n customSection.neededDynlibs.push(libname);\n }\n } else {\n failIf(name !== 'dylink.0');\n var WASM_DYLINK_MEM_INFO = 0x1;\n var WASM_DYLINK_NEEDED = 0x2;\n var WASM_DYLINK_EXPORT_INFO = 0x3;\n var WASM_DYLINK_IMPORT_INFO = 0x4;\n var WASM_SYMBOL_TLS = 0x100;\n var WASM_SYMBOL_BINDING_MASK = 0x3;\n var WASM_SYMBOL_BINDING_WEAK = 0x1;\n while (offset < end) {\n var subsectionType = getU8();\n var subsectionSize = getLEB();\n if (subsectionType === WASM_DYLINK_MEM_INFO) {\n customSection.memorySize = getLEB();\n customSection.memoryAlign = getLEB();\n customSection.tableSize = getLEB();\n customSection.tableAlign = getLEB();\n } else if (subsectionType === WASM_DYLINK_NEEDED) {\n var neededDynlibsCount = getLEB();\n for (var i = 0; i < neededDynlibsCount; ++i) {\n libname = getString();\n customSection.neededDynlibs.push(libname);\n }\n } else if (subsectionType === WASM_DYLINK_EXPORT_INFO) {\n var count = getLEB();\n while (count--) {\n var symname = getString();\n var flags = getLEB();\n if (flags & WASM_SYMBOL_TLS) {\n customSection.tlsExports.add(symname);\n }\n }\n } else if (subsectionType === WASM_DYLINK_IMPORT_INFO) {\n var count = getLEB();\n while (count--) {\n var modname = getString();\n var symname = getString();\n var flags = getLEB();\n if ((flags & WASM_SYMBOL_BINDING_MASK) == WASM_SYMBOL_BINDING_WEAK) {\n customSection.weakImports.add(symname);\n }\n }\n } else {\n // unknown subsection\n offset += subsectionSize;\n }\n }\n }\n \n return customSection;\n };\n\n \n /**\n * @param {number} ptr\n * @param {string} type\n */\n function getValue(ptr, type = 'i8') {\n if (type.endsWith('*')) type = '*';\n switch (type) {\n case 'i1': return HEAP8[ptr];\n case 'i8': return HEAP8[ptr];\n case 'i16': return HEAP16[((ptr)>>1)];\n case 'i32': return HEAP32[((ptr)>>2)];\n case 'i64': return HEAP64[((ptr)>>3)];\n case 'float': return HEAPF32[((ptr)>>2)];\n case 'double': return HEAPF64[((ptr)>>3)];\n case '*': return HEAPU32[((ptr)>>2)];\n default: abort(`invalid type for getValue: ${type}`);\n }\n }\n\n var newDSO = (name, handle, syms) => {\n var dso = {\n refcount: Infinity,\n name,\n exports: syms,\n global: true,\n };\n LDSO.loadedLibsByName[name] = dso;\n if (handle != undefined) {\n LDSO.loadedLibsByHandle[handle] = dso;\n }\n return dso;\n };\n var LDSO = {\n loadedLibsByName:{\n },\n loadedLibsByHandle:{\n },\n init() {\n newDSO('__main__', 0, wasmImports);\n },\n };\n \n \n \n var ___heap_base = 73476080;\n \n var alignMemory = (size, alignment) => {\n return Math.ceil(size / alignment) * alignment;\n };\n \n var getMemory = (size) => {\n // After the runtime is initialized, we must only use sbrk() normally.\n if (runtimeInitialized) {\n // Currently we don't support freeing of static data when modules are\n // unloaded via dlclose. This function is tagged as `noleakcheck` to\n // avoid having this reported as leak.\n return _calloc(size, 1);\n }\n var ret = ___heap_base;\n // Keep __heap_base stack aligned.\n var end = ret + alignMemory(size, 16);\n ___heap_base = end;\n GOT['__heap_base'].value = end;\n return ret;\n };\n \n \n var isInternalSym = (symName) => {\n // TODO: find a way to mark these in the binary or avoid exporting them.\n return [\n '__cpp_exception',\n '__c_longjmp',\n '__wasm_apply_data_relocs',\n '__dso_handle',\n '__tls_size',\n '__tls_align',\n '__set_stack_limits',\n '_emscripten_tls_init',\n '__wasm_init_tls',\n '__wasm_call_ctors',\n '__start_em_asm',\n '__stop_em_asm',\n '__start_em_js',\n '__stop_em_js',\n ].includes(symName) || symName.startsWith('__em_js__')\n ;\n };\n \n var uleb128Encode = (n, target) => {\n if (n < 128) {\n target.push(n);\n } else {\n target.push((n % 128) | 128, n >> 7);\n }\n };\n \n var sigToWasmTypes = (sig) => {\n var typeNames = {\n 'i': 'i32',\n 'j': 'i64',\n 'f': 'f32',\n 'd': 'f64',\n 'e': 'externref',\n 'p': 'i32',\n };\n var type = {\n parameters: [],\n results: sig[0] == 'v' ? [] : [typeNames[sig[0]]]\n };\n for (var i = 1; i < sig.length; ++i) {\n type.parameters.push(typeNames[sig[i]]);\n }\n return type;\n };\n \n var generateFuncType = (sig, target) => {\n var sigRet = sig.slice(0, 1);\n var sigParam = sig.slice(1);\n var typeCodes = {\n 'i': 0x7f, // i32\n 'p': 0x7f, // i32\n 'j': 0x7e, // i64\n 'f': 0x7d, // f32\n 'd': 0x7c, // f64\n 'e': 0x6f, // externref\n };\n \n // Parameters, length + signatures\n target.push(0x60 /* form: func */);\n uleb128Encode(sigParam.length, target);\n for (var i = 0; i < sigParam.length; ++i) {\n target.push(typeCodes[sigParam[i]]);\n }\n \n // Return values, length + signatures\n // With no multi-return in MVP, either 0 (void) or 1 (anything else)\n if (sigRet == 'v') {\n target.push(0x00);\n } else {\n target.push(0x01, typeCodes[sigRet]);\n }\n };\n var convertJsFunctionToWasm = (func, sig) => {\n \n // If the type reflection proposal is available, use the new\n // \"WebAssembly.Function\" constructor.\n // Otherwise, construct a minimal wasm module importing the JS function and\n // re-exporting it.\n if (typeof WebAssembly.Function == \"function\") {\n return new WebAssembly.Function(sigToWasmTypes(sig), func);\n }\n \n // The module is static, with the exception of the type section, which is\n // generated based on the signature passed in.\n var typeSectionBody = [\n 0x01, // count: 1\n ];\n generateFuncType(sig, typeSectionBody);\n \n // Rest of the module is static\n var bytes = [\n 0x00, 0x61, 0x73, 0x6d, // magic (\"\\0asm\")\n 0x01, 0x00, 0x00, 0x00, // version: 1\n 0x01, // Type section code\n ];\n // Write the overall length of the type section followed by the body\n uleb128Encode(typeSectionBody.length, bytes);\n bytes.push(...typeSectionBody);\n \n // The rest of the module is static\n bytes.push(\n 0x02, 0x07, // import section\n // (import \"e\" \"f\" (func 0 (type 0)))\n 0x01, 0x01, 0x65, 0x01, 0x66, 0x00, 0x00,\n 0x07, 0x05, // export section\n // (export \"f\" (func 0 (type 0)))\n 0x01, 0x01, 0x66, 0x00, 0x00,\n );\n \n // We can compile this wasm module synchronously because it is very small.\n // This accepts an import (at \"e.f\"), that it reroutes to an export (at \"f\")\n var module = new WebAssembly.Module(new Uint8Array(bytes));\n var instance = new WebAssembly.Instance(module, { 'e': { 'f': func } });\n var wrappedFunc = instance.exports['f'];\n return wrappedFunc;\n };\n \n var wasmTableMirror = [];\n \n /** @type {WebAssembly.Table} */\n var wasmTable = new WebAssembly.Table({\n 'initial': 5358,\n 'element': 'anyfunc'\n });\n ;\n var getWasmTableEntry = (funcPtr) => {\n var func = wasmTableMirror[funcPtr];\n if (!func) {\n if (funcPtr >= wasmTableMirror.length) wasmTableMirror.length = funcPtr + 1;\n wasmTableMirror[funcPtr] = func = wasmTable.get(funcPtr);\n }\n return func;\n };\n \n var updateTableMap = (offset, count) => {\n if (functionsInTableMap) {\n for (var i = offset; i < offset + count; i++) {\n var item = getWasmTableEntry(i);\n // Ignore null values.\n if (item) {\n functionsInTableMap.set(item, i);\n }\n }\n }\n };\n \n var functionsInTableMap;\n \n var getFunctionAddress = (func) => {\n // First, create the map if this is the first use.\n if (!functionsInTableMap) {\n functionsInTableMap = new WeakMap();\n updateTableMap(0, wasmTable.length);\n }\n return functionsInTableMap.get(func) || 0;\n };\n \n \n var freeTableIndexes = [];\n \n var getEmptyTableSlot = () => {\n // Reuse a free index if there is one, otherwise grow.\n if (freeTableIndexes.length) {\n return freeTableIndexes.pop();\n }\n // Grow the table\n try {\n wasmTable.grow(1);\n } catch (err) {\n if (!(err instanceof RangeError)) {\n throw err;\n }\n throw 'Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.';\n }\n return wasmTable.length - 1;\n };\n \n \n \n var setWasmTableEntry = (idx, func) => {\n wasmTable.set(idx, func);\n // With ABORT_ON_WASM_EXCEPTIONS wasmTable.get is overridden to return wrapped\n // functions so we need to call it here to retrieve the potential wrapper correctly\n // instead of just storing 'func' directly into wasmTableMirror\n wasmTableMirror[idx] = wasmTable.get(idx);\n };\n \n /** @param {string=} sig */\n var addFunction = (func, sig) => {\n // Check if the function is already in the table, to ensure each function\n // gets a unique index.\n var rtn = getFunctionAddress(func);\n if (rtn) {\n return rtn;\n }\n \n // It's not in the table, add it now.\n \n var ret = getEmptyTableSlot();\n \n // Set the new value.\n try {\n // Attempting to call this with JS function will cause of table.set() to fail\n setWasmTableEntry(ret, func);\n } catch (err) {\n if (!(err instanceof TypeError)) {\n throw err;\n }\n var wrapped = convertJsFunctionToWasm(func, sig);\n setWasmTableEntry(ret, wrapped);\n }\n \n functionsInTableMap.set(func, ret);\n \n return ret;\n };\n \n var updateGOT = (exports, replace) => {\n for (var symName in exports) {\n if (isInternalSym(symName)) {\n continue;\n }\n \n var value = exports[symName];\n \n GOT[symName] ||= new WebAssembly.Global({'value': 'i32', 'mutable': true});\n if (replace || GOT[symName].value == 0) {\n if (typeof value == 'function') {\n GOT[symName].value = addFunction(value);\n } else if (typeof value == 'number') {\n GOT[symName].value = value;\n } else {\n err(`unhandled export type for '${symName}': ${typeof value}`);\n }\n }\n }\n };\n /** @param {boolean=} replace */\n var relocateExports = (exports, memoryBase, replace) => {\n var relocated = {};\n \n for (var e in exports) {\n var value = exports[e];\n if (typeof value == 'object') {\n // a breaking change in the wasm spec, globals are now objects\n // https://github.com/WebAssembly/mutable-global/issues/1\n value = value.value;\n }\n if (typeof value == 'number') {\n value += memoryBase;\n }\n relocated[e] = value;\n }\n updateGOT(relocated, replace);\n return relocated;\n };\n \n var isSymbolDefined = (symName) => {\n // Ignore 'stub' symbols that are auto-generated as part of the original\n // `wasmImports` used to instantiate the main module.\n var existing = wasmImports[symName];\n if (!existing || existing.stub) {\n return false;\n }\n return true;\n };\n \n var dynCall = (sig, ptr, args = []) => {\n var rtn = getWasmTableEntry(ptr)(...args);\n return rtn;\n };\n \n \n var stackSave = () => _emscripten_stack_get_current();\n \n var stackRestore = (val) => __emscripten_stack_restore(val);\n var createInvokeFunction = (sig) => (ptr, ...args) => {\n var sp = stackSave();\n try {\n return dynCall(sig, ptr, args);\n } catch(e) {\n stackRestore(sp);\n // Create a try-catch guard that rethrows the Emscripten EH exception.\n // Exceptions thrown from C++ will be a pointer (number) and longjmp\n // will throw the number Infinity. Use the compact and fast \"e !== e+0\"\n // test to check if e was not a Number.\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n // In theory this if statement could be done on\n // creating the function, but I just added this to\n // save wasting code space as it only happens on exception.\n if (sig[0] == \"j\") return 0n;\n }\n };\n var resolveGlobalSymbol = (symName, direct = false) => {\n var sym;\n if (isSymbolDefined(symName)) {\n sym = wasmImports[symName];\n }\n // Asm.js-style exception handling: invoke wrapper generation\n else if (symName.startsWith('invoke_')) {\n // Create (and cache) new invoke_ functions on demand.\n sym = wasmImports[symName] = createInvokeFunction(symName.split('_')[1]);\n }\n return {sym, name: symName};\n };\n \n \n \n \n \n \n \n \n /**\n * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the\n * emscripten HEAP, returns a copy of that string as a Javascript String object.\n *\n * @param {number} ptr\n * @param {number=} maxBytesToRead - An optional length that specifies the\n * maximum number of bytes to read. You can omit this parameter to scan the\n * string until the first 0 byte. If maxBytesToRead is passed, and the string\n * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the\n * string will cut short at that byte index (i.e. maxBytesToRead will not\n * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing\n * frequent uses of UTF8ToString() with and without maxBytesToRead may throw\n * JS JIT optimizations off, so it is worth to consider consistently using one\n * @return {string}\n */\n var UTF8ToString = (ptr, maxBytesToRead) => {\n return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';\n };\n \n /**\n * @param {string=} libName\n * @param {Object=} localScope\n * @param {number=} handle\n */\n var loadWebAssemblyModule = (binary, flags, libName, localScope, handle) => {\n var metadata = getDylinkMetadata(binary);\n currentModuleWeakSymbols = metadata.weakImports;\n \n // loadModule loads the wasm module after all its dependencies have been loaded.\n // can be called both sync/async.\n function loadModule() {\n // The first thread to load a given module needs to allocate the static\n // table and memory regions. Later threads re-use the same table region\n // and can ignore the memory region (since memory is shared between\n // threads already).\n // If `handle` is specified than it is assumed that the calling thread has\n // exclusive access to it for the duration of this function. See the\n // locking in `dynlink.c`.\n var firstLoad = !handle || !HEAP8[(handle)+(8)];\n if (firstLoad) {\n // alignments are powers of 2\n var memAlign = Math.pow(2, metadata.memoryAlign);\n // prepare memory\n var memoryBase = metadata.memorySize ? alignMemory(getMemory(metadata.memorySize + memAlign), memAlign) : 0; // TODO: add to cleanups\n var tableBase = metadata.tableSize ? wasmTable.length : 0;\n if (handle) {\n HEAP8[(handle)+(8)] = 1;\n HEAPU32[(((handle)+(12))>>2)] = memoryBase;\n HEAP32[(((handle)+(16))>>2)] = metadata.memorySize;\n HEAPU32[(((handle)+(20))>>2)] = tableBase;\n HEAP32[(((handle)+(24))>>2)] = metadata.tableSize;\n }\n } else {\n memoryBase = HEAPU32[(((handle)+(12))>>2)];\n tableBase = HEAPU32[(((handle)+(20))>>2)];\n }\n \n var tableGrowthNeeded = tableBase + metadata.tableSize - wasmTable.length;\n if (tableGrowthNeeded > 0) {\n wasmTable.grow(tableGrowthNeeded);\n }\n \n // This is the export map that we ultimately return. We declare it here\n // so it can be used within resolveSymbol. We resolve symbols against\n // this local symbol map in the case there they are not present on the\n // global Module object. We need this fallback because Modules sometime\n // need to import their own symbols\n var moduleExports;\n \n function resolveSymbol(sym) {\n var resolved = resolveGlobalSymbol(sym).sym;\n if (!resolved && localScope) {\n resolved = localScope[sym];\n }\n if (!resolved) {\n resolved = moduleExports[sym];\n }\n return resolved;\n }\n \n // TODO kill ↓↓↓ (except \"symbols local to this module\", it will likely be\n // not needed if we require that if A wants symbols from B it has to link\n // to B explicitly: similarly to -Wl,--no-undefined)\n //\n // wasm dynamic libraries are pure wasm, so they cannot assist in\n // their own loading. When side module A wants to import something\n // provided by a side module B that is loaded later, we need to\n // add a layer of indirection, but worse, we can't even tell what\n // to add the indirection for, without inspecting what A's imports\n // are. To do that here, we use a JS proxy (another option would\n // be to inspect the binary directly).\n var proxyHandler = {\n get(stubs, prop) {\n // symbols that should be local to this module\n switch (prop) {\n case '__memory_base':\n return memoryBase;\n case '__table_base':\n return tableBase;\n }\n if (prop in wasmImports && !wasmImports[prop].stub) {\n // No stub needed, symbol already exists in symbol table\n return wasmImports[prop];\n }\n // Return a stub function that will resolve the symbol\n // when first called.\n if (!(prop in stubs)) {\n var resolved;\n stubs[prop] = (...args) => {\n resolved ||= resolveSymbol(prop);\n return resolved(...args);\n };\n }\n return stubs[prop];\n }\n };\n var proxy = new Proxy({}, proxyHandler);\n var info = {\n 'GOT.mem': new Proxy({}, GOTHandler),\n 'GOT.func': new Proxy({}, GOTHandler),\n 'env': proxy,\n 'wasi_snapshot_preview1': proxy,\n };\n \n function postInstantiation(module, instance) {\n // add new entries to functionsInTableMap\n updateTableMap(tableBase, metadata.tableSize);\n moduleExports = relocateExports(instance.exports, memoryBase);\n if (!flags.allowUndefined) {\n reportUndefinedSymbols();\n }\n \n function addEmAsm(addr, body) {\n var args = [];\n var arity = 0;\n for (; arity < 16; arity++) {\n if (body.indexOf('$' + arity) != -1) {\n args.push('$' + arity);\n } else {\n break;\n }\n }\n args = args.join(',');\n var func = `(${args}) => { ${body} };`;\n ASM_CONSTS[start] = eval(func);\n }\n \n // Add any EM_ASM function that exist in the side module\n if ('__start_em_asm' in moduleExports) {\n var start = moduleExports['__start_em_asm'];\n var stop = moduleExports['__stop_em_asm'];\n \n \n while (start < stop) {\n var jsString = UTF8ToString(start);\n addEmAsm(start, jsString);\n start = HEAPU8.indexOf(0, start) + 1;\n }\n }\n \n function addEmJs(name, cSig, body) {\n // The signature here is a C signature (e.g. \"(int foo, char* bar)\").\n // See `create_em_js` in emcc.py` for the build-time version of this\n // code.\n var jsArgs = [];\n cSig = cSig.slice(1, -1)\n if (cSig != 'void') {\n cSig = cSig.split(',');\n for (var i in cSig) {\n var jsArg = cSig[i].split(' ').pop();\n jsArgs.push(jsArg.replaceAll('*', ''));\n }\n }\n var func = `(${jsArgs}) => ${body};`;\n moduleExports[name] = eval(func);\n }\n \n for (var name in moduleExports) {\n if (name.startsWith('__em_js__')) {\n var start = moduleExports[name]\n var jsString = UTF8ToString(start);\n // EM_JS strings are stored in the data section in the form\n // SIG<::>BODY.\n var parts = jsString.split('<::>');\n addEmJs(name.replace('__em_js__', ''), parts[0], parts[1]);\n delete moduleExports[name];\n }\n }\n \n // initialize the module\n var applyRelocs = moduleExports['__wasm_apply_data_relocs'];\n if (applyRelocs) {\n if (runtimeInitialized) {\n applyRelocs();\n } else {\n __RELOC_FUNCS__.push(applyRelocs);\n }\n }\n var init = moduleExports['__wasm_call_ctors'];\n if (init) {\n if (runtimeInitialized) {\n init();\n } else {\n // we aren't ready to run compiled code yet\n __ATINIT__.push(init);\n }\n }\n return moduleExports;\n }\n \n if (flags.loadAsync) {\n if (binary instanceof WebAssembly.Module) {\n var instance = new WebAssembly.Instance(binary, info);\n return Promise.resolve(postInstantiation(binary, instance));\n }\n return WebAssembly.instantiate(binary, info).then(\n (result) => postInstantiation(result.module, result.instance)\n );\n }\n \n var module = binary instanceof WebAssembly.Module ? binary : new WebAssembly.Module(binary);\n var instance = new WebAssembly.Instance(module, info);\n return postInstantiation(module, instance);\n }\n \n // now load needed libraries and the module itself.\n if (flags.loadAsync) {\n return metadata.neededDynlibs\n .reduce((chain, dynNeeded) => chain.then(() =>\n loadDynamicLibrary(dynNeeded, flags, localScope)\n ), Promise.resolve())\n .then(loadModule);\n }\n \n metadata.neededDynlibs.forEach((needed) => loadDynamicLibrary(needed, flags, localScope));\n return loadModule();\n };\n \n \n var mergeLibSymbols = (exports, libName) => {\n // add symbols into global namespace TODO: weak linking etc.\n for (var [sym, exp] of Object.entries(exports)) {\n \n // When RTLD_GLOBAL is enabled, the symbols defined by this shared object\n // will be made available for symbol resolution of subsequently loaded\n // shared objects.\n //\n // We should copy the symbols (which include methods and variables) from\n // SIDE_MODULE to MAIN_MODULE.\n const setImport = (target) => {\n if (!isSymbolDefined(target)) {\n wasmImports[target] = exp;\n }\n }\n setImport(sym);\n \n // Special case for handling of main symbol: If a side module exports\n // `main` that also acts a definition for `__main_argc_argv` and vice\n // versa.\n const main_alias = '__main_argc_argv';\n if (sym == 'main') {\n setImport(main_alias)\n }\n if (sym == main_alias) {\n setImport('main')\n }\n }\n };\n \n \n /** @param {boolean=} noRunDep */\n var asyncLoad = (url, onload, onerror, noRunDep) => {\n var dep = !noRunDep ? getUniqueRunDependency(`al ${url}`) : '';\n readAsync(url).then(\n (arrayBuffer) => {\n onload(new Uint8Array(arrayBuffer));\n if (dep) removeRunDependency(dep);\n },\n (err) => {\n if (onerror) {\n onerror();\n } else {\n throw `Loading data file \"${url}\" failed.`;\n }\n }\n );\n if (dep) addRunDependency(dep);\n };\n \n var preloadPlugins = Module['preloadPlugins'] || [];\n var registerWasmPlugin = () => {\n // Use string keys here to avoid minification since the plugin consumer\n // also uses string keys.\n var wasmPlugin = {\n 'promiseChainEnd': Promise.resolve(),\n 'canHandle': (name) => {\n return !Module['noWasmDecoding'] && name.endsWith('.so')\n },\n 'handle': (byteArray, name, onload, onerror) => {\n // loadWebAssemblyModule can not load modules out-of-order, so rather\n // than just running the promises in parallel, this makes a chain of\n // promises to run in series.\n wasmPlugin['promiseChainEnd'] = wasmPlugin['promiseChainEnd'].then(\n () => loadWebAssemblyModule(byteArray, {loadAsync: true, nodelete: true}, name, {})).then(\n (exports) => {\n preloadedWasm[name] = exports;\n onload(byteArray);\n },\n (error) => {\n err(`failed to instantiate wasm: ${name}: ${error}`);\n onerror();\n });\n }\n };\n preloadPlugins.push(wasmPlugin);\n };\n var preloadedWasm = {\n };\n \n /**\n * @param {number=} handle\n * @param {Object=} localScope\n */\n function loadDynamicLibrary(libName, flags = {global: true, nodelete: true}, localScope, handle) {\n // when loadDynamicLibrary did not have flags, libraries were loaded\n // globally & permanently\n \n var dso = LDSO.loadedLibsByName[libName];\n if (dso) {\n // the library is being loaded or has been loaded already.\n if (!flags.global) {\n if (localScope) {\n Object.assign(localScope, dso.exports);\n }\n } else if (!dso.global) {\n // The library was previously loaded only locally but not\n // we have a request with global=true.\n dso.global = true;\n mergeLibSymbols(dso.exports, libName)\n }\n // same for \"nodelete\"\n if (flags.nodelete && dso.refcount !== Infinity) {\n dso.refcount = Infinity;\n }\n dso.refcount++\n if (handle) {\n LDSO.loadedLibsByHandle[handle] = dso;\n }\n return flags.loadAsync ? Promise.resolve(true) : true;\n }\n \n // allocate new DSO\n dso = newDSO(libName, handle, 'loading');\n dso.refcount = flags.nodelete ? Infinity : 1;\n dso.global = flags.global;\n \n // libName -> libData\n function loadLibData() {\n \n // for wasm, we can use fetch for async, but for fs mode we can only imitate it\n if (handle) {\n var data = HEAPU32[(((handle)+(28))>>2)];\n var dataSize = HEAPU32[(((handle)+(32))>>2)];\n if (data && dataSize) {\n var libData = HEAP8.slice(data, data + dataSize);\n return flags.loadAsync ? Promise.resolve(libData) : libData;\n }\n }\n \n var libFile = locateFile(libName);\n if (flags.loadAsync) {\n return new Promise((resolve, reject) => asyncLoad(libFile, resolve, reject));\n }\n \n // load the binary synchronously\n if (!readBinary) {\n throw new Error(`${libFile}: file not found, and synchronous loading of external files is not available`);\n }\n return readBinary(libFile);\n }\n \n // libName -> exports\n function getExports() {\n // lookup preloaded cache first\n var preloaded = preloadedWasm[libName];\n if (preloaded) {\n return flags.loadAsync ? Promise.resolve(preloaded) : preloaded;\n }\n \n // module not preloaded - load lib data and create new module from it\n if (flags.loadAsync) {\n return loadLibData().then((libData) => loadWebAssemblyModule(libData, flags, libName, localScope, handle));\n }\n \n return loadWebAssemblyModule(loadLibData(), flags, libName, localScope, handle);\n }\n \n // module for lib is loaded - update the dso & global namespace\n function moduleLoaded(exports) {\n if (dso.global) {\n mergeLibSymbols(exports, libName);\n } else if (localScope) {\n Object.assign(localScope, exports);\n }\n dso.exports = exports;\n }\n \n if (flags.loadAsync) {\n return getExports().then((exports) => {\n moduleLoaded(exports);\n return true;\n });\n }\n \n moduleLoaded(getExports());\n return true;\n }\n \n \n var reportUndefinedSymbols = () => {\n for (var [symName, entry] of Object.entries(GOT)) {\n if (entry.value == 0) {\n var value = resolveGlobalSymbol(symName, true).sym;\n if (!value && !entry.required) {\n // Ignore undefined symbols that are imported as weak.\n continue;\n }\n if (typeof value == 'function') {\n /** @suppress {checkTypes} */\n entry.value = addFunction(value, value.sig);\n } else if (typeof value == 'number') {\n entry.value = value;\n } else {\n throw new Error(`bad export type for '${symName}': ${typeof value}`);\n }\n }\n }\n };\n var loadDylibs = () => {\n if (!dynamicLibraries.length) {\n reportUndefinedSymbols();\n return;\n }\n \n // Load binaries asynchronously\n addRunDependency('loadDylibs');\n dynamicLibraries\n .reduce((chain, lib) => chain.then(() =>\n loadDynamicLibrary(lib, {loadAsync: true, global: true, nodelete: true, allowUndefined: true})\n ), Promise.resolve())\n .then(() => {\n // we got them all, wonderful\n reportUndefinedSymbols();\n removeRunDependency('loadDylibs');\n });\n };\n\n\n var noExitRuntime = Module['noExitRuntime'] || true;\n\n\n\n \n /**\n * @param {number} ptr\n * @param {number} value\n * @param {string} type\n */\n function setValue(ptr, value, type = 'i8') {\n if (type.endsWith('*')) type = '*';\n switch (type) {\n case 'i1': HEAP8[ptr] = value; break;\n case 'i8': HEAP8[ptr] = value; break;\n case 'i16': HEAP16[((ptr)>>1)] = value; break;\n case 'i32': HEAP32[((ptr)>>2)] = value; break;\n case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break;\n case 'float': HEAPF32[((ptr)>>2)] = value; break;\n case 'double': HEAPF64[((ptr)>>3)] = value; break;\n case '*': HEAPU32[((ptr)>>2)] = value; break;\n default: abort(`invalid type for setValue: ${type}`);\n }\n }\n\n\n\n var ___assert_fail = (condition, filename, line, func) => {\n abort(`Assertion failed: ${UTF8ToString(condition)}, at: ` + [filename ? UTF8ToString(filename) : 'unknown filename', line, func ? UTF8ToString(func) : 'unknown function']);\n };\n ___assert_fail.sig = 'vppip';\n\n var ___call_sighandler = (fp, sig) => getWasmTableEntry(fp)(sig);\n ___call_sighandler.sig = 'vpi';\n\n\n var ___memory_base = new WebAssembly.Global({'value': 'i32', 'mutable': false}, 67108864);\n\n var ___stack_pointer = new WebAssembly.Global({'value': 'i32', 'mutable': true}, 73476080);\n\n var PATH = {\n isAbs:(path) => path.charAt(0) === '/',\n splitPath:(filename) => {\n var splitPathRe = /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\n return splitPathRe.exec(filename).slice(1);\n },\n normalizeArray:(parts, allowAboveRoot) => {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up; up--) {\n parts.unshift('..');\n }\n }\n return parts;\n },\n normalize:(path) => {\n var isAbsolute = PATH.isAbs(path),\n trailingSlash = path.substr(-1) === '/';\n // Normalize the path\n path = PATH.normalizeArray(path.split('/').filter((p) => !!p), !isAbsolute).join('/');\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n return (isAbsolute ? '/' : '') + path;\n },\n dirname:(path) => {\n var result = PATH.splitPath(path),\n root = result[0],\n dir = result[1];\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n return root + dir;\n },\n basename:(path) => {\n // EMSCRIPTEN return '/'' for '/', not an empty string\n if (path === '/') return '/';\n path = PATH.normalize(path);\n path = path.replace(/\\/$/, \"\");\n var lastSlash = path.lastIndexOf('/');\n if (lastSlash === -1) return path;\n return path.substr(lastSlash+1);\n },\n join:(...paths) => PATH.normalize(paths.join('/')),\n join2:(l, r) => PATH.normalize(l + '/' + r),\n };\n \n var initRandomFill = () => {\n if (typeof crypto == 'object' && typeof crypto['getRandomValues'] == 'function') {\n // for modern web browsers\n return (view) => crypto.getRandomValues(view);\n } else\n if (ENVIRONMENT_IS_NODE) {\n // for nodejs with or without crypto support included\n try {\n var crypto_module = require('crypto');\n var randomFillSync = crypto_module['randomFillSync'];\n if (randomFillSync) {\n // nodejs with LTS crypto support\n return (view) => crypto_module['randomFillSync'](view);\n }\n // very old nodejs with the original crypto API\n var randomBytes = crypto_module['randomBytes'];\n return (view) => (\n view.set(randomBytes(view.byteLength)),\n // Return the original view to match modern native implementations.\n view\n );\n } catch (e) {\n // nodejs doesn't have crypto support\n }\n }\n // we couldn't find a proper implementation, as Math.random() is not suitable for /dev/random, see emscripten-core/emscripten/pull/7096\n abort('initRandomDevice');\n };\n var randomFill = (view) => {\n // Lazily init on the first invocation.\n return (randomFill = initRandomFill())(view);\n };\n \n \n \n var PATH_FS = {\n resolve:(...args) => {\n var resolvedPath = '',\n resolvedAbsolute = false;\n for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? args[i] : FS.cwd();\n // Skip empty and invalid entries\n if (typeof path != 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n return ''; // an invalid portion invalidates the whole thing\n }\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = PATH.isAbs(path);\n }\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter((p) => !!p), !resolvedAbsolute).join('/');\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n },\n relative:(from, to) => {\n from = PATH_FS.resolve(from).substr(1);\n to = PATH_FS.resolve(to).substr(1);\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n return outputParts.join('/');\n },\n };\n \n \n \n var FS_stdin_getChar_buffer = [];\n \n var lengthBytesUTF8 = (str) => {\n var len = 0;\n for (var i = 0; i < str.length; ++i) {\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code\n // unit, not a Unicode code point of the character! So decode\n // UTF16->UTF32->UTF8.\n // See http://unicode.org/faq/utf_bom.html#utf16-3\n var c = str.charCodeAt(i); // possibly a lead surrogate\n if (c <= 0x7F) {\n len++;\n } else if (c <= 0x7FF) {\n len += 2;\n } else if (c >= 0xD800 && c <= 0xDFFF) {\n len += 4; ++i;\n } else {\n len += 3;\n }\n }\n return len;\n };\n \n var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {\n // Parameter maxBytesToWrite is not optional. Negative values, 0, null,\n // undefined and false each don't write out any bytes.\n if (!(maxBytesToWrite > 0))\n return 0;\n \n var startIdx = outIdx;\n var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.\n for (var i = 0; i < str.length; ++i) {\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code\n // unit, not a Unicode code point of the character! So decode\n // UTF16->UTF32->UTF8.\n // See http://unicode.org/faq/utf_bom.html#utf16-3\n // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description\n // and https://www.ietf.org/rfc/rfc2279.txt\n // and https://tools.ietf.org/html/rfc3629\n var u = str.charCodeAt(i); // possibly a lead surrogate\n if (u >= 0xD800 && u <= 0xDFFF) {\n var u1 = str.charCodeAt(++i);\n u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF);\n }\n if (u <= 0x7F) {\n if (outIdx >= endIdx) break;\n heap[outIdx++] = u;\n } else if (u <= 0x7FF) {\n if (outIdx + 1 >= endIdx) break;\n heap[outIdx++] = 0xC0 | (u >> 6);\n heap[outIdx++] = 0x80 | (u & 63);\n } else if (u <= 0xFFFF) {\n if (outIdx + 2 >= endIdx) break;\n heap[outIdx++] = 0xE0 | (u >> 12);\n heap[outIdx++] = 0x80 | ((u >> 6) & 63);\n heap[outIdx++] = 0x80 | (u & 63);\n } else {\n if (outIdx + 3 >= endIdx) break;\n heap[outIdx++] = 0xF0 | (u >> 18);\n heap[outIdx++] = 0x80 | ((u >> 12) & 63);\n heap[outIdx++] = 0x80 | ((u >> 6) & 63);\n heap[outIdx++] = 0x80 | (u & 63);\n }\n }\n // Null-terminate the pointer to the buffer.\n heap[outIdx] = 0;\n return outIdx - startIdx;\n };\n /** @type {function(string, boolean=, number=)} */\n function intArrayFromString(stringy, dontAddNull, length) {\n var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;\n var u8array = new Array(len);\n var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\n if (dontAddNull) u8array.length = numBytesWritten;\n return u8array;\n }\n var FS_stdin_getChar = () => {\n if (!FS_stdin_getChar_buffer.length) {\n var result = null;\n if (ENVIRONMENT_IS_NODE) {\n // we will read data by chunks of BUFSIZE\n var BUFSIZE = 256;\n var buf = Buffer.alloc(BUFSIZE);\n var bytesRead = 0;\n \n // For some reason we must suppress a closure warning here, even though\n // fd definitely exists on process.stdin, and is even the proper way to\n // get the fd of stdin,\n // https://github.com/nodejs/help/issues/2136#issuecomment-523649904\n // This started to happen after moving this logic out of library_tty.js,\n // so it is related to the surrounding code in some unclear manner.\n /** @suppress {missingProperties} */\n var fd = process.stdin.fd;\n \n try {\n bytesRead = fs.readSync(fd, buf, 0, BUFSIZE);\n } catch(e) {\n // Cross-platform differences: on Windows, reading EOF throws an\n // exception, but on other OSes, reading EOF returns 0. Uniformize\n // behavior by treating the EOF exception to return 0.\n if (e.toString().includes('EOF')) bytesRead = 0;\n else throw e;\n }\n \n if (bytesRead > 0) {\n result = buf.slice(0, bytesRead).toString('utf-8');\n }\n } else\n if (typeof window != 'undefined' &&\n typeof window.prompt == 'function') {\n // Browser.\n result = window.prompt('Input: '); // returns null on cancel\n if (result !== null) {\n result += '\\n';\n }\n } else\n {}\n if (!result) {\n return null;\n }\n FS_stdin_getChar_buffer = intArrayFromString(result, true);\n }\n return FS_stdin_getChar_buffer.shift();\n };\n var TTY = {\n ttys:[],\n init() {\n // https://github.com/emscripten-core/emscripten/pull/1555\n // if (ENVIRONMENT_IS_NODE) {\n // // currently, FS.init does not distinguish if process.stdin is a file or TTY\n // // device, it always assumes it's a TTY device. because of this, we're forcing\n // // process.stdin to UTF8 encoding to at least make stdin reading compatible\n // // with text files until FS.init can be refactored.\n // process.stdin.setEncoding('utf8');\n // }\n },\n shutdown() {\n // https://github.com/emscripten-core/emscripten/pull/1555\n // if (ENVIRONMENT_IS_NODE) {\n // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)?\n // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation\n // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists?\n // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle\n // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call\n // process.stdin.pause();\n // }\n },\n register(dev, ops) {\n TTY.ttys[dev] = { input: [], output: [], ops: ops };\n FS.registerDevice(dev, TTY.stream_ops);\n },\n stream_ops:{\n open(stream) {\n var tty = TTY.ttys[stream.node.rdev];\n if (!tty) {\n throw new FS.ErrnoError(43);\n }\n stream.tty = tty;\n stream.seekable = false;\n },\n close(stream) {\n // flush any pending line data\n stream.tty.ops.fsync(stream.tty);\n },\n fsync(stream) {\n stream.tty.ops.fsync(stream.tty);\n },\n read(stream, buffer, offset, length, pos /* ignored */) {\n if (!stream.tty || !stream.tty.ops.get_char) {\n throw new FS.ErrnoError(60);\n }\n var bytesRead = 0;\n for (var i = 0; i < length; i++) {\n var result;\n try {\n result = stream.tty.ops.get_char(stream.tty);\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n if (result === undefined && bytesRead === 0) {\n throw new FS.ErrnoError(6);\n }\n if (result === null || result === undefined) break;\n bytesRead++;\n buffer[offset+i] = result;\n }\n if (bytesRead) {\n stream.node.timestamp = Date.now();\n }\n return bytesRead;\n },\n write(stream, buffer, offset, length, pos) {\n if (!stream.tty || !stream.tty.ops.put_char) {\n throw new FS.ErrnoError(60);\n }\n try {\n for (var i = 0; i < length; i++) {\n stream.tty.ops.put_char(stream.tty, buffer[offset+i]);\n }\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n if (length) {\n stream.node.timestamp = Date.now();\n }\n return i;\n },\n },\n default_tty_ops:{\n get_char(tty) {\n return FS_stdin_getChar();\n },\n put_char(tty, val) {\n if (val === null || val === 10) {\n out(UTF8ArrayToString(tty.output, 0));\n tty.output = [];\n } else {\n if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle.\n }\n },\n fsync(tty) {\n if (tty.output && tty.output.length > 0) {\n out(UTF8ArrayToString(tty.output, 0));\n tty.output = [];\n }\n },\n ioctl_tcgets(tty) {\n // typical setting\n return {\n c_iflag: 25856,\n c_oflag: 5,\n c_cflag: 191,\n c_lflag: 35387,\n c_cc: [\n 0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, 0x00,\n 0x12, 0x0f, 0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n ]\n };\n },\n ioctl_tcsets(tty, optional_actions, data) {\n // currently just ignore\n return 0;\n },\n ioctl_tiocgwinsz(tty) {\n return [24, 80];\n },\n },\n default_tty1_ops:{\n put_char(tty, val) {\n if (val === null || val === 10) {\n err(UTF8ArrayToString(tty.output, 0));\n tty.output = [];\n } else {\n if (val != 0) tty.output.push(val);\n }\n },\n fsync(tty) {\n if (tty.output && tty.output.length > 0) {\n err(UTF8ArrayToString(tty.output, 0));\n tty.output = [];\n }\n },\n },\n };\n \n \n var zeroMemory = (address, size) => {\n HEAPU8.fill(0, address, address + size);\n return address;\n };\n \n var mmapAlloc = (size) => {\n size = alignMemory(size, 65536);\n var ptr = _emscripten_builtin_memalign(65536, size);\n if (!ptr) return 0;\n return zeroMemory(ptr, size);\n };\n var MEMFS = {\n ops_table:null,\n mount(mount) {\n return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);\n },\n createNode(parent, name, mode, dev) {\n if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {\n // no supported\n throw new FS.ErrnoError(63);\n }\n MEMFS.ops_table ||= {\n dir: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n lookup: MEMFS.node_ops.lookup,\n mknod: MEMFS.node_ops.mknod,\n rename: MEMFS.node_ops.rename,\n unlink: MEMFS.node_ops.unlink,\n rmdir: MEMFS.node_ops.rmdir,\n readdir: MEMFS.node_ops.readdir,\n symlink: MEMFS.node_ops.symlink\n },\n stream: {\n llseek: MEMFS.stream_ops.llseek\n }\n },\n file: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr\n },\n stream: {\n llseek: MEMFS.stream_ops.llseek,\n read: MEMFS.stream_ops.read,\n write: MEMFS.stream_ops.write,\n allocate: MEMFS.stream_ops.allocate,\n mmap: MEMFS.stream_ops.mmap,\n msync: MEMFS.stream_ops.msync\n }\n },\n link: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n readlink: MEMFS.node_ops.readlink\n },\n stream: {}\n },\n chrdev: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr\n },\n stream: FS.chrdev_stream_ops\n }\n };\n var node = FS.createNode(parent, name, mode, dev);\n if (FS.isDir(node.mode)) {\n node.node_ops = MEMFS.ops_table.dir.node;\n node.stream_ops = MEMFS.ops_table.dir.stream;\n node.contents = {};\n } else if (FS.isFile(node.mode)) {\n node.node_ops = MEMFS.ops_table.file.node;\n node.stream_ops = MEMFS.ops_table.file.stream;\n node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity.\n // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred\n // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size\n // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme.\n node.contents = null; \n } else if (FS.isLink(node.mode)) {\n node.node_ops = MEMFS.ops_table.link.node;\n node.stream_ops = MEMFS.ops_table.link.stream;\n } else if (FS.isChrdev(node.mode)) {\n node.node_ops = MEMFS.ops_table.chrdev.node;\n node.stream_ops = MEMFS.ops_table.chrdev.stream;\n }\n node.timestamp = Date.now();\n // add the new node to the parent\n if (parent) {\n parent.contents[name] = node;\n parent.timestamp = node.timestamp;\n }\n return node;\n },\n getFileDataAsTypedArray(node) {\n if (!node.contents) return new Uint8Array(0);\n if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes.\n return new Uint8Array(node.contents);\n },\n expandFileStorage(node, newCapacity) {\n var prevCapacity = node.contents ? node.contents.length : 0;\n if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough.\n // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity.\n // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to\n // avoid overshooting the allocation cap by a very large margin.\n var CAPACITY_DOUBLING_MAX = 1024 * 1024;\n newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0);\n if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding.\n var oldContents = node.contents;\n node.contents = new Uint8Array(newCapacity); // Allocate new storage.\n if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage.\n },\n resizeFileStorage(node, newSize) {\n if (node.usedBytes == newSize) return;\n if (newSize == 0) {\n node.contents = null; // Fully decommit when requesting a resize to zero.\n node.usedBytes = 0;\n } else {\n var oldContents = node.contents;\n node.contents = new Uint8Array(newSize); // Allocate new storage.\n if (oldContents) {\n node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage.\n }\n node.usedBytes = newSize;\n }\n },\n node_ops:{\n getattr(node) {\n var attr = {};\n // device numbers reuse inode numbers.\n attr.dev = FS.isChrdev(node.mode) ? node.id : 1;\n attr.ino = node.id;\n attr.mode = node.mode;\n attr.nlink = 1;\n attr.uid = 0;\n attr.gid = 0;\n attr.rdev = node.rdev;\n if (FS.isDir(node.mode)) {\n attr.size = 4096;\n } else if (FS.isFile(node.mode)) {\n attr.size = node.usedBytes;\n } else if (FS.isLink(node.mode)) {\n attr.size = node.link.length;\n } else {\n attr.size = 0;\n }\n attr.atime = new Date(node.timestamp);\n attr.mtime = new Date(node.timestamp);\n attr.ctime = new Date(node.timestamp);\n // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize),\n // but this is not required by the standard.\n attr.blksize = 4096;\n attr.blocks = Math.ceil(attr.size / attr.blksize);\n return attr;\n },\n setattr(node, attr) {\n if (attr.mode !== undefined) {\n node.mode = attr.mode;\n }\n if (attr.timestamp !== undefined) {\n node.timestamp = attr.timestamp;\n }\n if (attr.size !== undefined) {\n MEMFS.resizeFileStorage(node, attr.size);\n }\n },\n lookup(parent, name) {\n throw FS.genericErrors[44];\n },\n mknod(parent, name, mode, dev) {\n return MEMFS.createNode(parent, name, mode, dev);\n },\n rename(old_node, new_dir, new_name) {\n // if we're overwriting a directory at new_name, make sure it's empty.\n if (FS.isDir(old_node.mode)) {\n var new_node;\n try {\n new_node = FS.lookupNode(new_dir, new_name);\n } catch (e) {\n }\n if (new_node) {\n for (var i in new_node.contents) {\n throw new FS.ErrnoError(55);\n }\n }\n }\n // do the internal rewiring\n delete old_node.parent.contents[old_node.name];\n old_node.parent.timestamp = Date.now()\n old_node.name = new_name;\n new_dir.contents[new_name] = old_node;\n new_dir.timestamp = old_node.parent.timestamp;\n },\n unlink(parent, name) {\n delete parent.contents[name];\n parent.timestamp = Date.now();\n },\n rmdir(parent, name) {\n var node = FS.lookupNode(parent, name);\n for (var i in node.contents) {\n throw new FS.ErrnoError(55);\n }\n delete parent.contents[name];\n parent.timestamp = Date.now();\n },\n readdir(node) {\n var entries = ['.', '..'];\n for (var key of Object.keys(node.contents)) {\n entries.push(key);\n }\n return entries;\n },\n symlink(parent, newname, oldpath) {\n var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0);\n node.link = oldpath;\n return node;\n },\n readlink(node) {\n if (!FS.isLink(node.mode)) {\n throw new FS.ErrnoError(28);\n }\n return node.link;\n },\n },\n stream_ops:{\n read(stream, buffer, offset, length, position) {\n var contents = stream.node.contents;\n if (position >= stream.node.usedBytes) return 0;\n var size = Math.min(stream.node.usedBytes - position, length);\n if (size > 8 && contents.subarray) { // non-trivial, and typed array\n buffer.set(contents.subarray(position, position + size), offset);\n } else {\n for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i];\n }\n return size;\n },\n write(stream, buffer, offset, length, position, canOwn) {\n // If the buffer is located in main memory (HEAP), and if\n // memory can grow, we can't hold on to references of the\n // memory buffer, as they may get invalidated. That means we\n // need to do copy its contents.\n if (buffer.buffer === HEAP8.buffer) {\n canOwn = false;\n }\n \n if (!length) return 0;\n var node = stream.node;\n node.timestamp = Date.now();\n \n if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array?\n if (canOwn) {\n node.contents = buffer.subarray(offset, offset + length);\n node.usedBytes = length;\n return length;\n } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data.\n node.contents = buffer.slice(offset, offset + length);\n node.usedBytes = length;\n return length;\n } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file?\n node.contents.set(buffer.subarray(offset, offset + length), position);\n return length;\n }\n }\n \n // Appending to an existing file and we need to reallocate, or source data did not come as a typed array.\n MEMFS.expandFileStorage(node, position+length);\n if (node.contents.subarray && buffer.subarray) {\n // Use typed array write which is available.\n node.contents.set(buffer.subarray(offset, offset + length), position);\n } else {\n for (var i = 0; i < length; i++) {\n node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not.\n }\n }\n node.usedBytes = Math.max(node.usedBytes, position + length);\n return length;\n },\n llseek(stream, offset, whence) {\n var position = offset;\n if (whence === 1) {\n position += stream.position;\n } else if (whence === 2) {\n if (FS.isFile(stream.node.mode)) {\n position += stream.node.usedBytes;\n }\n }\n if (position < 0) {\n throw new FS.ErrnoError(28);\n }\n return position;\n },\n allocate(stream, offset, length) {\n MEMFS.expandFileStorage(stream.node, offset + length);\n stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length);\n },\n mmap(stream, length, position, prot, flags) {\n if (!FS.isFile(stream.node.mode)) {\n throw new FS.ErrnoError(43);\n }\n var ptr;\n var allocated;\n var contents = stream.node.contents;\n // Only make a new copy when MAP_PRIVATE is specified.\n if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) {\n // We can't emulate MAP_SHARED when the file is not backed by the\n // buffer we're mapping to (e.g. the HEAP buffer).\n allocated = false;\n ptr = contents.byteOffset;\n } else {\n allocated = true;\n ptr = mmapAlloc(length);\n if (!ptr) {\n throw new FS.ErrnoError(48);\n }\n if (contents) {\n // Try to avoid unnecessary slices.\n if (position > 0 || position + length < contents.length) {\n if (contents.subarray) {\n contents = contents.subarray(position, position + length);\n } else {\n contents = Array.prototype.slice.call(contents, position, position + length);\n }\n }\n HEAP8.set(contents, ptr);\n }\n }\n return { ptr, allocated };\n },\n msync(stream, buffer, offset, length, mmapFlags) {\n MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false);\n // should we check if bytesWritten and length are the same?\n return 0;\n },\n },\n };\n \n \n \n var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => {\n FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn);\n };\n \n var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => {\n // Ensure plugins are ready.\n if (typeof Browser != 'undefined') Browser.init();\n \n var handled = false;\n preloadPlugins.forEach((plugin) => {\n if (handled) return;\n if (plugin['canHandle'](fullname)) {\n plugin['handle'](byteArray, fullname, finish, onerror);\n handled = true;\n }\n });\n return handled;\n };\n var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => {\n // TODO we should allow people to just pass in a complete filename instead\n // of parent and name being that we just join them anyways\n var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;\n var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname\n function processData(byteArray) {\n function finish(byteArray) {\n preFinish?.();\n if (!dontCreateFile) {\n FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);\n }\n onload?.();\n removeRunDependency(dep);\n }\n if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => {\n onerror?.();\n removeRunDependency(dep);\n })) {\n return;\n }\n finish(byteArray);\n }\n addRunDependency(dep);\n if (typeof url == 'string') {\n asyncLoad(url, processData, onerror);\n } else {\n processData(url);\n }\n };\n \n var FS_modeStringToFlags = (str) => {\n var flagModes = {\n 'r': 0,\n 'r+': 2,\n 'w': 512 | 64 | 1,\n 'w+': 512 | 64 | 2,\n 'a': 1024 | 64 | 1,\n 'a+': 1024 | 64 | 2,\n };\n var flags = flagModes[str];\n if (typeof flags == 'undefined') {\n throw new Error(`Unknown file open mode: ${str}`);\n }\n return flags;\n };\n \n var FS_getMode = (canRead, canWrite) => {\n var mode = 0;\n if (canRead) mode |= 292 | 73;\n if (canWrite) mode |= 146;\n return mode;\n };\n \n \n \n \n \n \n var IDBFS = {\n dbs:{\n },\n indexedDB:() => {\n if (typeof indexedDB != 'undefined') return indexedDB;\n var ret = null;\n if (typeof window == 'object') ret = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;\n return ret;\n },\n DB_VERSION:21,\n DB_STORE_NAME:\"FILE_DATA\",\n queuePersist:(mount) => {\n function onPersistComplete() {\n if (mount.idbPersistState === 'again') startPersist(); // If a new sync request has appeared in between, kick off a new sync\n else mount.idbPersistState = 0; // Otherwise reset sync state back to idle to wait for a new sync later\n }\n function startPersist() {\n mount.idbPersistState = 'idb'; // Mark that we are currently running a sync operation\n IDBFS.syncfs(mount, /*populate:*/false, onPersistComplete);\n }\n \n if (!mount.idbPersistState) {\n // Programs typically write/copy/move multiple files in the in-memory\n // filesystem within a single app frame, so when a filesystem sync\n // command is triggered, do not start it immediately, but only after\n // the current frame is finished. This way all the modified files\n // inside the main loop tick will be batched up to the same sync.\n mount.idbPersistState = setTimeout(startPersist, 0);\n } else if (mount.idbPersistState === 'idb') {\n // There is an active IndexedDB sync operation in-flight, but we now\n // have accumulated more files to sync. We should therefore queue up\n // a new sync after the current one finishes so that all writes\n // will be properly persisted.\n mount.idbPersistState = 'again';\n }\n },\n mount:(mount) => {\n // reuse core MEMFS functionality\n var mnt = MEMFS.mount(mount);\n // If the automatic IDBFS persistence option has been selected, then automatically persist\n // all modifications to the filesystem as they occur.\n if (mount?.opts?.autoPersist) {\n mnt.idbPersistState = 0; // IndexedDB sync starts in idle state\n var memfs_node_ops = mnt.node_ops;\n mnt.node_ops = Object.assign({}, mnt.node_ops); // Clone node_ops to inject write tracking\n mnt.node_ops.mknod = (parent, name, mode, dev) => {\n var node = memfs_node_ops.mknod(parent, name, mode, dev);\n // Propagate injected node_ops to the newly created child node\n node.node_ops = mnt.node_ops;\n // Remember for each IDBFS node which IDBFS mount point they came from so we know which mount to persist on modification.\n node.idbfs_mount = mnt.mount;\n // Remember original MEMFS stream_ops for this node\n node.memfs_stream_ops = node.stream_ops;\n // Clone stream_ops to inject write tracking\n node.stream_ops = Object.assign({}, node.stream_ops);\n \n // Track all file writes\n node.stream_ops.write = (stream, buffer, offset, length, position, canOwn) => {\n // This file has been modified, we must persist IndexedDB when this file closes\n stream.node.isModified = true;\n return node.memfs_stream_ops.write(stream, buffer, offset, length, position, canOwn);\n };\n \n // Persist IndexedDB on file close\n node.stream_ops.close = (stream) => {\n var n = stream.node;\n if (n.isModified) {\n IDBFS.queuePersist(n.idbfs_mount);\n n.isModified = false;\n }\n if (n.memfs_stream_ops.close) return n.memfs_stream_ops.close(stream);\n };\n \n return node;\n };\n // Also kick off persisting the filesystem on other operations that modify the filesystem.\n mnt.node_ops.mkdir = (...args) => (IDBFS.queuePersist(mnt.mount), memfs_node_ops.mkdir(...args));\n mnt.node_ops.rmdir = (...args) => (IDBFS.queuePersist(mnt.mount), memfs_node_ops.rmdir(...args));\n mnt.node_ops.symlink = (...args) => (IDBFS.queuePersist(mnt.mount), memfs_node_ops.symlink(...args));\n mnt.node_ops.unlink = (...args) => (IDBFS.queuePersist(mnt.mount), memfs_node_ops.unlink(...args));\n mnt.node_ops.rename = (...args) => (IDBFS.queuePersist(mnt.mount), memfs_node_ops.rename(...args));\n }\n return mnt;\n },\n syncfs:(mount, populate, callback) => {\n IDBFS.getLocalSet(mount, (err, local) => {\n if (err) return callback(err);\n \n IDBFS.getRemoteSet(mount, (err, remote) => {\n if (err) return callback(err);\n \n var src = populate ? remote : local;\n var dst = populate ? local : remote;\n \n IDBFS.reconcile(src, dst, callback);\n });\n });\n },\n quit:() => {\n Object.values(IDBFS.dbs).forEach((value) => value.close());\n IDBFS.dbs = {};\n },\n getDB:(name, callback) => {\n // check the cache first\n var db = IDBFS.dbs[name];\n if (db) {\n return callback(null, db);\n }\n \n var req;\n try {\n req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION);\n } catch (e) {\n return callback(e);\n }\n if (!req) {\n return callback(\"Unable to connect to IndexedDB\");\n }\n req.onupgradeneeded = (e) => {\n var db = /** @type {IDBDatabase} */ (e.target.result);\n var transaction = e.target.transaction;\n \n var fileStore;\n \n if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) {\n fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME);\n } else {\n fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME);\n }\n \n if (!fileStore.indexNames.contains('timestamp')) {\n fileStore.createIndex('timestamp', 'timestamp', { unique: false });\n }\n };\n req.onsuccess = () => {\n db = /** @type {IDBDatabase} */ (req.result);\n \n // add to the cache\n IDBFS.dbs[name] = db;\n callback(null, db);\n };\n req.onerror = (e) => {\n callback(e.target.error);\n e.preventDefault();\n };\n },\n getLocalSet:(mount, callback) => {\n var entries = {};\n \n function isRealDir(p) {\n return p !== '.' && p !== '..';\n };\n function toAbsolute(root) {\n return (p) => PATH.join2(root, p);\n };\n \n var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));\n \n while (check.length) {\n var path = check.pop();\n var stat;\n \n try {\n stat = FS.stat(path);\n } catch (e) {\n return callback(e);\n }\n \n if (FS.isDir(stat.mode)) {\n check.push(...FS.readdir(path).filter(isRealDir).map(toAbsolute(path)));\n }\n \n entries[path] = { 'timestamp': stat.mtime };\n }\n \n return callback(null, { type: 'local', entries: entries });\n },\n getRemoteSet:(mount, callback) => {\n var entries = {};\n \n IDBFS.getDB(mount.mountpoint, (err, db) => {\n if (err) return callback(err);\n \n try {\n var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly');\n transaction.onerror = (e) => {\n callback(e.target.error);\n e.preventDefault();\n };\n \n var store = transaction.objectStore(IDBFS.DB_STORE_NAME);\n var index = store.index('timestamp');\n \n index.openKeyCursor().onsuccess = (event) => {\n var cursor = event.target.result;\n \n if (!cursor) {\n return callback(null, { type: 'remote', db, entries });\n }\n \n entries[cursor.primaryKey] = { 'timestamp': cursor.key };\n \n cursor.continue();\n };\n } catch (e) {\n return callback(e);\n }\n });\n },\n loadLocalEntry:(path, callback) => {\n var stat, node;\n \n try {\n var lookup = FS.lookupPath(path);\n node = lookup.node;\n stat = FS.stat(path);\n } catch (e) {\n return callback(e);\n }\n \n if (FS.isDir(stat.mode)) {\n return callback(null, { 'timestamp': stat.mtime, 'mode': stat.mode });\n } else if (FS.isFile(stat.mode)) {\n // Performance consideration: storing a normal JavaScript array to a IndexedDB is much slower than storing a typed array.\n // Therefore always convert the file contents to a typed array first before writing the data to IndexedDB.\n node.contents = MEMFS.getFileDataAsTypedArray(node);\n return callback(null, { 'timestamp': stat.mtime, 'mode': stat.mode, 'contents': node.contents });\n } else {\n return callback(new Error('node type not supported'));\n }\n },\n storeLocalEntry:(path, entry, callback) => {\n try {\n if (FS.isDir(entry['mode'])) {\n FS.mkdirTree(path, entry['mode']);\n } else if (FS.isFile(entry['mode'])) {\n FS.writeFile(path, entry['contents'], { canOwn: true });\n } else {\n return callback(new Error('node type not supported'));\n }\n \n FS.chmod(path, entry['mode']);\n FS.utime(path, entry['timestamp'], entry['timestamp']);\n } catch (e) {\n return callback(e);\n }\n \n callback(null);\n },\n removeLocalEntry:(path, callback) => {\n try {\n var stat = FS.stat(path);\n \n if (FS.isDir(stat.mode)) {\n FS.rmdir(path);\n } else if (FS.isFile(stat.mode)) {\n FS.unlink(path);\n }\n } catch (e) {\n return callback(e);\n }\n \n callback(null);\n },\n loadRemoteEntry:(store, path, callback) => {\n var req = store.get(path);\n req.onsuccess = (event) => callback(null, event.target.result);\n req.onerror = (e) => {\n callback(e.target.error);\n e.preventDefault();\n };\n },\n storeRemoteEntry:(store, path, entry, callback) => {\n try {\n var req = store.put(entry, path);\n } catch (e) {\n callback(e);\n return;\n }\n req.onsuccess = (event) => callback();\n req.onerror = (e) => {\n callback(e.target.error);\n e.preventDefault();\n };\n },\n removeRemoteEntry:(store, path, callback) => {\n var req = store.delete(path);\n req.onsuccess = (event) => callback();\n req.onerror = (e) => {\n callback(e.target.error);\n e.preventDefault();\n };\n },\n reconcile:(src, dst, callback) => {\n var total = 0;\n \n var create = [];\n Object.keys(src.entries).forEach((key) => {\n var e = src.entries[key];\n var e2 = dst.entries[key];\n if (!e2 || e['timestamp'].getTime() != e2['timestamp'].getTime()) {\n create.push(key);\n total++;\n }\n });\n \n var remove = [];\n Object.keys(dst.entries).forEach((key) => {\n if (!src.entries[key]) {\n remove.push(key);\n total++;\n }\n });\n \n if (!total) {\n return callback(null);\n }\n \n var errored = false;\n var db = src.type === 'remote' ? src.db : dst.db;\n var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite');\n var store = transaction.objectStore(IDBFS.DB_STORE_NAME);\n \n function done(err) {\n if (err && !errored) {\n errored = true;\n return callback(err);\n }\n };\n \n // transaction may abort if (for example) there is a QuotaExceededError\n transaction.onerror = transaction.onabort = (e) => {\n done(e.target.error);\n e.preventDefault();\n };\n \n transaction.oncomplete = (e) => {\n if (!errored) {\n callback(null);\n }\n };\n \n // sort paths in ascending order so directory entries are created\n // before the files inside them\n create.sort().forEach((path) => {\n if (dst.type === 'local') {\n IDBFS.loadRemoteEntry(store, path, (err, entry) => {\n if (err) return done(err);\n IDBFS.storeLocalEntry(path, entry, done);\n });\n } else {\n IDBFS.loadLocalEntry(path, (err, entry) => {\n if (err) return done(err);\n IDBFS.storeRemoteEntry(store, path, entry, done);\n });\n }\n });\n \n // sort paths in descending order so files are deleted before their\n // parent directories\n remove.sort().reverse().forEach((path) => {\n if (dst.type === 'local') {\n IDBFS.removeLocalEntry(path, done);\n } else {\n IDBFS.removeRemoteEntry(store, path, done);\n }\n });\n },\n };\n \n \n \n var ERRNO_CODES = {\n 'EPERM': 63,\n 'ENOENT': 44,\n 'ESRCH': 71,\n 'EINTR': 27,\n 'EIO': 29,\n 'ENXIO': 60,\n 'E2BIG': 1,\n 'ENOEXEC': 45,\n 'EBADF': 8,\n 'ECHILD': 12,\n 'EAGAIN': 6,\n 'EWOULDBLOCK': 6,\n 'ENOMEM': 48,\n 'EACCES': 2,\n 'EFAULT': 21,\n 'ENOTBLK': 105,\n 'EBUSY': 10,\n 'EEXIST': 20,\n 'EXDEV': 75,\n 'ENODEV': 43,\n 'ENOTDIR': 54,\n 'EISDIR': 31,\n 'EINVAL': 28,\n 'ENFILE': 41,\n 'EMFILE': 33,\n 'ENOTTY': 59,\n 'ETXTBSY': 74,\n 'EFBIG': 22,\n 'ENOSPC': 51,\n 'ESPIPE': 70,\n 'EROFS': 69,\n 'EMLINK': 34,\n 'EPIPE': 64,\n 'EDOM': 18,\n 'ERANGE': 68,\n 'ENOMSG': 49,\n 'EIDRM': 24,\n 'ECHRNG': 106,\n 'EL2NSYNC': 156,\n 'EL3HLT': 107,\n 'EL3RST': 108,\n 'ELNRNG': 109,\n 'EUNATCH': 110,\n 'ENOCSI': 111,\n 'EL2HLT': 112,\n 'EDEADLK': 16,\n 'ENOLCK': 46,\n 'EBADE': 113,\n 'EBADR': 114,\n 'EXFULL': 115,\n 'ENOANO': 104,\n 'EBADRQC': 103,\n 'EBADSLT': 102,\n 'EDEADLOCK': 16,\n 'EBFONT': 101,\n 'ENOSTR': 100,\n 'ENODATA': 116,\n 'ETIME': 117,\n 'ENOSR': 118,\n 'ENONET': 119,\n 'ENOPKG': 120,\n 'EREMOTE': 121,\n 'ENOLINK': 47,\n 'EADV': 122,\n 'ESRMNT': 123,\n 'ECOMM': 124,\n 'EPROTO': 65,\n 'EMULTIHOP': 36,\n 'EDOTDOT': 125,\n 'EBADMSG': 9,\n 'ENOTUNIQ': 126,\n 'EBADFD': 127,\n 'EREMCHG': 128,\n 'ELIBACC': 129,\n 'ELIBBAD': 130,\n 'ELIBSCN': 131,\n 'ELIBMAX': 132,\n 'ELIBEXEC': 133,\n 'ENOSYS': 52,\n 'ENOTEMPTY': 55,\n 'ENAMETOOLONG': 37,\n 'ELOOP': 32,\n 'EOPNOTSUPP': 138,\n 'EPFNOSUPPORT': 139,\n 'ECONNRESET': 15,\n 'ENOBUFS': 42,\n 'EAFNOSUPPORT': 5,\n 'EPROTOTYPE': 67,\n 'ENOTSOCK': 57,\n 'ENOPROTOOPT': 50,\n 'ESHUTDOWN': 140,\n 'ECONNREFUSED': 14,\n 'EADDRINUSE': 3,\n 'ECONNABORTED': 13,\n 'ENETUNREACH': 40,\n 'ENETDOWN': 38,\n 'ETIMEDOUT': 73,\n 'EHOSTDOWN': 142,\n 'EHOSTUNREACH': 23,\n 'EINPROGRESS': 26,\n 'EALREADY': 7,\n 'EDESTADDRREQ': 17,\n 'EMSGSIZE': 35,\n 'EPROTONOSUPPORT': 66,\n 'ESOCKTNOSUPPORT': 137,\n 'EADDRNOTAVAIL': 4,\n 'ENETRESET': 39,\n 'EISCONN': 30,\n 'ENOTCONN': 53,\n 'ETOOMANYREFS': 141,\n 'EUSERS': 136,\n 'EDQUOT': 19,\n 'ESTALE': 72,\n 'ENOTSUP': 138,\n 'ENOMEDIUM': 148,\n 'EILSEQ': 25,\n 'EOVERFLOW': 61,\n 'ECANCELED': 11,\n 'ENOTRECOVERABLE': 56,\n 'EOWNERDEAD': 62,\n 'ESTRPIPE': 135,\n };\n \n var NODEFS = {\n isWindows:false,\n staticInit() {\n NODEFS.isWindows = !!process.platform.match(/^win/);\n var flags = process.binding(\"constants\");\n // Node.js 4 compatibility: it has no namespaces for constants\n if (flags[\"fs\"]) {\n flags = flags[\"fs\"];\n }\n NODEFS.flagsForNodeMap = {\n \"1024\": flags[\"O_APPEND\"],\n \"64\": flags[\"O_CREAT\"],\n \"128\": flags[\"O_EXCL\"],\n \"256\": flags[\"O_NOCTTY\"],\n \"0\": flags[\"O_RDONLY\"],\n \"2\": flags[\"O_RDWR\"],\n \"4096\": flags[\"O_SYNC\"],\n \"512\": flags[\"O_TRUNC\"],\n \"1\": flags[\"O_WRONLY\"],\n \"131072\": flags[\"O_NOFOLLOW\"],\n };\n },\n convertNodeCode(e) {\n var code = e.code;\n return ERRNO_CODES[code];\n },\n tryFSOperation(f) {\n try {\n return f();\n } catch (e) {\n if (!e.code) throw e;\n // node under windows can return code 'UNKNOWN' here:\n // https://github.com/emscripten-core/emscripten/issues/15468\n if (e.code === 'UNKNOWN') throw new FS.ErrnoError(28);\n throw new FS.ErrnoError(NODEFS.convertNodeCode(e));\n }\n },\n mount(mount) {\n return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0);\n },\n createNode(parent, name, mode, dev) {\n if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) {\n throw new FS.ErrnoError(28);\n }\n var node = FS.createNode(parent, name, mode);\n node.node_ops = NODEFS.node_ops;\n node.stream_ops = NODEFS.stream_ops;\n return node;\n },\n getMode(path) {\n var stat;\n return NODEFS.tryFSOperation(() => {\n stat = fs.lstatSync(path);\n if (NODEFS.isWindows) {\n // Node.js on Windows never represents permission bit 'x', so\n // propagate read bits to execute bits\n stat.mode |= (stat.mode & 292) >> 2;\n }\n return stat.mode;\n });\n },\n realPath(node) {\n var parts = [];\n while (node.parent !== node) {\n parts.push(node.name);\n node = node.parent;\n }\n parts.push(node.mount.opts.root);\n parts.reverse();\n return PATH.join(...parts);\n },\n flagsForNode(flags) {\n flags &= ~2097152; // Ignore this flag from musl, otherwise node.js fails to open the file.\n flags &= ~2048; // Ignore this flag from musl, otherwise node.js fails to open the file.\n flags &= ~32768; // Ignore this flag from musl, otherwise node.js fails to open the file.\n flags &= ~524288; // Some applications may pass it; it makes no sense for a single process.\n flags &= ~65536; // Node.js doesn't need this passed in, it errors.\n var newFlags = 0;\n for (var k in NODEFS.flagsForNodeMap) {\n if (flags & k) {\n newFlags |= NODEFS.flagsForNodeMap[k];\n flags ^= k;\n }\n }\n if (flags) {\n throw new FS.ErrnoError(28);\n }\n return newFlags;\n },\n node_ops:{\n getattr(node) {\n var path = NODEFS.realPath(node);\n var stat;\n NODEFS.tryFSOperation(() => stat = fs.lstatSync(path));\n if (NODEFS.isWindows) {\n // node.js v0.10.20 doesn't report blksize and blocks on Windows. Fake\n // them with default blksize of 4096.\n // See http://support.microsoft.com/kb/140365\n if (!stat.blksize) {\n stat.blksize = 4096;\n }\n if (!stat.blocks) {\n stat.blocks = (stat.size+stat.blksize-1)/stat.blksize|0;\n }\n // Node.js on Windows never represents permission bit 'x', so\n // propagate read bits to execute bits.\n stat.mode |= (stat.mode & 292) >> 2;\n }\n return {\n dev: stat.dev,\n ino: stat.ino,\n mode: stat.mode,\n nlink: stat.nlink,\n uid: stat.uid,\n gid: stat.gid,\n rdev: stat.rdev,\n size: stat.size,\n atime: stat.atime,\n mtime: stat.mtime,\n ctime: stat.ctime,\n blksize: stat.blksize,\n blocks: stat.blocks\n };\n },\n setattr(node, attr) {\n var path = NODEFS.realPath(node);\n NODEFS.tryFSOperation(() => {\n if (attr.mode !== undefined) {\n fs.chmodSync(path, attr.mode);\n // update the common node structure mode as well\n node.mode = attr.mode;\n }\n if (attr.timestamp !== undefined) {\n var date = new Date(attr.timestamp);\n fs.utimesSync(path, date, date);\n }\n if (attr.size !== undefined) {\n fs.truncateSync(path, attr.size);\n }\n });\n },\n lookup(parent, name) {\n var path = PATH.join2(NODEFS.realPath(parent), name);\n var mode = NODEFS.getMode(path);\n return NODEFS.createNode(parent, name, mode);\n },\n mknod(parent, name, mode, dev) {\n var node = NODEFS.createNode(parent, name, mode, dev);\n // create the backing node for this in the fs root as well\n var path = NODEFS.realPath(node);\n NODEFS.tryFSOperation(() => {\n if (FS.isDir(node.mode)) {\n fs.mkdirSync(path, node.mode);\n } else {\n fs.writeFileSync(path, '', { mode: node.mode });\n }\n });\n return node;\n },\n rename(oldNode, newDir, newName) {\n var oldPath = NODEFS.realPath(oldNode);\n var newPath = PATH.join2(NODEFS.realPath(newDir), newName);\n NODEFS.tryFSOperation(() => fs.renameSync(oldPath, newPath));\n oldNode.name = newName;\n },\n unlink(parent, name) {\n var path = PATH.join2(NODEFS.realPath(parent), name);\n NODEFS.tryFSOperation(() => fs.unlinkSync(path));\n },\n rmdir(parent, name) {\n var path = PATH.join2(NODEFS.realPath(parent), name);\n NODEFS.tryFSOperation(() => fs.rmdirSync(path));\n },\n readdir(node) {\n var path = NODEFS.realPath(node);\n return NODEFS.tryFSOperation(() => fs.readdirSync(path));\n },\n symlink(parent, newName, oldPath) {\n var newPath = PATH.join2(NODEFS.realPath(parent), newName);\n NODEFS.tryFSOperation(() => fs.symlinkSync(oldPath, newPath));\n },\n readlink(node) {\n var path = NODEFS.realPath(node);\n return NODEFS.tryFSOperation(() => fs.readlinkSync(path));\n },\n },\n stream_ops:{\n open(stream) {\n var path = NODEFS.realPath(stream.node);\n NODEFS.tryFSOperation(() => {\n if (FS.isFile(stream.node.mode)) {\n stream.shared.refcount = 1;\n stream.nfd = fs.openSync(path, NODEFS.flagsForNode(stream.flags));\n }\n });\n },\n close(stream) {\n NODEFS.tryFSOperation(() => {\n if (FS.isFile(stream.node.mode) && stream.nfd && --stream.shared.refcount === 0) {\n fs.closeSync(stream.nfd);\n }\n });\n },\n dup(stream) {\n stream.shared.refcount++;\n },\n read(stream, buffer, offset, length, position) {\n // Node.js < 6 compatibility: node errors on 0 length reads\n if (length === 0) return 0;\n return NODEFS.tryFSOperation(() =>\n fs.readSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), 0, length, position)\n );\n },\n write(stream, buffer, offset, length, position) {\n return NODEFS.tryFSOperation(() =>\n fs.writeSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), 0, length, position)\n );\n },\n llseek(stream, offset, whence) {\n var position = offset;\n if (whence === 1) {\n position += stream.position;\n } else if (whence === 2) {\n if (FS.isFile(stream.node.mode)) {\n NODEFS.tryFSOperation(() => {\n var stat = fs.fstatSync(stream.nfd);\n position += stat.size;\n });\n }\n }\n \n if (position < 0) {\n throw new FS.ErrnoError(28);\n }\n \n return position;\n },\n mmap(stream, length, position, prot, flags) {\n if (!FS.isFile(stream.node.mode)) {\n throw new FS.ErrnoError(43);\n }\n \n var ptr = mmapAlloc(length);\n \n NODEFS.stream_ops.read(stream, HEAP8, ptr, length, position);\n return { ptr, allocated: true };\n },\n msync(stream, buffer, offset, length, mmapFlags) {\n NODEFS.stream_ops.write(stream, buffer, 0, length, offset, false);\n // should we check if bytesWritten and length are the same?\n return 0;\n },\n },\n };\n var FS = {\n root:null,\n mounts:[],\n devices:{\n },\n streams:[],\n nextInode:1,\n nameTable:null,\n currentPath:\"/\",\n initialized:false,\n ignorePermissions:true,\n ErrnoError:class {\n // We set the `name` property to be able to identify `FS.ErrnoError`\n // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway.\n // - when using PROXYFS, an error can come from an underlying FS\n // as different FS objects have their own FS.ErrnoError each,\n // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs.\n // we'll use the reliable test `err.name == \"ErrnoError\"` instead\n constructor(errno) {\n // TODO(sbc): Use the inline member declaration syntax once we\n // support it in acorn and closure.\n this.name = 'ErrnoError';\n this.errno = errno;\n }\n },\n genericErrors:{\n },\n filesystems:null,\n syncFSRequests:0,\n readFiles:{\n },\n FSStream:class {\n constructor() {\n // TODO(https://github.com/emscripten-core/emscripten/issues/21414):\n // Use inline field declarations.\n this.shared = {};\n }\n get object() {\n return this.node;\n }\n set object(val) {\n this.node = val;\n }\n get isRead() {\n return (this.flags & 2097155) !== 1;\n }\n get isWrite() {\n return (this.flags & 2097155) !== 0;\n }\n get isAppend() {\n return (this.flags & 1024);\n }\n get flags() {\n return this.shared.flags;\n }\n set flags(val) {\n this.shared.flags = val;\n }\n get position() {\n return this.shared.position;\n }\n set position(val) {\n this.shared.position = val;\n }\n },\n FSNode:class {\n constructor(parent, name, mode, rdev) {\n if (!parent) {\n parent = this; // root node sets parent to itself\n }\n this.parent = parent;\n this.mount = parent.mount;\n this.mounted = null;\n this.id = FS.nextInode++;\n this.name = name;\n this.mode = mode;\n this.node_ops = {};\n this.stream_ops = {};\n this.rdev = rdev;\n this.readMode = 292 | 73;\n this.writeMode = 146;\n }\n get read() {\n return (this.mode & this.readMode) === this.readMode;\n }\n set read(val) {\n val ? this.mode |= this.readMode : this.mode &= ~this.readMode;\n }\n get write() {\n return (this.mode & this.writeMode) === this.writeMode;\n }\n set write(val) {\n val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode;\n }\n get isFolder() {\n return FS.isDir(this.mode);\n }\n get isDevice() {\n return FS.isChrdev(this.mode);\n }\n },\n lookupPath(path, opts = {}) {\n path = PATH_FS.resolve(path);\n \n if (!path) return { path: '', node: null };\n \n var defaults = {\n follow_mount: true,\n recurse_count: 0\n };\n opts = Object.assign(defaults, opts)\n \n if (opts.recurse_count > 8) { // max recursive lookup of 8\n throw new FS.ErrnoError(32);\n }\n \n // split the absolute path\n var parts = path.split('/').filter((p) => !!p);\n \n // start at the root\n var current = FS.root;\n var current_path = '/';\n \n for (var i = 0; i < parts.length; i++) {\n var islast = (i === parts.length-1);\n if (islast && opts.parent) {\n // stop resolving\n break;\n }\n \n current = FS.lookupNode(current, parts[i]);\n current_path = PATH.join2(current_path, parts[i]);\n \n // jump to the mount's root node if this is a mountpoint\n if (FS.isMountpoint(current)) {\n if (!islast || (islast && opts.follow_mount)) {\n current = current.mounted.root;\n }\n }\n \n // by default, lookupPath will not follow a symlink if it is the final path component.\n // setting opts.follow = true will override this behavior.\n if (!islast || opts.follow) {\n var count = 0;\n while (FS.isLink(current.mode)) {\n var link = FS.readlink(current_path);\n current_path = PATH_FS.resolve(PATH.dirname(current_path), link);\n \n var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count + 1 });\n current = lookup.node;\n \n if (count++ > 40) { // limit max consecutive symlinks to 40 (SYMLOOP_MAX).\n throw new FS.ErrnoError(32);\n }\n }\n }\n }\n \n return { path: current_path, node: current };\n },\n getPath(node) {\n var path;\n while (true) {\n if (FS.isRoot(node)) {\n var mount = node.mount.mountpoint;\n if (!path) return mount;\n return mount[mount.length-1] !== '/' ? `${mount}/${path}` : mount + path;\n }\n path = path ? `${node.name}/${path}` : node.name;\n node = node.parent;\n }\n },\n hashName(parentid, name) {\n var hash = 0;\n \n for (var i = 0; i < name.length; i++) {\n hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;\n }\n return ((parentid + hash) >>> 0) % FS.nameTable.length;\n },\n hashAddNode(node) {\n var hash = FS.hashName(node.parent.id, node.name);\n node.name_next = FS.nameTable[hash];\n FS.nameTable[hash] = node;\n },\n hashRemoveNode(node) {\n var hash = FS.hashName(node.parent.id, node.name);\n if (FS.nameTable[hash] === node) {\n FS.nameTable[hash] = node.name_next;\n } else {\n var current = FS.nameTable[hash];\n while (current) {\n if (current.name_next === node) {\n current.name_next = node.name_next;\n break;\n }\n current = current.name_next;\n }\n }\n },\n lookupNode(parent, name) {\n var errCode = FS.mayLookup(parent);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n var hash = FS.hashName(parent.id, name);\n for (var node = FS.nameTable[hash]; node; node = node.name_next) {\n var nodeName = node.name;\n if (node.parent.id === parent.id && nodeName === name) {\n return node;\n }\n }\n // if we failed to find it in the cache, call into the VFS\n return FS.lookup(parent, name);\n },\n createNode(parent, name, mode, rdev) {\n var node = new FS.FSNode(parent, name, mode, rdev);\n \n FS.hashAddNode(node);\n \n return node;\n },\n destroyNode(node) {\n FS.hashRemoveNode(node);\n },\n isRoot(node) {\n return node === node.parent;\n },\n isMountpoint(node) {\n return !!node.mounted;\n },\n isFile(mode) {\n return (mode & 61440) === 32768;\n },\n isDir(mode) {\n return (mode & 61440) === 16384;\n },\n isLink(mode) {\n return (mode & 61440) === 40960;\n },\n isChrdev(mode) {\n return (mode & 61440) === 8192;\n },\n isBlkdev(mode) {\n return (mode & 61440) === 24576;\n },\n isFIFO(mode) {\n return (mode & 61440) === 4096;\n },\n isSocket(mode) {\n return (mode & 49152) === 49152;\n },\n flagsToPermissionString(flag) {\n var perms = ['r', 'w', 'rw'][flag & 3];\n if ((flag & 512)) {\n perms += 'w';\n }\n return perms;\n },\n nodePermissions(node, perms) {\n if (FS.ignorePermissions) {\n return 0;\n }\n // return 0 if any user, group or owner bits are set.\n if (perms.includes('r') && !(node.mode & 292)) {\n return 2;\n } else if (perms.includes('w') && !(node.mode & 146)) {\n return 2;\n } else if (perms.includes('x') && !(node.mode & 73)) {\n return 2;\n }\n return 0;\n },\n mayLookup(dir) {\n if (!FS.isDir(dir.mode)) return 54;\n var errCode = FS.nodePermissions(dir, 'x');\n if (errCode) return errCode;\n if (!dir.node_ops.lookup) return 2;\n return 0;\n },\n mayCreate(dir, name) {\n try {\n var node = FS.lookupNode(dir, name);\n return 20;\n } catch (e) {\n }\n return FS.nodePermissions(dir, 'wx');\n },\n mayDelete(dir, name, isdir) {\n var node;\n try {\n node = FS.lookupNode(dir, name);\n } catch (e) {\n return e.errno;\n }\n var errCode = FS.nodePermissions(dir, 'wx');\n if (errCode) {\n return errCode;\n }\n if (isdir) {\n if (!FS.isDir(node.mode)) {\n return 54;\n }\n if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {\n return 10;\n }\n } else {\n if (FS.isDir(node.mode)) {\n return 31;\n }\n }\n return 0;\n },\n mayOpen(node, flags) {\n if (!node) {\n return 44;\n }\n if (FS.isLink(node.mode)) {\n return 32;\n } else if (FS.isDir(node.mode)) {\n if (FS.flagsToPermissionString(flags) !== 'r' || // opening for write\n (flags & 512)) { // TODO: check for O_SEARCH? (== search for dir only)\n return 31;\n }\n }\n return FS.nodePermissions(node, FS.flagsToPermissionString(flags));\n },\n MAX_OPEN_FDS:4096,\n nextfd() {\n for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) {\n if (!FS.streams[fd]) {\n return fd;\n }\n }\n throw new FS.ErrnoError(33);\n },\n getStreamChecked(fd) {\n var stream = FS.getStream(fd);\n if (!stream) {\n throw new FS.ErrnoError(8);\n }\n return stream;\n },\n getStream:(fd) => FS.streams[fd],\n createStream(stream, fd = -1) {\n \n // clone it, so we can return an instance of FSStream\n stream = Object.assign(new FS.FSStream(), stream);\n if (fd == -1) {\n fd = FS.nextfd();\n }\n stream.fd = fd;\n FS.streams[fd] = stream;\n return stream;\n },\n closeStream(fd) {\n FS.streams[fd] = null;\n },\n dupStream(origStream, fd = -1) {\n var stream = FS.createStream(origStream, fd);\n stream.stream_ops?.dup?.(stream);\n return stream;\n },\n chrdev_stream_ops:{\n open(stream) {\n var device = FS.getDevice(stream.node.rdev);\n // override node's stream ops with the device's\n stream.stream_ops = device.stream_ops;\n // forward the open call\n stream.stream_ops.open?.(stream);\n },\n llseek() {\n throw new FS.ErrnoError(70);\n },\n },\n major:(dev) => ((dev) >> 8),\n minor:(dev) => ((dev) & 0xff),\n makedev:(ma, mi) => ((ma) << 8 | (mi)),\n registerDevice(dev, ops) {\n FS.devices[dev] = { stream_ops: ops };\n },\n getDevice:(dev) => FS.devices[dev],\n getMounts(mount) {\n var mounts = [];\n var check = [mount];\n \n while (check.length) {\n var m = check.pop();\n \n mounts.push(m);\n \n check.push(...m.mounts);\n }\n \n return mounts;\n },\n syncfs(populate, callback) {\n if (typeof populate == 'function') {\n callback = populate;\n populate = false;\n }\n \n FS.syncFSRequests++;\n \n if (FS.syncFSRequests > 1) {\n err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);\n }\n \n var mounts = FS.getMounts(FS.root.mount);\n var completed = 0;\n \n function doCallback(errCode) {\n FS.syncFSRequests--;\n return callback(errCode);\n }\n \n function done(errCode) {\n if (errCode) {\n if (!done.errored) {\n done.errored = true;\n return doCallback(errCode);\n }\n return;\n }\n if (++completed >= mounts.length) {\n doCallback(null);\n }\n };\n \n // sync all mounts\n mounts.forEach((mount) => {\n if (!mount.type.syncfs) {\n return done(null);\n }\n mount.type.syncfs(mount, populate, done);\n });\n },\n mount(type, opts, mountpoint) {\n var root = mountpoint === '/';\n var pseudo = !mountpoint;\n var node;\n \n if (root && FS.root) {\n throw new FS.ErrnoError(10);\n } else if (!root && !pseudo) {\n var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n \n mountpoint = lookup.path; // use the absolute path\n node = lookup.node;\n \n if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10);\n }\n \n if (!FS.isDir(node.mode)) {\n throw new FS.ErrnoError(54);\n }\n }\n \n var mount = {\n type,\n opts,\n mountpoint,\n mounts: []\n };\n \n // create a root node for the fs\n var mountRoot = type.mount(mount);\n mountRoot.mount = mount;\n mount.root = mountRoot;\n \n if (root) {\n FS.root = mountRoot;\n } else if (node) {\n // set as a mountpoint\n node.mounted = mount;\n \n // add the new mount to the current mount's children\n if (node.mount) {\n node.mount.mounts.push(mount);\n }\n }\n \n return mountRoot;\n },\n unmount(mountpoint) {\n var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n \n if (!FS.isMountpoint(lookup.node)) {\n throw new FS.ErrnoError(28);\n }\n \n // destroy the nodes for this mount, and all its child mounts\n var node = lookup.node;\n var mount = node.mounted;\n var mounts = FS.getMounts(mount);\n \n Object.keys(FS.nameTable).forEach((hash) => {\n var current = FS.nameTable[hash];\n \n while (current) {\n var next = current.name_next;\n \n if (mounts.includes(current.mount)) {\n FS.destroyNode(current);\n }\n \n current = next;\n }\n });\n \n // no longer a mountpoint\n node.mounted = null;\n \n // remove this mount from the child mounts\n var idx = node.mount.mounts.indexOf(mount);\n node.mount.mounts.splice(idx, 1);\n },\n lookup(parent, name) {\n return parent.node_ops.lookup(parent, name);\n },\n mknod(path, mode, dev) {\n var lookup = FS.lookupPath(path, { parent: true });\n var parent = lookup.node;\n var name = PATH.basename(path);\n if (!name || name === '.' || name === '..') {\n throw new FS.ErrnoError(28);\n }\n var errCode = FS.mayCreate(parent, name);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.mknod) {\n throw new FS.ErrnoError(63);\n }\n return parent.node_ops.mknod(parent, name, mode, dev);\n },\n create(path, mode) {\n mode = mode !== undefined ? mode : 438 /* 0666 */;\n mode &= 4095;\n mode |= 32768;\n return FS.mknod(path, mode, 0);\n },\n mkdir(path, mode) {\n mode = mode !== undefined ? mode : 511 /* 0777 */;\n mode &= 511 | 512;\n mode |= 16384;\n return FS.mknod(path, mode, 0);\n },\n mkdirTree(path, mode) {\n var dirs = path.split('/');\n var d = '';\n for (var i = 0; i < dirs.length; ++i) {\n if (!dirs[i]) continue;\n d += '/' + dirs[i];\n try {\n FS.mkdir(d, mode);\n } catch(e) {\n if (e.errno != 20) throw e;\n }\n }\n },\n mkdev(path, mode, dev) {\n if (typeof dev == 'undefined') {\n dev = mode;\n mode = 438 /* 0666 */;\n }\n mode |= 8192;\n return FS.mknod(path, mode, dev);\n },\n symlink(oldpath, newpath) {\n if (!PATH_FS.resolve(oldpath)) {\n throw new FS.ErrnoError(44);\n }\n var lookup = FS.lookupPath(newpath, { parent: true });\n var parent = lookup.node;\n if (!parent) {\n throw new FS.ErrnoError(44);\n }\n var newname = PATH.basename(newpath);\n var errCode = FS.mayCreate(parent, newname);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.symlink) {\n throw new FS.ErrnoError(63);\n }\n return parent.node_ops.symlink(parent, newname, oldpath);\n },\n rename(old_path, new_path) {\n var old_dirname = PATH.dirname(old_path);\n var new_dirname = PATH.dirname(new_path);\n var old_name = PATH.basename(old_path);\n var new_name = PATH.basename(new_path);\n // parents must exist\n var lookup, old_dir, new_dir;\n \n // let the errors from non existent directories percolate up\n lookup = FS.lookupPath(old_path, { parent: true });\n old_dir = lookup.node;\n lookup = FS.lookupPath(new_path, { parent: true });\n new_dir = lookup.node;\n \n if (!old_dir || !new_dir) throw new FS.ErrnoError(44);\n // need to be part of the same mount\n if (old_dir.mount !== new_dir.mount) {\n throw new FS.ErrnoError(75);\n }\n // source must exist\n var old_node = FS.lookupNode(old_dir, old_name);\n // old path should not be an ancestor of the new path\n var relative = PATH_FS.relative(old_path, new_dirname);\n if (relative.charAt(0) !== '.') {\n throw new FS.ErrnoError(28);\n }\n // new path should not be an ancestor of the old path\n relative = PATH_FS.relative(new_path, old_dirname);\n if (relative.charAt(0) !== '.') {\n throw new FS.ErrnoError(55);\n }\n // see if the new path already exists\n var new_node;\n try {\n new_node = FS.lookupNode(new_dir, new_name);\n } catch (e) {\n // not fatal\n }\n // early out if nothing needs to change\n if (old_node === new_node) {\n return;\n }\n // we'll need to delete the old entry\n var isdir = FS.isDir(old_node.mode);\n var errCode = FS.mayDelete(old_dir, old_name, isdir);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n // need delete permissions if we'll be overwriting.\n // need create permissions if new doesn't already exist.\n errCode = new_node ?\n FS.mayDelete(new_dir, new_name, isdir) :\n FS.mayCreate(new_dir, new_name);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!old_dir.node_ops.rename) {\n throw new FS.ErrnoError(63);\n }\n if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {\n throw new FS.ErrnoError(10);\n }\n // if we are going to change the parent, check write permissions\n if (new_dir !== old_dir) {\n errCode = FS.nodePermissions(old_dir, 'w');\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n }\n // remove the node from the lookup hash\n FS.hashRemoveNode(old_node);\n // do the underlying fs rename\n try {\n old_dir.node_ops.rename(old_node, new_dir, new_name);\n // update old node (we do this here to avoid each backend \n // needing to)\n old_node.parent = new_dir;\n } catch (e) {\n throw e;\n } finally {\n // add the node back to the hash (in case node_ops.rename\n // changed its name)\n FS.hashAddNode(old_node);\n }\n },\n rmdir(path) {\n var lookup = FS.lookupPath(path, { parent: true });\n var parent = lookup.node;\n var name = PATH.basename(path);\n var node = FS.lookupNode(parent, name);\n var errCode = FS.mayDelete(parent, name, true);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.rmdir) {\n throw new FS.ErrnoError(63);\n }\n if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10);\n }\n parent.node_ops.rmdir(parent, name);\n FS.destroyNode(node);\n },\n readdir(path) {\n var lookup = FS.lookupPath(path, { follow: true });\n var node = lookup.node;\n if (!node.node_ops.readdir) {\n throw new FS.ErrnoError(54);\n }\n return node.node_ops.readdir(node);\n },\n unlink(path) {\n var lookup = FS.lookupPath(path, { parent: true });\n var parent = lookup.node;\n if (!parent) {\n throw new FS.ErrnoError(44);\n }\n var name = PATH.basename(path);\n var node = FS.lookupNode(parent, name);\n var errCode = FS.mayDelete(parent, name, false);\n if (errCode) {\n // According to POSIX, we should map EISDIR to EPERM, but\n // we instead do what Linux does (and we must, as we use\n // the musl linux libc).\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.unlink) {\n throw new FS.ErrnoError(63);\n }\n if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10);\n }\n parent.node_ops.unlink(parent, name);\n FS.destroyNode(node);\n },\n readlink(path) {\n var lookup = FS.lookupPath(path);\n var link = lookup.node;\n if (!link) {\n throw new FS.ErrnoError(44);\n }\n if (!link.node_ops.readlink) {\n throw new FS.ErrnoError(28);\n }\n return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link));\n },\n stat(path, dontFollow) {\n var lookup = FS.lookupPath(path, { follow: !dontFollow });\n var node = lookup.node;\n if (!node) {\n throw new FS.ErrnoError(44);\n }\n if (!node.node_ops.getattr) {\n throw new FS.ErrnoError(63);\n }\n return node.node_ops.getattr(node);\n },\n lstat(path) {\n return FS.stat(path, true);\n },\n chmod(path, mode, dontFollow) {\n var node;\n if (typeof path == 'string') {\n var lookup = FS.lookupPath(path, { follow: !dontFollow });\n node = lookup.node;\n } else {\n node = path;\n }\n if (!node.node_ops.setattr) {\n throw new FS.ErrnoError(63);\n }\n node.node_ops.setattr(node, {\n mode: (mode & 4095) | (node.mode & ~4095),\n timestamp: Date.now()\n });\n },\n lchmod(path, mode) {\n FS.chmod(path, mode, true);\n },\n fchmod(fd, mode) {\n var stream = FS.getStreamChecked(fd);\n FS.chmod(stream.node, mode);\n },\n chown(path, uid, gid, dontFollow) {\n var node;\n if (typeof path == 'string') {\n var lookup = FS.lookupPath(path, { follow: !dontFollow });\n node = lookup.node;\n } else {\n node = path;\n }\n if (!node.node_ops.setattr) {\n throw new FS.ErrnoError(63);\n }\n node.node_ops.setattr(node, {\n timestamp: Date.now()\n // we ignore the uid / gid for now\n });\n },\n lchown(path, uid, gid) {\n FS.chown(path, uid, gid, true);\n },\n fchown(fd, uid, gid) {\n var stream = FS.getStreamChecked(fd);\n FS.chown(stream.node, uid, gid);\n },\n truncate(path, len) {\n if (len < 0) {\n throw new FS.ErrnoError(28);\n }\n var node;\n if (typeof path == 'string') {\n var lookup = FS.lookupPath(path, { follow: true });\n node = lookup.node;\n } else {\n node = path;\n }\n if (!node.node_ops.setattr) {\n throw new FS.ErrnoError(63);\n }\n if (FS.isDir(node.mode)) {\n throw new FS.ErrnoError(31);\n }\n if (!FS.isFile(node.mode)) {\n throw new FS.ErrnoError(28);\n }\n var errCode = FS.nodePermissions(node, 'w');\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n node.node_ops.setattr(node, {\n size: len,\n timestamp: Date.now()\n });\n },\n ftruncate(fd, len) {\n var stream = FS.getStreamChecked(fd);\n if ((stream.flags & 2097155) === 0) {\n throw new FS.ErrnoError(28);\n }\n FS.truncate(stream.node, len);\n },\n utime(path, atime, mtime) {\n var lookup = FS.lookupPath(path, { follow: true });\n var node = lookup.node;\n node.node_ops.setattr(node, {\n timestamp: Math.max(atime, mtime)\n });\n },\n open(path, flags, mode) {\n if (path === \"\") {\n throw new FS.ErrnoError(44);\n }\n flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags;\n if ((flags & 64)) {\n mode = typeof mode == 'undefined' ? 438 /* 0666 */ : mode;\n mode = (mode & 4095) | 32768;\n } else {\n mode = 0;\n }\n var node;\n if (typeof path == 'object') {\n node = path;\n } else {\n path = PATH.normalize(path);\n try {\n var lookup = FS.lookupPath(path, {\n follow: !(flags & 131072)\n });\n node = lookup.node;\n } catch (e) {\n // ignore\n }\n }\n // perhaps we need to create the node\n var created = false;\n if ((flags & 64)) {\n if (node) {\n // if O_CREAT and O_EXCL are set, error out if the node already exists\n if ((flags & 128)) {\n throw new FS.ErrnoError(20);\n }\n } else {\n // node doesn't exist, try to create it\n node = FS.mknod(path, mode, 0);\n created = true;\n }\n }\n if (!node) {\n throw new FS.ErrnoError(44);\n }\n // can't truncate a device\n if (FS.isChrdev(node.mode)) {\n flags &= ~512;\n }\n // if asked only for a directory, then this must be one\n if ((flags & 65536) && !FS.isDir(node.mode)) {\n throw new FS.ErrnoError(54);\n }\n // check permissions, if this is not a file we just created now (it is ok to\n // create and write to a file with read-only permissions; it is read-only\n // for later use)\n if (!created) {\n var errCode = FS.mayOpen(node, flags);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n }\n // do truncation if necessary\n if ((flags & 512) && !created) {\n FS.truncate(node, 0);\n }\n // we've already handled these, don't pass down to the underlying vfs\n flags &= ~(128 | 512 | 131072);\n \n // register the stream with the filesystem\n var stream = FS.createStream({\n node,\n path: FS.getPath(node), // we want the absolute path to the node\n flags,\n seekable: true,\n position: 0,\n stream_ops: node.stream_ops,\n // used by the file family libc calls (fopen, fwrite, ferror, etc.)\n ungotten: [],\n error: false\n });\n // call the new stream's open function\n if (stream.stream_ops.open) {\n stream.stream_ops.open(stream);\n }\n if (Module['logReadFiles'] && !(flags & 1)) {\n if (!(path in FS.readFiles)) {\n FS.readFiles[path] = 1;\n }\n }\n return stream;\n },\n close(stream) {\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if (stream.getdents) stream.getdents = null; // free readdir state\n try {\n if (stream.stream_ops.close) {\n stream.stream_ops.close(stream);\n }\n } catch (e) {\n throw e;\n } finally {\n FS.closeStream(stream.fd);\n }\n stream.fd = null;\n },\n isClosed(stream) {\n return stream.fd === null;\n },\n llseek(stream, offset, whence) {\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if (!stream.seekable || !stream.stream_ops.llseek) {\n throw new FS.ErrnoError(70);\n }\n if (whence != 0 && whence != 1 && whence != 2) {\n throw new FS.ErrnoError(28);\n }\n stream.position = stream.stream_ops.llseek(stream, offset, whence);\n stream.ungotten = [];\n return stream.position;\n },\n read(stream, buffer, offset, length, position) {\n if (length < 0 || position < 0) {\n throw new FS.ErrnoError(28);\n }\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if ((stream.flags & 2097155) === 1) {\n throw new FS.ErrnoError(8);\n }\n if (FS.isDir(stream.node.mode)) {\n throw new FS.ErrnoError(31);\n }\n if (!stream.stream_ops.read) {\n throw new FS.ErrnoError(28);\n }\n var seeking = typeof position != 'undefined';\n if (!seeking) {\n position = stream.position;\n } else if (!stream.seekable) {\n throw new FS.ErrnoError(70);\n }\n var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position);\n if (!seeking) stream.position += bytesRead;\n return bytesRead;\n },\n write(stream, buffer, offset, length, position, canOwn) {\n if (length < 0 || position < 0) {\n throw new FS.ErrnoError(28);\n }\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if ((stream.flags & 2097155) === 0) {\n throw new FS.ErrnoError(8);\n }\n if (FS.isDir(stream.node.mode)) {\n throw new FS.ErrnoError(31);\n }\n if (!stream.stream_ops.write) {\n throw new FS.ErrnoError(28);\n }\n if (stream.seekable && stream.flags & 1024) {\n // seek to the end before writing in append mode\n FS.llseek(stream, 0, 2);\n }\n var seeking = typeof position != 'undefined';\n if (!seeking) {\n position = stream.position;\n } else if (!stream.seekable) {\n throw new FS.ErrnoError(70);\n }\n var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn);\n if (!seeking) stream.position += bytesWritten;\n return bytesWritten;\n },\n allocate(stream, offset, length) {\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if (offset < 0 || length <= 0) {\n throw new FS.ErrnoError(28);\n }\n if ((stream.flags & 2097155) === 0) {\n throw new FS.ErrnoError(8);\n }\n if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) {\n throw new FS.ErrnoError(43);\n }\n if (!stream.stream_ops.allocate) {\n throw new FS.ErrnoError(138);\n }\n stream.stream_ops.allocate(stream, offset, length);\n },\n mmap(stream, length, position, prot, flags) {\n // User requests writing to file (prot & PROT_WRITE != 0).\n // Checking if we have permissions to write to the file unless\n // MAP_PRIVATE flag is set. According to POSIX spec it is possible\n // to write to file opened in read-only mode with MAP_PRIVATE flag,\n // as all modifications will be visible only in the memory of\n // the current process.\n if ((prot & 2) !== 0\n && (flags & 2) === 0\n && (stream.flags & 2097155) !== 2) {\n throw new FS.ErrnoError(2);\n }\n if ((stream.flags & 2097155) === 1) {\n throw new FS.ErrnoError(2);\n }\n if (!stream.stream_ops.mmap) {\n throw new FS.ErrnoError(43);\n }\n if (!length) {\n throw new FS.ErrnoError(28);\n }\n return stream.stream_ops.mmap(stream, length, position, prot, flags);\n },\n msync(stream, buffer, offset, length, mmapFlags) {\n if (!stream.stream_ops.msync) {\n return 0;\n }\n return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags);\n },\n ioctl(stream, cmd, arg) {\n if (!stream.stream_ops.ioctl) {\n throw new FS.ErrnoError(59);\n }\n return stream.stream_ops.ioctl(stream, cmd, arg);\n },\n readFile(path, opts = {}) {\n opts.flags = opts.flags || 0;\n opts.encoding = opts.encoding || 'binary';\n if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {\n throw new Error(`Invalid encoding type \"${opts.encoding}\"`);\n }\n var ret;\n var stream = FS.open(path, opts.flags);\n var stat = FS.stat(path);\n var length = stat.size;\n var buf = new Uint8Array(length);\n FS.read(stream, buf, 0, length, 0);\n if (opts.encoding === 'utf8') {\n ret = UTF8ArrayToString(buf, 0);\n } else if (opts.encoding === 'binary') {\n ret = buf;\n }\n FS.close(stream);\n return ret;\n },\n writeFile(path, data, opts = {}) {\n opts.flags = opts.flags || 577;\n var stream = FS.open(path, opts.flags, opts.mode);\n if (typeof data == 'string') {\n var buf = new Uint8Array(lengthBytesUTF8(data)+1);\n var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length);\n FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn);\n } else if (ArrayBuffer.isView(data)) {\n FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn);\n } else {\n throw new Error('Unsupported data type');\n }\n FS.close(stream);\n },\n cwd:() => FS.currentPath,\n chdir(path) {\n var lookup = FS.lookupPath(path, { follow: true });\n if (lookup.node === null) {\n throw new FS.ErrnoError(44);\n }\n if (!FS.isDir(lookup.node.mode)) {\n throw new FS.ErrnoError(54);\n }\n var errCode = FS.nodePermissions(lookup.node, 'x');\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n FS.currentPath = lookup.path;\n },\n createDefaultDirectories() {\n FS.mkdir('/tmp');\n FS.mkdir('/home');\n FS.mkdir('/home/web_user');\n },\n createDefaultDevices() {\n // create /dev\n FS.mkdir('/dev');\n // setup /dev/null\n FS.registerDevice(FS.makedev(1, 3), {\n read: () => 0,\n write: (stream, buffer, offset, length, pos) => length,\n });\n FS.mkdev('/dev/null', FS.makedev(1, 3));\n // setup /dev/tty and /dev/tty1\n // stderr needs to print output using err() rather than out()\n // so we register a second tty just for it.\n TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);\n TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);\n FS.mkdev('/dev/tty', FS.makedev(5, 0));\n FS.mkdev('/dev/tty1', FS.makedev(6, 0));\n // setup /dev/[u]random\n // use a buffer to avoid overhead of individual crypto calls per byte\n var randomBuffer = new Uint8Array(1024), randomLeft = 0;\n var randomByte = () => {\n if (randomLeft === 0) {\n randomLeft = randomFill(randomBuffer).byteLength;\n }\n return randomBuffer[--randomLeft];\n };\n FS.createDevice('/dev', 'random', randomByte);\n FS.createDevice('/dev', 'urandom', randomByte);\n // we're not going to emulate the actual shm device,\n // just create the tmp dirs that reside in it commonly\n FS.mkdir('/dev/shm');\n FS.mkdir('/dev/shm/tmp');\n },\n createSpecialDirectories() {\n // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the\n // name of the stream for fd 6 (see test_unistd_ttyname)\n FS.mkdir('/proc');\n var proc_self = FS.mkdir('/proc/self');\n FS.mkdir('/proc/self/fd');\n FS.mount({\n mount() {\n var node = FS.createNode(proc_self, 'fd', 16384 | 511 /* 0777 */, 73);\n node.node_ops = {\n lookup(parent, name) {\n var fd = +name;\n var stream = FS.getStreamChecked(fd);\n var ret = {\n parent: null,\n mount: { mountpoint: 'fake' },\n node_ops: { readlink: () => stream.path },\n };\n ret.parent = ret; // make it look like a simple root node\n return ret;\n }\n };\n return node;\n }\n }, {}, '/proc/self/fd');\n },\n createStandardStreams(input, output, error) {\n // TODO deprecate the old functionality of a single\n // input / output callback and that utilizes FS.createDevice\n // and instead require a unique set of stream ops\n \n // by default, we symlink the standard streams to the\n // default tty devices. however, if the standard streams\n // have been overwritten we create a unique device for\n // them instead.\n if (input) {\n FS.createDevice('/dev', 'stdin', input);\n } else {\n FS.symlink('/dev/tty', '/dev/stdin');\n }\n if (output) {\n FS.createDevice('/dev', 'stdout', null, output);\n } else {\n FS.symlink('/dev/tty', '/dev/stdout');\n }\n if (error) {\n FS.createDevice('/dev', 'stderr', null, error);\n } else {\n FS.symlink('/dev/tty1', '/dev/stderr');\n }\n \n // open default streams for the stdin, stdout and stderr devices\n var stdin = FS.open('/dev/stdin', 0);\n var stdout = FS.open('/dev/stdout', 1);\n var stderr = FS.open('/dev/stderr', 1);\n },\n staticInit() {\n // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info)\n [44].forEach((code) => {\n FS.genericErrors[code] = new FS.ErrnoError(code);\n FS.genericErrors[code].stack = '';\n });\n \n FS.nameTable = new Array(4096);\n \n FS.mount(MEMFS, {}, '/');\n \n FS.createDefaultDirectories();\n FS.createDefaultDevices();\n FS.createSpecialDirectories();\n \n FS.filesystems = {\n 'MEMFS': MEMFS,\n 'IDBFS': IDBFS,\n 'NODEFS': NODEFS,\n };\n },\n init(input, output, error) {\n FS.initialized = true;\n \n // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here\n input ??= Module['stdin'];\n output ??= Module['stdout'];\n error ??= Module['stderr'];\n \n FS.createStandardStreams(input, output, error);\n },\n quit() {\n FS.initialized = false;\n // force-flush all streams, so we get musl std streams printed out\n _fflush(0);\n // close all of our streams\n for (var i = 0; i < FS.streams.length; i++) {\n var stream = FS.streams[i];\n if (!stream) {\n continue;\n }\n FS.close(stream);\n }\n },\n findObject(path, dontResolveLastLink) {\n var ret = FS.analyzePath(path, dontResolveLastLink);\n if (!ret.exists) {\n return null;\n }\n return ret.object;\n },\n analyzePath(path, dontResolveLastLink) {\n // operate from within the context of the symlink's target\n try {\n var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n path = lookup.path;\n } catch (e) {\n }\n var ret = {\n isRoot: false, exists: false, error: 0, name: null, path: null, object: null,\n parentExists: false, parentPath: null, parentObject: null\n };\n try {\n var lookup = FS.lookupPath(path, { parent: true });\n ret.parentExists = true;\n ret.parentPath = lookup.path;\n ret.parentObject = lookup.node;\n ret.name = PATH.basename(path);\n lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n ret.exists = true;\n ret.path = lookup.path;\n ret.object = lookup.node;\n ret.name = lookup.node.name;\n ret.isRoot = lookup.path === '/';\n } catch (e) {\n ret.error = e.errno;\n };\n return ret;\n },\n createPath(parent, path, canRead, canWrite) {\n parent = typeof parent == 'string' ? parent : FS.getPath(parent);\n var parts = path.split('/').reverse();\n while (parts.length) {\n var part = parts.pop();\n if (!part) continue;\n var current = PATH.join2(parent, part);\n try {\n FS.mkdir(current);\n } catch (e) {\n // ignore EEXIST\n }\n parent = current;\n }\n return current;\n },\n createFile(parent, name, properties, canRead, canWrite) {\n var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name);\n var mode = FS_getMode(canRead, canWrite);\n return FS.create(path, mode);\n },\n createDataFile(parent, name, data, canRead, canWrite, canOwn) {\n var path = name;\n if (parent) {\n parent = typeof parent == 'string' ? parent : FS.getPath(parent);\n path = name ? PATH.join2(parent, name) : parent;\n }\n var mode = FS_getMode(canRead, canWrite);\n var node = FS.create(path, mode);\n if (data) {\n if (typeof data == 'string') {\n var arr = new Array(data.length);\n for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i);\n data = arr;\n }\n // make sure we can write to the file\n FS.chmod(node, mode | 146);\n var stream = FS.open(node, 577);\n FS.write(stream, data, 0, data.length, 0, canOwn);\n FS.close(stream);\n FS.chmod(node, mode);\n }\n },\n createDevice(parent, name, input, output) {\n var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name);\n var mode = FS_getMode(!!input, !!output);\n FS.createDevice.major ??= 64;\n var dev = FS.makedev(FS.createDevice.major++, 0);\n // Create a fake device that a set of stream ops to emulate\n // the old behavior.\n FS.registerDevice(dev, {\n open(stream) {\n stream.seekable = false;\n },\n close(stream) {\n // flush any pending line data\n if (output?.buffer?.length) {\n output(10);\n }\n },\n read(stream, buffer, offset, length, pos /* ignored */) {\n var bytesRead = 0;\n for (var i = 0; i < length; i++) {\n var result;\n try {\n result = input();\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n if (result === undefined && bytesRead === 0) {\n throw new FS.ErrnoError(6);\n }\n if (result === null || result === undefined) break;\n bytesRead++;\n buffer[offset+i] = result;\n }\n if (bytesRead) {\n stream.node.timestamp = Date.now();\n }\n return bytesRead;\n },\n write(stream, buffer, offset, length, pos) {\n for (var i = 0; i < length; i++) {\n try {\n output(buffer[offset+i]);\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n }\n if (length) {\n stream.node.timestamp = Date.now();\n }\n return i;\n }\n });\n return FS.mkdev(path, mode, dev);\n },\n forceLoadFile(obj) {\n if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;\n if (typeof XMLHttpRequest != 'undefined') {\n throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");\n } else { // Command-line.\n try {\n obj.contents = readBinary(obj.url);\n obj.usedBytes = obj.contents.length;\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n }\n },\n createLazyFile(parent, name, url, canRead, canWrite) {\n // Lazy chunked Uint8Array (implements get and length from Uint8Array).\n // Actual getting is abstracted away for eventual reuse.\n class LazyUint8Array {\n constructor() {\n this.lengthKnown = false;\n this.chunks = []; // Loaded chunks. Index is the chunk number\n }\n get(idx) {\n if (idx > this.length-1 || idx < 0) {\n return undefined;\n }\n var chunkOffset = idx % this.chunkSize;\n var chunkNum = (idx / this.chunkSize)|0;\n return this.getter(chunkNum)[chunkOffset];\n }\n setDataGetter(getter) {\n this.getter = getter;\n }\n cacheLength() {\n // Find length\n var xhr = new XMLHttpRequest();\n xhr.open('HEAD', url, false);\n xhr.send(null);\n if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error(\"Couldn't load \" + url + \". Status: \" + xhr.status);\n var datalength = Number(xhr.getResponseHeader(\"Content-length\"));\n var header;\n var hasByteServing = (header = xhr.getResponseHeader(\"Accept-Ranges\")) && header === \"bytes\";\n var usesGzip = (header = xhr.getResponseHeader(\"Content-Encoding\")) && header === \"gzip\";\n \n var chunkSize = 1024*1024; // Chunk size in bytes\n \n if (!hasByteServing) chunkSize = datalength;\n \n // Function to get a range from the remote URL.\n var doXHR = (from, to) => {\n if (from > to) throw new Error(\"invalid range (\" + from + \", \" + to + \") or no bytes requested!\");\n if (to > datalength-1) throw new Error(\"only \" + datalength + \" bytes available! programmer error!\");\n \n // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available.\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, false);\n if (datalength !== chunkSize) xhr.setRequestHeader(\"Range\", \"bytes=\" + from + \"-\" + to);\n \n // Some hints to the browser that we want binary data.\n xhr.responseType = 'arraybuffer';\n if (xhr.overrideMimeType) {\n xhr.overrideMimeType('text/plain; charset=x-user-defined');\n }\n \n xhr.send(null);\n if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error(\"Couldn't load \" + url + \". Status: \" + xhr.status);\n if (xhr.response !== undefined) {\n return new Uint8Array(/** @type{Array} */(xhr.response || []));\n }\n return intArrayFromString(xhr.responseText || '', true);\n };\n var lazyArray = this;\n lazyArray.setDataGetter((chunkNum) => {\n var start = chunkNum * chunkSize;\n var end = (chunkNum+1) * chunkSize - 1; // including this byte\n end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block\n if (typeof lazyArray.chunks[chunkNum] == 'undefined') {\n lazyArray.chunks[chunkNum] = doXHR(start, end);\n }\n if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!');\n return lazyArray.chunks[chunkNum];\n });\n \n if (usesGzip || !datalength) {\n // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length\n chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file\n datalength = this.getter(0).length;\n chunkSize = datalength;\n out(\"LazyFiles on gzip forces download of the whole file when length is accessed\");\n }\n \n this._length = datalength;\n this._chunkSize = chunkSize;\n this.lengthKnown = true;\n }\n get length() {\n if (!this.lengthKnown) {\n this.cacheLength();\n }\n return this._length;\n }\n get chunkSize() {\n if (!this.lengthKnown) {\n this.cacheLength();\n }\n return this._chunkSize;\n }\n }\n \n if (typeof XMLHttpRequest != 'undefined') {\n if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc';\n var lazyArray = new LazyUint8Array();\n var properties = { isDevice: false, contents: lazyArray };\n } else {\n var properties = { isDevice: false, url: url };\n }\n \n var node = FS.createFile(parent, name, properties, canRead, canWrite);\n // This is a total hack, but I want to get this lazy file code out of the\n // core of MEMFS. If we want to keep this lazy file concept I feel it should\n // be its own thin LAZYFS proxying calls to MEMFS.\n if (properties.contents) {\n node.contents = properties.contents;\n } else if (properties.url) {\n node.contents = null;\n node.url = properties.url;\n }\n // Add a function that defers querying the file size until it is asked the first time.\n Object.defineProperties(node, {\n usedBytes: {\n get: function() { return this.contents.length; }\n }\n });\n // override each stream op with one that tries to force load the lazy file first\n var stream_ops = {};\n var keys = Object.keys(node.stream_ops);\n keys.forEach((key) => {\n var fn = node.stream_ops[key];\n stream_ops[key] = (...args) => {\n FS.forceLoadFile(node);\n return fn(...args);\n };\n });\n function writeChunks(stream, buffer, offset, length, position) {\n var contents = stream.node.contents;\n if (position >= contents.length)\n return 0;\n var size = Math.min(contents.length - position, length);\n if (contents.slice) { // normal array\n for (var i = 0; i < size; i++) {\n buffer[offset + i] = contents[position + i];\n }\n } else {\n for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR\n buffer[offset + i] = contents.get(position + i);\n }\n }\n return size;\n }\n // use a custom read function\n stream_ops.read = (stream, buffer, offset, length, position) => {\n FS.forceLoadFile(node);\n return writeChunks(stream, buffer, offset, length, position)\n };\n // use a custom mmap function\n stream_ops.mmap = (stream, length, position, prot, flags) => {\n FS.forceLoadFile(node);\n var ptr = mmapAlloc(length);\n if (!ptr) {\n throw new FS.ErrnoError(48);\n }\n writeChunks(stream, HEAP8, ptr, length, position);\n return { ptr, allocated: true };\n };\n node.stream_ops = stream_ops;\n return node;\n },\n };\n \n var SYSCALLS = {\n DEFAULT_POLLMASK:5,\n calculateAt(dirfd, path, allowEmpty) {\n if (PATH.isAbs(path)) {\n return path;\n }\n // relative path\n var dir;\n if (dirfd === -100) {\n dir = FS.cwd();\n } else {\n var dirstream = SYSCALLS.getStreamFromFD(dirfd);\n dir = dirstream.path;\n }\n if (path.length == 0) {\n if (!allowEmpty) {\n throw new FS.ErrnoError(44);;\n }\n return dir;\n }\n return PATH.join2(dir, path);\n },\n doStat(func, path, buf) {\n var stat = func(path);\n HEAP32[((buf)>>2)] = stat.dev;\n HEAP32[(((buf)+(4))>>2)] = stat.mode;\n HEAPU32[(((buf)+(8))>>2)] = stat.nlink;\n HEAP32[(((buf)+(12))>>2)] = stat.uid;\n HEAP32[(((buf)+(16))>>2)] = stat.gid;\n HEAP32[(((buf)+(20))>>2)] = stat.rdev;\n HEAP64[(((buf)+(24))>>3)] = BigInt(stat.size);\n HEAP32[(((buf)+(32))>>2)] = 4096;\n HEAP32[(((buf)+(36))>>2)] = stat.blocks;\n var atime = stat.atime.getTime();\n var mtime = stat.mtime.getTime();\n var ctime = stat.ctime.getTime();\n HEAP64[(((buf)+(40))>>3)] = BigInt(Math.floor(atime / 1000));\n HEAPU32[(((buf)+(48))>>2)] = (atime % 1000) * 1000 * 1000;\n HEAP64[(((buf)+(56))>>3)] = BigInt(Math.floor(mtime / 1000));\n HEAPU32[(((buf)+(64))>>2)] = (mtime % 1000) * 1000 * 1000;\n HEAP64[(((buf)+(72))>>3)] = BigInt(Math.floor(ctime / 1000));\n HEAPU32[(((buf)+(80))>>2)] = (ctime % 1000) * 1000 * 1000;\n HEAP64[(((buf)+(88))>>3)] = BigInt(stat.ino);\n return 0;\n },\n doMsync(addr, stream, len, flags, offset) {\n if (!FS.isFile(stream.node.mode)) {\n throw new FS.ErrnoError(43);\n }\n if (flags & 2) {\n // MAP_PRIVATE calls need not to be synced back to underlying fs\n return 0;\n }\n var buffer = HEAPU8.slice(addr, addr + len);\n FS.msync(stream, buffer, offset, len, flags);\n },\n getStreamFromFD(fd) {\n var stream = FS.getStreamChecked(fd);\n return stream;\n },\n varargs:undefined,\n getStr(ptr) {\n var ret = UTF8ToString(ptr);\n return ret;\n },\n };\n function ___syscall__newselect(nfds, readfds, writefds, exceptfds, timeout) {\n try {\n \n // readfds are supported,\n // writefds checks socket open status\n // exceptfds are supported, although on web, such exceptional conditions never arise in web sockets\n // and so the exceptfds list will always return empty.\n // timeout is supported, although on SOCKFS and PIPEFS these are ignored and always treated as 0 - fully async\n \n var total = 0;\n \n var srcReadLow = (readfds ? HEAP32[((readfds)>>2)] : 0),\n srcReadHigh = (readfds ? HEAP32[(((readfds)+(4))>>2)] : 0);\n var srcWriteLow = (writefds ? HEAP32[((writefds)>>2)] : 0),\n srcWriteHigh = (writefds ? HEAP32[(((writefds)+(4))>>2)] : 0);\n var srcExceptLow = (exceptfds ? HEAP32[((exceptfds)>>2)] : 0),\n srcExceptHigh = (exceptfds ? HEAP32[(((exceptfds)+(4))>>2)] : 0);\n \n var dstReadLow = 0,\n dstReadHigh = 0;\n var dstWriteLow = 0,\n dstWriteHigh = 0;\n var dstExceptLow = 0,\n dstExceptHigh = 0;\n \n var allLow = (readfds ? HEAP32[((readfds)>>2)] : 0) |\n (writefds ? HEAP32[((writefds)>>2)] : 0) |\n (exceptfds ? HEAP32[((exceptfds)>>2)] : 0);\n var allHigh = (readfds ? HEAP32[(((readfds)+(4))>>2)] : 0) |\n (writefds ? HEAP32[(((writefds)+(4))>>2)] : 0) |\n (exceptfds ? HEAP32[(((exceptfds)+(4))>>2)] : 0);\n \n var check = function(fd, low, high, val) {\n return (fd < 32 ? (low & val) : (high & val));\n };\n \n for (var fd = 0; fd < nfds; fd++) {\n var mask = 1 << (fd % 32);\n if (!(check(fd, allLow, allHigh, mask))) {\n continue; // index isn't in the set\n }\n \n var stream = SYSCALLS.getStreamFromFD(fd);\n \n var flags = SYSCALLS.DEFAULT_POLLMASK;\n \n if (stream.stream_ops.poll) {\n var timeoutInMillis = -1;\n if (timeout) {\n // select(2) is declared to accept \"struct timeval { time_t tv_sec; suseconds_t tv_usec; }\".\n // However, musl passes the two values to the syscall as an array of long values.\n // Note that sizeof(time_t) != sizeof(long) in wasm32. The former is 8, while the latter is 4.\n // This means using \"C_STRUCTS.timeval.tv_usec\" leads to a wrong offset.\n // So, instead, we use POINTER_SIZE.\n var tv_sec = (readfds ? HEAP32[((timeout)>>2)] : 0),\n tv_usec = (readfds ? HEAP32[(((timeout)+(4))>>2)] : 0);\n timeoutInMillis = (tv_sec + tv_usec / 1000000) * 1000;\n }\n flags = stream.stream_ops.poll(stream, timeoutInMillis);\n }\n \n if ((flags & 1) && check(fd, srcReadLow, srcReadHigh, mask)) {\n fd < 32 ? (dstReadLow = dstReadLow | mask) : (dstReadHigh = dstReadHigh | mask);\n total++;\n }\n if ((flags & 4) && check(fd, srcWriteLow, srcWriteHigh, mask)) {\n fd < 32 ? (dstWriteLow = dstWriteLow | mask) : (dstWriteHigh = dstWriteHigh | mask);\n total++;\n }\n if ((flags & 2) && check(fd, srcExceptLow, srcExceptHigh, mask)) {\n fd < 32 ? (dstExceptLow = dstExceptLow | mask) : (dstExceptHigh = dstExceptHigh | mask);\n total++;\n }\n }\n \n if (readfds) {\n HEAP32[((readfds)>>2)] = dstReadLow;\n HEAP32[(((readfds)+(4))>>2)] = dstReadHigh;\n }\n if (writefds) {\n HEAP32[((writefds)>>2)] = dstWriteLow;\n HEAP32[(((writefds)+(4))>>2)] = dstWriteHigh;\n }\n if (exceptfds) {\n HEAP32[((exceptfds)>>2)] = dstExceptLow;\n HEAP32[(((exceptfds)+(4))>>2)] = dstExceptHigh;\n }\n \n return total;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall__newselect.sig = 'iipppp';\n\n var SOCKFS = {\n mount(mount) {\n // If Module['websocket'] has already been defined (e.g. for configuring\n // the subprotocol/url) use that, if not initialise it to a new object.\n Module['websocket'] = (Module['websocket'] &&\n ('object' === typeof Module['websocket'])) ? Module['websocket'] : {};\n \n // Add the Event registration mechanism to the exported websocket configuration\n // object so we can register network callbacks from native JavaScript too.\n // For more documentation see system/include/emscripten/emscripten.h\n Module['websocket']._callbacks = {};\n Module['websocket']['on'] = /** @this{Object} */ function(event, callback) {\n if ('function' === typeof callback) {\n this._callbacks[event] = callback;\n }\n return this;\n };\n \n Module['websocket'].emit = /** @this{Object} */ function(event, param) {\n if ('function' === typeof this._callbacks[event]) {\n this._callbacks[event].call(this, param);\n }\n };\n \n // If debug is enabled register simple default logging callbacks for each Event.\n \n return FS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);\n },\n createSocket(family, type, protocol) {\n type &= ~526336; // Some applications may pass it; it makes no sense for a single process.\n var streaming = type == 1;\n if (streaming && protocol && protocol != 6) {\n throw new FS.ErrnoError(66); // if SOCK_STREAM, must be tcp or 0.\n }\n \n // create our internal socket structure\n var sock = {\n family,\n type,\n protocol,\n server: null,\n error: null, // Used in getsockopt for SOL_SOCKET/SO_ERROR test\n peers: {},\n pending: [],\n recv_queue: [],\n sock_ops: SOCKFS.websocket_sock_ops\n };\n \n // create the filesystem node to store the socket structure\n var name = SOCKFS.nextname();\n var node = FS.createNode(SOCKFS.root, name, 49152, 0);\n node.sock = sock;\n \n // and the wrapping stream that enables library functions such\n // as read and write to indirectly interact with the socket\n var stream = FS.createStream({\n path: name,\n node,\n flags: 2,\n seekable: false,\n stream_ops: SOCKFS.stream_ops\n });\n \n // map the new stream to the socket structure (sockets have a 1:1\n // relationship with a stream)\n sock.stream = stream;\n \n return sock;\n },\n getSocket(fd) {\n var stream = FS.getStream(fd);\n if (!stream || !FS.isSocket(stream.node.mode)) {\n return null;\n }\n return stream.node.sock;\n },\n stream_ops:{\n poll(stream) {\n var sock = stream.node.sock;\n return sock.sock_ops.poll(sock);\n },\n ioctl(stream, request, varargs) {\n var sock = stream.node.sock;\n return sock.sock_ops.ioctl(sock, request, varargs);\n },\n read(stream, buffer, offset, length, position /* ignored */) {\n var sock = stream.node.sock;\n var msg = sock.sock_ops.recvmsg(sock, length);\n if (!msg) {\n // socket is closed\n return 0;\n }\n buffer.set(msg.buffer, offset);\n return msg.buffer.length;\n },\n write(stream, buffer, offset, length, position /* ignored */) {\n var sock = stream.node.sock;\n return sock.sock_ops.sendmsg(sock, buffer, offset, length);\n },\n close(stream) {\n var sock = stream.node.sock;\n sock.sock_ops.close(sock);\n },\n },\n nextname() {\n if (!SOCKFS.nextname.current) {\n SOCKFS.nextname.current = 0;\n }\n return 'socket[' + (SOCKFS.nextname.current++) + ']';\n },\n websocket_sock_ops:{\n createPeer(sock, addr, port) {\n var ws;\n \n if (typeof addr == 'object') {\n ws = addr;\n addr = null;\n port = null;\n }\n \n if (ws) {\n // for sockets that've already connected (e.g. we're the server)\n // we can inspect the _socket property for the address\n if (ws._socket) {\n addr = ws._socket.remoteAddress;\n port = ws._socket.remotePort;\n }\n // if we're just now initializing a connection to the remote,\n // inspect the url property\n else {\n var result = /ws[s]?:\\/\\/([^:]+):(\\d+)/.exec(ws.url);\n if (!result) {\n throw new Error('WebSocket URL must be in the format ws(s)://address:port');\n }\n addr = result[1];\n port = parseInt(result[2], 10);\n }\n } else {\n // create the actual websocket object and connect\n try {\n // runtimeConfig gets set to true if WebSocket runtime configuration is available.\n var runtimeConfig = (Module['websocket'] && ('object' === typeof Module['websocket']));\n \n // The default value is 'ws://' the replace is needed because the compiler replaces '//' comments with '#'\n // comments without checking context, so we'd end up with ws:#, the replace swaps the '#' for '//' again.\n var url = 'ws:#'.replace('#', '//');\n \n if (runtimeConfig) {\n if ('string' === typeof Module['websocket']['url']) {\n url = Module['websocket']['url']; // Fetch runtime WebSocket URL config.\n }\n }\n \n if (url === 'ws://' || url === 'wss://') { // Is the supplied URL config just a prefix, if so complete it.\n var parts = addr.split('/');\n url = url + parts[0] + \":\" + port + \"/\" + parts.slice(1).join('/');\n }\n \n // Make the WebSocket subprotocol (Sec-WebSocket-Protocol) default to binary if no configuration is set.\n var subProtocols = 'binary'; // The default value is 'binary'\n \n if (runtimeConfig) {\n if ('string' === typeof Module['websocket']['subprotocol']) {\n subProtocols = Module['websocket']['subprotocol']; // Fetch runtime WebSocket subprotocol config.\n }\n }\n \n // The default WebSocket options\n var opts = undefined;\n \n if (subProtocols !== 'null') {\n // The regex trims the string (removes spaces at the beginning and end, then splits the string by\n // , into an Array. Whitespace removal is important for Websockify and ws.\n subProtocols = subProtocols.replace(/^ +| +$/g,\"\").split(/ *, */);\n \n opts = subProtocols;\n }\n \n // some webservers (azure) does not support subprotocol header\n if (runtimeConfig && null === Module['websocket']['subprotocol']) {\n subProtocols = 'null';\n opts = undefined;\n }\n \n // If node we use the ws library.\n var WebSocketConstructor;\n if (ENVIRONMENT_IS_NODE) {\n WebSocketConstructor = /** @type{(typeof WebSocket)} */(require('ws'));\n } else\n {\n WebSocketConstructor = WebSocket;\n }\n ws = new WebSocketConstructor(url, opts);\n ws.binaryType = 'arraybuffer';\n } catch (e) {\n throw new FS.ErrnoError(23);\n }\n }\n \n var peer = {\n addr,\n port,\n socket: ws,\n dgram_send_queue: []\n };\n \n SOCKFS.websocket_sock_ops.addPeer(sock, peer);\n SOCKFS.websocket_sock_ops.handlePeerEvents(sock, peer);\n \n // if this is a bound dgram socket, send the port number first to allow\n // us to override the ephemeral port reported to us by remotePort on the\n // remote end.\n if (sock.type === 2 && typeof sock.sport != 'undefined') {\n peer.dgram_send_queue.push(new Uint8Array([\n 255, 255, 255, 255,\n 'p'.charCodeAt(0), 'o'.charCodeAt(0), 'r'.charCodeAt(0), 't'.charCodeAt(0),\n ((sock.sport & 0xff00) >> 8) , (sock.sport & 0xff)\n ]));\n }\n \n return peer;\n },\n getPeer(sock, addr, port) {\n return sock.peers[addr + ':' + port];\n },\n addPeer(sock, peer) {\n sock.peers[peer.addr + ':' + peer.port] = peer;\n },\n removePeer(sock, peer) {\n delete sock.peers[peer.addr + ':' + peer.port];\n },\n handlePeerEvents(sock, peer) {\n var first = true;\n \n var handleOpen = function () {\n \n Module['websocket'].emit('open', sock.stream.fd);\n \n try {\n var queued = peer.dgram_send_queue.shift();\n while (queued) {\n peer.socket.send(queued);\n queued = peer.dgram_send_queue.shift();\n }\n } catch (e) {\n // not much we can do here in the way of proper error handling as we've already\n // lied and said this data was sent. shut it down.\n peer.socket.close();\n }\n };\n \n function handleMessage(data) {\n if (typeof data == 'string') {\n var encoder = new TextEncoder(); // should be utf-8\n data = encoder.encode(data); // make a typed array from the string\n } else {\n assert(data.byteLength !== undefined); // must receive an ArrayBuffer\n if (data.byteLength == 0) {\n // An empty ArrayBuffer will emit a pseudo disconnect event\n // as recv/recvmsg will return zero which indicates that a socket\n // has performed a shutdown although the connection has not been disconnected yet.\n return;\n }\n data = new Uint8Array(data); // make a typed array view on the array buffer\n }\n \n // if this is the port message, override the peer's port with it\n var wasfirst = first;\n first = false;\n if (wasfirst &&\n data.length === 10 &&\n data[0] === 255 && data[1] === 255 && data[2] === 255 && data[3] === 255 &&\n data[4] === 'p'.charCodeAt(0) && data[5] === 'o'.charCodeAt(0) && data[6] === 'r'.charCodeAt(0) && data[7] === 't'.charCodeAt(0)) {\n // update the peer's port and it's key in the peer map\n var newport = ((data[8] << 8) | data[9]);\n SOCKFS.websocket_sock_ops.removePeer(sock, peer);\n peer.port = newport;\n SOCKFS.websocket_sock_ops.addPeer(sock, peer);\n return;\n }\n \n sock.recv_queue.push({ addr: peer.addr, port: peer.port, data: data });\n Module['websocket'].emit('message', sock.stream.fd);\n };\n \n if (ENVIRONMENT_IS_NODE) {\n peer.socket.on('open', handleOpen);\n peer.socket.on('message', function(data, isBinary) {\n if (!isBinary) {\n return;\n }\n handleMessage((new Uint8Array(data)).buffer); // copy from node Buffer -> ArrayBuffer\n });\n peer.socket.on('close', function() {\n Module['websocket'].emit('close', sock.stream.fd);\n });\n peer.socket.on('error', function(error) {\n // Although the ws library may pass errors that may be more descriptive than\n // ECONNREFUSED they are not necessarily the expected error code e.g.\n // ENOTFOUND on getaddrinfo seems to be node.js specific, so using ECONNREFUSED\n // is still probably the most useful thing to do.\n sock.error = 14; // Used in getsockopt for SOL_SOCKET/SO_ERROR test.\n Module['websocket'].emit('error', [sock.stream.fd, sock.error, 'ECONNREFUSED: Connection refused']);\n // don't throw\n });\n } else {\n peer.socket.onopen = handleOpen;\n peer.socket.onclose = function() {\n Module['websocket'].emit('close', sock.stream.fd);\n };\n peer.socket.onmessage = function peer_socket_onmessage(event) {\n handleMessage(event.data);\n };\n peer.socket.onerror = function(error) {\n // The WebSocket spec only allows a 'simple event' to be thrown on error,\n // so we only really know as much as ECONNREFUSED.\n sock.error = 14; // Used in getsockopt for SOL_SOCKET/SO_ERROR test.\n Module['websocket'].emit('error', [sock.stream.fd, sock.error, 'ECONNREFUSED: Connection refused']);\n };\n }\n },\n poll(sock) {\n if (sock.type === 1 && sock.server) {\n // listen sockets should only say they're available for reading\n // if there are pending clients.\n return sock.pending.length ? (64 | 1) : 0;\n }\n \n var mask = 0;\n var dest = sock.type === 1 ? // we only care about the socket state for connection-based sockets\n SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport) :\n null;\n \n if (sock.recv_queue.length ||\n !dest || // connection-less sockets are always ready to read\n (dest && dest.socket.readyState === dest.socket.CLOSING) ||\n (dest && dest.socket.readyState === dest.socket.CLOSED)) { // let recv return 0 once closed\n mask |= (64 | 1);\n }\n \n if (!dest || // connection-less sockets are always ready to write\n (dest && dest.socket.readyState === dest.socket.OPEN)) {\n mask |= 4;\n }\n \n if ((dest && dest.socket.readyState === dest.socket.CLOSING) ||\n (dest && dest.socket.readyState === dest.socket.CLOSED)) {\n mask |= 16;\n }\n \n return mask;\n },\n ioctl(sock, request, arg) {\n switch (request) {\n case 21531:\n var bytes = 0;\n if (sock.recv_queue.length) {\n bytes = sock.recv_queue[0].data.length;\n }\n HEAP32[((arg)>>2)] = bytes;\n return 0;\n default:\n return 28;\n }\n },\n close(sock) {\n // if we've spawned a listen server, close it\n if (sock.server) {\n try {\n sock.server.close();\n } catch (e) {\n }\n sock.server = null;\n }\n // close any peer connections\n var peers = Object.keys(sock.peers);\n for (var i = 0; i < peers.length; i++) {\n var peer = sock.peers[peers[i]];\n try {\n peer.socket.close();\n } catch (e) {\n }\n SOCKFS.websocket_sock_ops.removePeer(sock, peer);\n }\n return 0;\n },\n bind(sock, addr, port) {\n if (typeof sock.saddr != 'undefined' || typeof sock.sport != 'undefined') {\n throw new FS.ErrnoError(28); // already bound\n }\n sock.saddr = addr;\n sock.sport = port;\n // in order to emulate dgram sockets, we need to launch a listen server when\n // binding on a connection-less socket\n // note: this is only required on the server side\n if (sock.type === 2) {\n // close the existing server if it exists\n if (sock.server) {\n sock.server.close();\n sock.server = null;\n }\n // swallow error operation not supported error that occurs when binding in the\n // browser where this isn't supported\n try {\n sock.sock_ops.listen(sock, 0);\n } catch (e) {\n if (!(e.name === 'ErrnoError')) throw e;\n if (e.errno !== 138) throw e;\n }\n }\n },\n connect(sock, addr, port) {\n if (sock.server) {\n throw new FS.ErrnoError(138);\n }\n \n // TODO autobind\n // if (!sock.addr && sock.type == 2) {\n // }\n \n // early out if we're already connected / in the middle of connecting\n if (typeof sock.daddr != 'undefined' && typeof sock.dport != 'undefined') {\n var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport);\n if (dest) {\n if (dest.socket.readyState === dest.socket.CONNECTING) {\n throw new FS.ErrnoError(7);\n } else {\n throw new FS.ErrnoError(30);\n }\n }\n }\n \n // add the socket to our peer list and set our\n // destination address / port to match\n var peer = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port);\n sock.daddr = peer.addr;\n sock.dport = peer.port;\n \n // always \"fail\" in non-blocking mode\n throw new FS.ErrnoError(26);\n },\n listen(sock, backlog) {\n if (!ENVIRONMENT_IS_NODE) {\n throw new FS.ErrnoError(138);\n }\n if (sock.server) {\n throw new FS.ErrnoError(28); // already listening\n }\n var WebSocketServer = require('ws').Server;\n var host = sock.saddr;\n sock.server = new WebSocketServer({\n host,\n port: sock.sport\n // TODO support backlog\n });\n Module['websocket'].emit('listen', sock.stream.fd); // Send Event with listen fd.\n \n sock.server.on('connection', function(ws) {\n if (sock.type === 1) {\n var newsock = SOCKFS.createSocket(sock.family, sock.type, sock.protocol);\n \n // create a peer on the new socket\n var peer = SOCKFS.websocket_sock_ops.createPeer(newsock, ws);\n newsock.daddr = peer.addr;\n newsock.dport = peer.port;\n \n // push to queue for accept to pick up\n sock.pending.push(newsock);\n Module['websocket'].emit('connection', newsock.stream.fd);\n } else {\n // create a peer on the listen socket so calling sendto\n // with the listen socket and an address will resolve\n // to the correct client\n SOCKFS.websocket_sock_ops.createPeer(sock, ws);\n Module['websocket'].emit('connection', sock.stream.fd);\n }\n });\n sock.server.on('close', function() {\n Module['websocket'].emit('close', sock.stream.fd);\n sock.server = null;\n });\n sock.server.on('error', function(error) {\n // Although the ws library may pass errors that may be more descriptive than\n // ECONNREFUSED they are not necessarily the expected error code e.g.\n // ENOTFOUND on getaddrinfo seems to be node.js specific, so using EHOSTUNREACH\n // is still probably the most useful thing to do. This error shouldn't\n // occur in a well written app as errors should get trapped in the compiled\n // app's own getaddrinfo call.\n sock.error = 23; // Used in getsockopt for SOL_SOCKET/SO_ERROR test.\n Module['websocket'].emit('error', [sock.stream.fd, sock.error, 'EHOSTUNREACH: Host is unreachable']);\n // don't throw\n });\n },\n accept(listensock) {\n if (!listensock.server || !listensock.pending.length) {\n throw new FS.ErrnoError(28);\n }\n var newsock = listensock.pending.shift();\n newsock.stream.flags = listensock.stream.flags;\n return newsock;\n },\n getname(sock, peer) {\n var addr, port;\n if (peer) {\n if (sock.daddr === undefined || sock.dport === undefined) {\n throw new FS.ErrnoError(53);\n }\n addr = sock.daddr;\n port = sock.dport;\n } else {\n // TODO saddr and sport will be set for bind()'d UDP sockets, but what\n // should we be returning for TCP sockets that've been connect()'d?\n addr = sock.saddr || 0;\n port = sock.sport || 0;\n }\n return { addr, port };\n },\n sendmsg(sock, buffer, offset, length, addr, port) {\n if (sock.type === 2) {\n // connection-less sockets will honor the message address,\n // and otherwise fall back to the bound destination address\n if (addr === undefined || port === undefined) {\n addr = sock.daddr;\n port = sock.dport;\n }\n // if there was no address to fall back to, error out\n if (addr === undefined || port === undefined) {\n throw new FS.ErrnoError(17);\n }\n } else {\n // connection-based sockets will only use the bound\n addr = sock.daddr;\n port = sock.dport;\n }\n \n // find the peer for the destination address\n var dest = SOCKFS.websocket_sock_ops.getPeer(sock, addr, port);\n \n // early out if not connected with a connection-based socket\n if (sock.type === 1) {\n if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {\n throw new FS.ErrnoError(53);\n } else if (dest.socket.readyState === dest.socket.CONNECTING) {\n throw new FS.ErrnoError(6);\n }\n }\n \n // create a copy of the incoming data to send, as the WebSocket API\n // doesn't work entirely with an ArrayBufferView, it'll just send\n // the entire underlying buffer\n if (ArrayBuffer.isView(buffer)) {\n offset += buffer.byteOffset;\n buffer = buffer.buffer;\n }\n \n var data;\n data = buffer.slice(offset, offset + length);\n \n // if we're emulating a connection-less dgram socket and don't have\n // a cached connection, queue the buffer to send upon connect and\n // lie, saying the data was sent now.\n if (sock.type === 2) {\n if (!dest || dest.socket.readyState !== dest.socket.OPEN) {\n // if we're not connected, open a new connection\n if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {\n dest = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port);\n }\n dest.dgram_send_queue.push(data);\n return length;\n }\n }\n \n try {\n // send the actual data\n dest.socket.send(data);\n return length;\n } catch (e) {\n throw new FS.ErrnoError(28);\n }\n },\n recvmsg(sock, length) {\n // http://pubs.opengroup.org/onlinepubs/7908799/xns/recvmsg.html\n if (sock.type === 1 && sock.server) {\n // tcp servers should not be recv()'ing on the listen socket\n throw new FS.ErrnoError(53);\n }\n \n var queued = sock.recv_queue.shift();\n if (!queued) {\n if (sock.type === 1) {\n var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport);\n \n if (!dest) {\n // if we have a destination address but are not connected, error out\n throw new FS.ErrnoError(53);\n }\n if (dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {\n // return null if the socket has closed\n return null;\n }\n // else, our socket is in a valid state but truly has nothing available\n throw new FS.ErrnoError(6);\n }\n throw new FS.ErrnoError(6);\n }\n \n // queued.data will be an ArrayBuffer if it's unadulterated, but if it's\n // requeued TCP data it'll be an ArrayBufferView\n var queuedLength = queued.data.byteLength || queued.data.length;\n var queuedOffset = queued.data.byteOffset || 0;\n var queuedBuffer = queued.data.buffer || queued.data;\n var bytesRead = Math.min(length, queuedLength);\n var res = {\n buffer: new Uint8Array(queuedBuffer, queuedOffset, bytesRead),\n addr: queued.addr,\n port: queued.port\n };\n \n // push back any unread data for TCP connections\n if (sock.type === 1 && bytesRead < queuedLength) {\n var bytesRemaining = queuedLength - bytesRead;\n queued.data = new Uint8Array(queuedBuffer, queuedOffset + bytesRead, bytesRemaining);\n sock.recv_queue.unshift(queued);\n }\n \n return res;\n },\n },\n };\n \n var getSocketFromFD = (fd) => {\n var socket = SOCKFS.getSocket(fd);\n if (!socket) throw new FS.ErrnoError(8);\n return socket;\n };\n \n var Sockets = {\n BUFFER_SIZE:10240,\n MAX_BUFFER_SIZE:10485760,\n nextFd:1,\n fds:{\n },\n nextport:1,\n maxport:65535,\n peer:null,\n connections:{\n },\n portmap:{\n },\n localAddr:4261412874,\n addrPool:[33554442,50331658,67108874,83886090,100663306,117440522,134217738,150994954,167772170,184549386,201326602,218103818,234881034],\n };\n \n var inetNtop4 = (addr) => {\n return (addr & 0xff) + '.' + ((addr >> 8) & 0xff) + '.' + ((addr >> 16) & 0xff) + '.' + ((addr >> 24) & 0xff)\n };\n \n \n var inetNtop6 = (ints) => {\n // ref: http://www.ietf.org/rfc/rfc2373.txt - section 2.5.4\n // Format for IPv4 compatible and mapped 128-bit IPv6 Addresses\n // 128-bits are split into eight 16-bit words\n // stored in network byte order (big-endian)\n // | 80 bits | 16 | 32 bits |\n // +-----------------------------------------------------------------+\n // | 10 bytes | 2 | 4 bytes |\n // +--------------------------------------+--------------------------+\n // + 5 words | 1 | 2 words |\n // +--------------------------------------+--------------------------+\n // |0000..............................0000|0000| IPv4 ADDRESS | (compatible)\n // +--------------------------------------+----+---------------------+\n // |0000..............................0000|FFFF| IPv4 ADDRESS | (mapped)\n // +--------------------------------------+----+---------------------+\n var str = \"\";\n var word = 0;\n var longest = 0;\n var lastzero = 0;\n var zstart = 0;\n var len = 0;\n var i = 0;\n var parts = [\n ints[0] & 0xffff,\n (ints[0] >> 16),\n ints[1] & 0xffff,\n (ints[1] >> 16),\n ints[2] & 0xffff,\n (ints[2] >> 16),\n ints[3] & 0xffff,\n (ints[3] >> 16)\n ];\n \n // Handle IPv4-compatible, IPv4-mapped, loopback and any/unspecified addresses\n \n var hasipv4 = true;\n var v4part = \"\";\n // check if the 10 high-order bytes are all zeros (first 5 words)\n for (i = 0; i < 5; i++) {\n if (parts[i] !== 0) { hasipv4 = false; break; }\n }\n \n if (hasipv4) {\n // low-order 32-bits store an IPv4 address (bytes 13 to 16) (last 2 words)\n v4part = inetNtop4(parts[6] | (parts[7] << 16));\n // IPv4-mapped IPv6 address if 16-bit value (bytes 11 and 12) == 0xFFFF (6th word)\n if (parts[5] === -1) {\n str = \"::ffff:\";\n str += v4part;\n return str;\n }\n // IPv4-compatible IPv6 address if 16-bit value (bytes 11 and 12) == 0x0000 (6th word)\n if (parts[5] === 0) {\n str = \"::\";\n //special case IPv6 addresses\n if (v4part === \"0.0.0.0\") v4part = \"\"; // any/unspecified address\n if (v4part === \"0.0.0.1\") v4part = \"1\";// loopback address\n str += v4part;\n return str;\n }\n }\n \n // Handle all other IPv6 addresses\n \n // first run to find the longest contiguous zero words\n for (word = 0; word < 8; word++) {\n if (parts[word] === 0) {\n if (word - lastzero > 1) {\n len = 0;\n }\n lastzero = word;\n len++;\n }\n if (len > longest) {\n longest = len;\n zstart = word - longest + 1;\n }\n }\n \n for (word = 0; word < 8; word++) {\n if (longest > 1) {\n // compress contiguous zeros - to produce \"::\"\n if (parts[word] === 0 && word >= zstart && word < (zstart + longest) ) {\n if (word === zstart) {\n str += \":\";\n if (zstart === 0) str += \":\"; //leading zeros case\n }\n continue;\n }\n }\n // converts 16-bit words from big-endian to little-endian before converting to hex string\n str += Number(_ntohs(parts[word] & 0xffff)).toString(16);\n str += word < 7 ? \":\" : \"\";\n }\n return str;\n };\n \n var readSockaddr = (sa, salen) => {\n // family / port offsets are common to both sockaddr_in and sockaddr_in6\n var family = HEAP16[((sa)>>1)];\n var port = _ntohs(HEAPU16[(((sa)+(2))>>1)]);\n var addr;\n \n switch (family) {\n case 2:\n if (salen !== 16) {\n return { errno: 28 };\n }\n addr = HEAP32[(((sa)+(4))>>2)];\n addr = inetNtop4(addr);\n break;\n case 10:\n if (salen !== 28) {\n return { errno: 28 };\n }\n addr = [\n HEAP32[(((sa)+(8))>>2)],\n HEAP32[(((sa)+(12))>>2)],\n HEAP32[(((sa)+(16))>>2)],\n HEAP32[(((sa)+(20))>>2)]\n ];\n addr = inetNtop6(addr);\n break;\n default:\n return { errno: 5 };\n }\n \n return { family: family, addr: addr, port: port };\n };\n \n \n var inetPton4 = (str) => {\n var b = str.split('.');\n for (var i = 0; i < 4; i++) {\n var tmp = Number(b[i]);\n if (isNaN(tmp)) return null;\n b[i] = tmp;\n }\n return (b[0] | (b[1] << 8) | (b[2] << 16) | (b[3] << 24)) >>> 0;\n };\n \n \n /** @suppress {checkTypes} */\n var jstoi_q = (str) => parseInt(str);\n var inetPton6 = (str) => {\n var words;\n var w, offset, z, i;\n /* http://home.deds.nl/~aeron/regex/ */\n var valid6regx = /^((?=.*::)(?!.*::.+::)(::)?([\\dA-F]{1,4}:(:|\\b)|){5}|([\\dA-F]{1,4}:){6})((([\\dA-F]{1,4}((?!\\3)::|:\\b|$))|(?!\\2\\3)){2}|(((2[0-4]|1\\d|[1-9])?\\d|25[0-5])\\.?\\b){4})$/i\n var parts = [];\n if (!valid6regx.test(str)) {\n return null;\n }\n if (str === \"::\") {\n return [0, 0, 0, 0, 0, 0, 0, 0];\n }\n // Z placeholder to keep track of zeros when splitting the string on \":\"\n if (str.startsWith(\"::\")) {\n str = str.replace(\"::\", \"Z:\"); // leading zeros case\n } else {\n str = str.replace(\"::\", \":Z:\");\n }\n \n if (str.indexOf(\".\") > 0) {\n // parse IPv4 embedded stress\n str = str.replace(new RegExp('[.]', 'g'), \":\");\n words = str.split(\":\");\n words[words.length-4] = jstoi_q(words[words.length-4]) + jstoi_q(words[words.length-3])*256;\n words[words.length-3] = jstoi_q(words[words.length-2]) + jstoi_q(words[words.length-1])*256;\n words = words.slice(0, words.length-2);\n } else {\n words = str.split(\":\");\n }\n \n offset = 0; z = 0;\n for (w=0; w < words.length; w++) {\n if (typeof words[w] == 'string') {\n if (words[w] === 'Z') {\n // compressed zeros - write appropriate number of zero words\n for (z = 0; z < (8 - words.length+1); z++) {\n parts[w+z] = 0;\n }\n offset = z-1;\n } else {\n // parse hex to field to 16-bit value and write it in network byte-order\n parts[w+offset] = _htons(parseInt(words[w],16));\n }\n } else {\n // parsed IPv4 words\n parts[w+offset] = words[w];\n }\n }\n return [\n (parts[1] << 16) | parts[0],\n (parts[3] << 16) | parts[2],\n (parts[5] << 16) | parts[4],\n (parts[7] << 16) | parts[6]\n ];\n };\n var DNS = {\n address_map:{\n id:1,\n addrs:{\n },\n names:{\n },\n },\n lookup_name(name) {\n // If the name is already a valid ipv4 / ipv6 address, don't generate a fake one.\n var res = inetPton4(name);\n if (res !== null) {\n return name;\n }\n res = inetPton6(name);\n if (res !== null) {\n return name;\n }\n \n // See if this name is already mapped.\n var addr;\n \n if (DNS.address_map.addrs[name]) {\n addr = DNS.address_map.addrs[name];\n } else {\n var id = DNS.address_map.id++;\n assert(id < 65535, 'exceeded max address mappings of 65535');\n \n addr = '172.29.' + (id & 0xff) + '.' + (id & 0xff00);\n \n DNS.address_map.names[addr] = name;\n DNS.address_map.addrs[name] = addr;\n }\n \n return addr;\n },\n lookup_addr(addr) {\n if (DNS.address_map.names[addr]) {\n return DNS.address_map.names[addr];\n }\n \n return null;\n },\n };\n var getSocketAddress = (addrp, addrlen) => {\n var info = readSockaddr(addrp, addrlen);\n if (info.errno) throw new FS.ErrnoError(info.errno);\n info.addr = DNS.lookup_addr(info.addr) || info.addr;\n return info;\n };\n function ___syscall_bind(fd, addr, addrlen, d1, d2, d3) {\n try {\n \n var sock = getSocketFromFD(fd);\n var info = getSocketAddress(addr, addrlen);\n sock.sock_ops.bind(sock, info.addr, info.port);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_bind.sig = 'iippiii';\n\n function ___syscall_chdir(path) {\n try {\n \n path = SYSCALLS.getStr(path);\n FS.chdir(path);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_chdir.sig = 'ip';\n\n function ___syscall_chmod(path, mode) {\n try {\n \n path = SYSCALLS.getStr(path);\n FS.chmod(path, mode);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_chmod.sig = 'ipi';\n\n \n function ___syscall_connect(fd, addr, addrlen, d1, d2, d3) {\n try {\n \n var sock = getSocketFromFD(fd);\n var info = getSocketAddress(addr, addrlen);\n sock.sock_ops.connect(sock, info.addr, info.port);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_connect.sig = 'iippiii';\n\n function ___syscall_dup(fd) {\n try {\n \n var old = SYSCALLS.getStreamFromFD(fd);\n return FS.dupStream(old).fd;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_dup.sig = 'ii';\n\n function ___syscall_dup3(fd, newfd, flags) {\n try {\n \n var old = SYSCALLS.getStreamFromFD(fd);\n if (old.fd === newfd) return -28;\n // Check newfd is within range of valid open file descriptors.\n if (newfd < 0 || newfd >= FS.MAX_OPEN_FDS) return -8;\n var existing = FS.getStream(newfd);\n if (existing) FS.close(existing);\n return FS.dupStream(old, newfd).fd;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_dup3.sig = 'iiii';\n\n function ___syscall_faccessat(dirfd, path, amode, flags) {\n try {\n \n path = SYSCALLS.getStr(path);\n path = SYSCALLS.calculateAt(dirfd, path);\n if (amode & ~7) {\n // need a valid mode\n return -28;\n }\n var lookup = FS.lookupPath(path, { follow: true });\n var node = lookup.node;\n if (!node) {\n return -44;\n }\n var perms = '';\n if (amode & 4) perms += 'r';\n if (amode & 2) perms += 'w';\n if (amode & 1) perms += 'x';\n if (perms /* otherwise, they've just passed F_OK */ && FS.nodePermissions(node, perms)) {\n return -2;\n }\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_faccessat.sig = 'iipii';\n\n var ___syscall_fadvise64 = (fd, offset, len, advice) => {\n return 0; // your advice is important to us (but we can't use it)\n };\n ___syscall_fadvise64.sig = 'iijji';\n\n \n var INT53_MAX = 9007199254740992;\n \n var INT53_MIN = -9007199254740992;\n var bigintToI53Checked = (num) => (num < INT53_MIN || num > INT53_MAX) ? NaN : Number(num);\n function ___syscall_fallocate(fd, mode, offset, len) {\n offset = bigintToI53Checked(offset);\n len = bigintToI53Checked(len);\n \n \n try {\n \n if (isNaN(offset)) return 61;\n var stream = SYSCALLS.getStreamFromFD(fd)\n FS.allocate(stream, offset, len);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n ;\n }\n ___syscall_fallocate.sig = 'iiijj';\n\n /** @suppress {duplicate } */\n function syscallGetVarargI() {\n // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number.\n var ret = HEAP32[((+SYSCALLS.varargs)>>2)];\n SYSCALLS.varargs += 4;\n return ret;\n }\n var syscallGetVarargP = syscallGetVarargI;\n \n \n function ___syscall_fcntl64(fd, cmd, varargs) {\n SYSCALLS.varargs = varargs;\n try {\n \n var stream = SYSCALLS.getStreamFromFD(fd);\n switch (cmd) {\n case 0: {\n var arg = syscallGetVarargI();\n if (arg < 0) {\n return -28;\n }\n while (FS.streams[arg]) {\n arg++;\n }\n var newStream;\n newStream = FS.dupStream(stream, arg);\n return newStream.fd;\n }\n case 1:\n case 2:\n return 0; // FD_CLOEXEC makes no sense for a single process.\n case 3:\n return stream.flags;\n case 4: {\n var arg = syscallGetVarargI();\n stream.flags |= arg;\n return 0;\n }\n case 12: {\n var arg = syscallGetVarargP();\n var offset = 0;\n // We're always unlocked.\n HEAP16[(((arg)+(offset))>>1)] = 2;\n return 0;\n }\n case 13:\n case 14:\n return 0; // Pretend that the locking is successful.\n }\n return -28;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_fcntl64.sig = 'iiip';\n\n function ___syscall_fdatasync(fd) {\n try {\n \n var stream = SYSCALLS.getStreamFromFD(fd);\n return 0; // we can't do anything synchronously; the in-memory FS is already synced to\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_fdatasync.sig = 'ii';\n\n function ___syscall_fstat64(fd, buf) {\n try {\n \n var stream = SYSCALLS.getStreamFromFD(fd);\n return SYSCALLS.doStat(FS.stat, stream.path, buf);\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_fstat64.sig = 'iip';\n\n function ___syscall_ftruncate64(fd, length) {\n length = bigintToI53Checked(length);\n \n \n try {\n \n if (isNaN(length)) return 61;\n FS.ftruncate(fd, length);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n ;\n }\n ___syscall_ftruncate64.sig = 'iij';\n\n \n var stringToUTF8 = (str, outPtr, maxBytesToWrite) => {\n return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);\n };\n function ___syscall_getcwd(buf, size) {\n try {\n \n if (size === 0) return -28;\n var cwd = FS.cwd();\n var cwdLengthInBytes = lengthBytesUTF8(cwd) + 1;\n if (size < cwdLengthInBytes) return -68;\n stringToUTF8(cwd, buf, size);\n return cwdLengthInBytes;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_getcwd.sig = 'ipp';\n\n \n function ___syscall_getdents64(fd, dirp, count) {\n try {\n \n var stream = SYSCALLS.getStreamFromFD(fd)\n stream.getdents ||= FS.readdir(stream.path);\n \n var struct_size = 280;\n var pos = 0;\n var off = FS.llseek(stream, 0, 1);\n \n var idx = Math.floor(off / struct_size);\n \n while (idx < stream.getdents.length && pos + struct_size <= count) {\n var id;\n var type;\n var name = stream.getdents[idx];\n if (name === '.') {\n id = stream.node.id;\n type = 4; // DT_DIR\n }\n else if (name === '..') {\n var lookup = FS.lookupPath(stream.path, { parent: true });\n id = lookup.node.id;\n type = 4; // DT_DIR\n }\n else {\n var child = FS.lookupNode(stream.node, name);\n id = child.id;\n type = FS.isChrdev(child.mode) ? 2 : // DT_CHR, character device.\n FS.isDir(child.mode) ? 4 : // DT_DIR, directory.\n FS.isLink(child.mode) ? 10 : // DT_LNK, symbolic link.\n 8; // DT_REG, regular file.\n }\n HEAP64[((dirp + pos)>>3)] = BigInt(id);\n HEAP64[(((dirp + pos)+(8))>>3)] = BigInt((idx + 1) * struct_size);\n HEAP16[(((dirp + pos)+(16))>>1)] = 280;\n HEAP8[(dirp + pos)+(18)] = type;\n stringToUTF8(name, dirp + pos + 19, 256);\n pos += struct_size;\n idx += 1;\n }\n FS.llseek(stream, idx * struct_size, 0);\n return pos;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_getdents64.sig = 'iipp';\n\n \n \n \n \n \n /** @param {number=} addrlen */\n var writeSockaddr = (sa, family, addr, port, addrlen) => {\n switch (family) {\n case 2:\n addr = inetPton4(addr);\n zeroMemory(sa, 16);\n if (addrlen) {\n HEAP32[((addrlen)>>2)] = 16;\n }\n HEAP16[((sa)>>1)] = family;\n HEAP32[(((sa)+(4))>>2)] = addr;\n HEAP16[(((sa)+(2))>>1)] = _htons(port);\n break;\n case 10:\n addr = inetPton6(addr);\n zeroMemory(sa, 28);\n if (addrlen) {\n HEAP32[((addrlen)>>2)] = 28;\n }\n HEAP32[((sa)>>2)] = family;\n HEAP32[(((sa)+(8))>>2)] = addr[0];\n HEAP32[(((sa)+(12))>>2)] = addr[1];\n HEAP32[(((sa)+(16))>>2)] = addr[2];\n HEAP32[(((sa)+(20))>>2)] = addr[3];\n HEAP16[(((sa)+(2))>>1)] = _htons(port);\n break;\n default:\n return 5;\n }\n return 0;\n };\n \n function ___syscall_getsockname(fd, addr, addrlen, d1, d2, d3) {\n try {\n \n var sock = getSocketFromFD(fd);\n // TODO: sock.saddr should never be undefined, see TODO in websocket_sock_ops.getname\n var errno = writeSockaddr(addr, sock.family, DNS.lookup_name(sock.saddr || '0.0.0.0'), sock.sport, addrlen);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_getsockname.sig = 'iippiii';\n\n function ___syscall_getsockopt(fd, level, optname, optval, optlen, d1) {\n try {\n \n var sock = getSocketFromFD(fd);\n // Minimal getsockopt aimed at resolving https://github.com/emscripten-core/emscripten/issues/2211\n // so only supports SOL_SOCKET with SO_ERROR.\n if (level === 1) {\n if (optname === 4) {\n HEAP32[((optval)>>2)] = sock.error;\n HEAP32[((optlen)>>2)] = 4;\n sock.error = null; // Clear the error (The SO_ERROR option obtains and then clears this field).\n return 0;\n }\n }\n return -50; // The option is unknown at the level indicated.\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_getsockopt.sig = 'iiiippi';\n\n \n function ___syscall_ioctl(fd, op, varargs) {\n SYSCALLS.varargs = varargs;\n try {\n \n var stream = SYSCALLS.getStreamFromFD(fd);\n switch (op) {\n case 21509: {\n if (!stream.tty) return -59;\n return 0;\n }\n case 21505: {\n if (!stream.tty) return -59;\n if (stream.tty.ops.ioctl_tcgets) {\n var termios = stream.tty.ops.ioctl_tcgets(stream);\n var argp = syscallGetVarargP();\n HEAP32[((argp)>>2)] = termios.c_iflag || 0;\n HEAP32[(((argp)+(4))>>2)] = termios.c_oflag || 0;\n HEAP32[(((argp)+(8))>>2)] = termios.c_cflag || 0;\n HEAP32[(((argp)+(12))>>2)] = termios.c_lflag || 0;\n for (var i = 0; i < 32; i++) {\n HEAP8[(argp + i)+(17)] = termios.c_cc[i] || 0;\n }\n return 0;\n }\n return 0;\n }\n case 21510:\n case 21511:\n case 21512: {\n if (!stream.tty) return -59;\n return 0; // no-op, not actually adjusting terminal settings\n }\n case 21506:\n case 21507:\n case 21508: {\n if (!stream.tty) return -59;\n if (stream.tty.ops.ioctl_tcsets) {\n var argp = syscallGetVarargP();\n var c_iflag = HEAP32[((argp)>>2)];\n var c_oflag = HEAP32[(((argp)+(4))>>2)];\n var c_cflag = HEAP32[(((argp)+(8))>>2)];\n var c_lflag = HEAP32[(((argp)+(12))>>2)];\n var c_cc = []\n for (var i = 0; i < 32; i++) {\n c_cc.push(HEAP8[(argp + i)+(17)]);\n }\n return stream.tty.ops.ioctl_tcsets(stream.tty, op, { c_iflag, c_oflag, c_cflag, c_lflag, c_cc });\n }\n return 0; // no-op, not actually adjusting terminal settings\n }\n case 21519: {\n if (!stream.tty) return -59;\n var argp = syscallGetVarargP();\n HEAP32[((argp)>>2)] = 0;\n return 0;\n }\n case 21520: {\n if (!stream.tty) return -59;\n return -28; // not supported\n }\n case 21531: {\n var argp = syscallGetVarargP();\n return FS.ioctl(stream, op, argp);\n }\n case 21523: {\n // TODO: in theory we should write to the winsize struct that gets\n // passed in, but for now musl doesn't read anything on it\n if (!stream.tty) return -59;\n if (stream.tty.ops && stream.tty.ops.ioctl_tiocgwinsz) {\n var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty);\n var argp = syscallGetVarargP();\n HEAP16[((argp)>>1)] = winsize[0];\n HEAP16[(((argp)+(2))>>1)] = winsize[1];\n }\n return 0;\n }\n case 21524: {\n // TODO: technically, this ioctl call should change the window size.\n // but, since emscripten doesn't have any concept of a terminal window\n // yet, we'll just silently throw it away as we do TIOCGWINSZ\n if (!stream.tty) return -59;\n return 0;\n }\n case 21515: {\n if (!stream.tty) return -59;\n return 0;\n }\n default: return -28; // not supported\n }\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_ioctl.sig = 'iiip';\n\n function ___syscall_lstat64(path, buf) {\n try {\n \n path = SYSCALLS.getStr(path);\n return SYSCALLS.doStat(FS.lstat, path, buf);\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_lstat64.sig = 'ipp';\n\n function ___syscall_mkdirat(dirfd, path, mode) {\n try {\n \n path = SYSCALLS.getStr(path);\n path = SYSCALLS.calculateAt(dirfd, path);\n // remove a trailing slash, if one - /a/b/ has basename of '', but\n // we want to create b in the context of this function\n path = PATH.normalize(path);\n if (path[path.length-1] === '/') path = path.substr(0, path.length-1);\n FS.mkdir(path, mode, 0);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_mkdirat.sig = 'iipi';\n\n function ___syscall_newfstatat(dirfd, path, buf, flags) {\n try {\n \n path = SYSCALLS.getStr(path);\n var nofollow = flags & 256;\n var allowEmpty = flags & 4096;\n flags = flags & (~6400);\n path = SYSCALLS.calculateAt(dirfd, path, allowEmpty);\n return SYSCALLS.doStat(nofollow ? FS.lstat : FS.stat, path, buf);\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_newfstatat.sig = 'iippi';\n\n \n function ___syscall_openat(dirfd, path, flags, varargs) {\n SYSCALLS.varargs = varargs;\n try {\n \n path = SYSCALLS.getStr(path);\n path = SYSCALLS.calculateAt(dirfd, path);\n var mode = varargs ? syscallGetVarargI() : 0;\n return FS.open(path, flags, mode).fd;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_openat.sig = 'iipip';\n\n var PIPEFS = {\n BUCKET_BUFFER_SIZE:8192,\n mount(mount) {\n // Do not pollute the real root directory or its child nodes with pipes\n // Looks like it is OK to create another pseudo-root node not linked to the FS.root hierarchy this way\n return FS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);\n },\n createPipe() {\n var pipe = {\n buckets: [],\n // refcnt 2 because pipe has a read end and a write end. We need to be\n // able to read from the read end after write end is closed.\n refcnt : 2,\n };\n \n pipe.buckets.push({\n buffer: new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),\n offset: 0,\n roffset: 0\n });\n \n var rName = PIPEFS.nextname();\n var wName = PIPEFS.nextname();\n var rNode = FS.createNode(PIPEFS.root, rName, 4096, 0);\n var wNode = FS.createNode(PIPEFS.root, wName, 4096, 0);\n \n rNode.pipe = pipe;\n wNode.pipe = pipe;\n \n var readableStream = FS.createStream({\n path: rName,\n node: rNode,\n flags: 0,\n seekable: false,\n stream_ops: PIPEFS.stream_ops\n });\n rNode.stream = readableStream;\n \n var writableStream = FS.createStream({\n path: wName,\n node: wNode,\n flags: 1,\n seekable: false,\n stream_ops: PIPEFS.stream_ops\n });\n wNode.stream = writableStream;\n \n return {\n readable_fd: readableStream.fd,\n writable_fd: writableStream.fd\n };\n },\n stream_ops:{\n poll(stream) {\n var pipe = stream.node.pipe;\n \n if ((stream.flags & 2097155) === 1) {\n return (256 | 4);\n }\n if (pipe.buckets.length > 0) {\n for (var i = 0; i < pipe.buckets.length; i++) {\n var bucket = pipe.buckets[i];\n if (bucket.offset - bucket.roffset > 0) {\n return (64 | 1);\n }\n }\n }\n \n return 0;\n },\n ioctl(stream, request, varargs) {\n return 28;\n },\n fsync(stream) {\n return 28;\n },\n read(stream, buffer, offset, length, position /* ignored */) {\n var pipe = stream.node.pipe;\n var currentLength = 0;\n \n for (var i = 0; i < pipe.buckets.length; i++) {\n var bucket = pipe.buckets[i];\n currentLength += bucket.offset - bucket.roffset;\n }\n \n var data = buffer.subarray(offset, offset + length);\n \n if (length <= 0) {\n return 0;\n }\n if (currentLength == 0) {\n // Behave as if the read end is always non-blocking\n throw new FS.ErrnoError(6);\n }\n var toRead = Math.min(currentLength, length);\n \n var totalRead = toRead;\n var toRemove = 0;\n \n for (var i = 0; i < pipe.buckets.length; i++) {\n var currBucket = pipe.buckets[i];\n var bucketSize = currBucket.offset - currBucket.roffset;\n \n if (toRead <= bucketSize) {\n var tmpSlice = currBucket.buffer.subarray(currBucket.roffset, currBucket.offset);\n if (toRead < bucketSize) {\n tmpSlice = tmpSlice.subarray(0, toRead);\n currBucket.roffset += toRead;\n } else {\n toRemove++;\n }\n data.set(tmpSlice);\n break;\n } else {\n var tmpSlice = currBucket.buffer.subarray(currBucket.roffset, currBucket.offset);\n data.set(tmpSlice);\n data = data.subarray(tmpSlice.byteLength);\n toRead -= tmpSlice.byteLength;\n toRemove++;\n }\n }\n \n if (toRemove && toRemove == pipe.buckets.length) {\n // Do not generate excessive garbage in use cases such as\n // write several bytes, read everything, write several bytes, read everything...\n toRemove--;\n pipe.buckets[toRemove].offset = 0;\n pipe.buckets[toRemove].roffset = 0;\n }\n \n pipe.buckets.splice(0, toRemove);\n \n return totalRead;\n },\n write(stream, buffer, offset, length, position /* ignored */) {\n var pipe = stream.node.pipe;\n \n var data = buffer.subarray(offset, offset + length);\n \n var dataLen = data.byteLength;\n if (dataLen <= 0) {\n return 0;\n }\n \n var currBucket = null;\n \n if (pipe.buckets.length == 0) {\n currBucket = {\n buffer: new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),\n offset: 0,\n roffset: 0\n };\n pipe.buckets.push(currBucket);\n } else {\n currBucket = pipe.buckets[pipe.buckets.length - 1];\n }\n \n assert(currBucket.offset <= PIPEFS.BUCKET_BUFFER_SIZE);\n \n var freeBytesInCurrBuffer = PIPEFS.BUCKET_BUFFER_SIZE - currBucket.offset;\n if (freeBytesInCurrBuffer >= dataLen) {\n currBucket.buffer.set(data, currBucket.offset);\n currBucket.offset += dataLen;\n return dataLen;\n } else if (freeBytesInCurrBuffer > 0) {\n currBucket.buffer.set(data.subarray(0, freeBytesInCurrBuffer), currBucket.offset);\n currBucket.offset += freeBytesInCurrBuffer;\n data = data.subarray(freeBytesInCurrBuffer, data.byteLength);\n }\n \n var numBuckets = (data.byteLength / PIPEFS.BUCKET_BUFFER_SIZE) | 0;\n var remElements = data.byteLength % PIPEFS.BUCKET_BUFFER_SIZE;\n \n for (var i = 0; i < numBuckets; i++) {\n var newBucket = {\n buffer: new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),\n offset: PIPEFS.BUCKET_BUFFER_SIZE,\n roffset: 0\n };\n pipe.buckets.push(newBucket);\n newBucket.buffer.set(data.subarray(0, PIPEFS.BUCKET_BUFFER_SIZE));\n data = data.subarray(PIPEFS.BUCKET_BUFFER_SIZE, data.byteLength);\n }\n \n if (remElements > 0) {\n var newBucket = {\n buffer: new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),\n offset: data.byteLength,\n roffset: 0\n };\n pipe.buckets.push(newBucket);\n newBucket.buffer.set(data);\n }\n \n return dataLen;\n },\n close(stream) {\n var pipe = stream.node.pipe;\n pipe.refcnt--;\n if (pipe.refcnt === 0) {\n pipe.buckets = null;\n }\n },\n },\n nextname() {\n if (!PIPEFS.nextname.current) {\n PIPEFS.nextname.current = 0;\n }\n return 'pipe[' + (PIPEFS.nextname.current++) + ']';\n },\n };\n function ___syscall_pipe(fdPtr) {\n try {\n \n if (fdPtr == 0) {\n throw new FS.ErrnoError(21);\n }\n \n var res = PIPEFS.createPipe();\n \n HEAP32[((fdPtr)>>2)] = res.readable_fd;\n HEAP32[(((fdPtr)+(4))>>2)] = res.writable_fd;\n \n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_pipe.sig = 'ip';\n\n function ___syscall_poll(fds, nfds, timeout) {\n try {\n \n var nonzero = 0;\n for (var i = 0; i < nfds; i++) {\n var pollfd = fds + 8 * i;\n var fd = HEAP32[((pollfd)>>2)];\n var events = HEAP16[(((pollfd)+(4))>>1)];\n var mask = 32;\n var stream = FS.getStream(fd);\n if (stream) {\n mask = SYSCALLS.DEFAULT_POLLMASK;\n if (stream.stream_ops.poll) {\n mask = stream.stream_ops.poll(stream, -1);\n }\n }\n mask &= events | 8 | 16;\n if (mask) nonzero++;\n HEAP16[(((pollfd)+(6))>>1)] = mask;\n }\n return nonzero;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_poll.sig = 'ipii';\n\n \n \n function ___syscall_readlinkat(dirfd, path, buf, bufsize) {\n try {\n \n path = SYSCALLS.getStr(path);\n path = SYSCALLS.calculateAt(dirfd, path);\n if (bufsize <= 0) return -28;\n var ret = FS.readlink(path);\n \n var len = Math.min(bufsize, lengthBytesUTF8(ret));\n var endChar = HEAP8[buf+len];\n stringToUTF8(ret, buf, bufsize+1);\n // readlink is one of the rare functions that write out a C string, but does never append a null to the output buffer(!)\n // stringToUTF8() always appends a null byte, so restore the character under the null byte after the write.\n HEAP8[buf+len] = endChar;\n return len;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_readlinkat.sig = 'iippp';\n\n \n \n function ___syscall_recvfrom(fd, buf, len, flags, addr, addrlen) {\n try {\n \n var sock = getSocketFromFD(fd);\n var msg = sock.sock_ops.recvmsg(sock, len);\n if (!msg) return 0; // socket is closed\n if (addr) {\n var errno = writeSockaddr(addr, sock.family, DNS.lookup_name(msg.addr), msg.port, addrlen);\n }\n HEAPU8.set(msg.buffer, buf);\n return msg.buffer.byteLength;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_recvfrom.sig = 'iippipp';\n\n function ___syscall_renameat(olddirfd, oldpath, newdirfd, newpath) {\n try {\n \n oldpath = SYSCALLS.getStr(oldpath);\n newpath = SYSCALLS.getStr(newpath);\n oldpath = SYSCALLS.calculateAt(olddirfd, oldpath);\n newpath = SYSCALLS.calculateAt(newdirfd, newpath);\n FS.rename(oldpath, newpath);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_renameat.sig = 'iipip';\n\n function ___syscall_rmdir(path) {\n try {\n \n path = SYSCALLS.getStr(path);\n FS.rmdir(path);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_rmdir.sig = 'ip';\n\n \n function ___syscall_sendto(fd, message, length, flags, addr, addr_len) {\n try {\n \n var sock = getSocketFromFD(fd);\n if (!addr) {\n // send, no address provided\n return FS.write(sock.stream, HEAP8, message, length);\n }\n var dest = getSocketAddress(addr, addr_len);\n // sendto an address\n return sock.sock_ops.sendmsg(sock, HEAP8, message, length, dest.addr, dest.port);\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_sendto.sig = 'iippipp';\n\n function ___syscall_socket(domain, type, protocol) {\n try {\n \n var sock = SOCKFS.createSocket(domain, type, protocol);\n return sock.stream.fd;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_socket.sig = 'iiiiiii';\n\n function ___syscall_stat64(path, buf) {\n try {\n \n path = SYSCALLS.getStr(path);\n return SYSCALLS.doStat(FS.stat, path, buf);\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_stat64.sig = 'ipp';\n\n function ___syscall_symlink(target, linkpath) {\n try {\n \n target = SYSCALLS.getStr(target);\n linkpath = SYSCALLS.getStr(linkpath);\n FS.symlink(target, linkpath);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_symlink.sig = 'ipp';\n\n \n function ___syscall_truncate64(path, length) {\n length = bigintToI53Checked(length);\n \n \n try {\n \n if (isNaN(length)) return 61;\n path = SYSCALLS.getStr(path);\n FS.truncate(path, length);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n ;\n }\n ___syscall_truncate64.sig = 'ipj';\n\n function ___syscall_unlinkat(dirfd, path, flags) {\n try {\n \n path = SYSCALLS.getStr(path);\n path = SYSCALLS.calculateAt(dirfd, path);\n if (flags === 0) {\n FS.unlink(path);\n } else if (flags === 512) {\n FS.rmdir(path);\n } else {\n abort('Invalid flags passed to unlinkat');\n }\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n }\n ___syscall_unlinkat.sig = 'iipi';\n\n var ___table_base = new WebAssembly.Global({'value': 'i32', 'mutable': false}, 1);\n\n var __abort_js = () => {\n abort('');\n };\n __abort_js.sig = 'v';\n\n var ENV = {\n };\n \n \n \n \n var stackAlloc = (sz) => __emscripten_stack_alloc(sz);\n var stringToUTF8OnStack = (str) => {\n var size = lengthBytesUTF8(str) + 1;\n var ret = stackAlloc(size);\n stringToUTF8(str, ret, size);\n return ret;\n };\n \n \n var dlSetError = (msg) => {\n var sp = stackSave();\n var cmsg = stringToUTF8OnStack(msg);\n ___dl_seterr(cmsg, 0);\n stackRestore(sp);\n };\n \n \n var dlopenInternal = (handle, jsflags) => {\n // void *dlopen(const char *file, int mode);\n // http://pubs.opengroup.org/onlinepubs/009695399/functions/dlopen.html\n var filename = UTF8ToString(handle + 36);\n var flags = HEAP32[(((handle)+(4))>>2)];\n filename = PATH.normalize(filename);\n var searchpaths = [];\n \n var global = Boolean(flags & 256);\n var localScope = global ? null : {};\n \n // We don't care about RTLD_NOW and RTLD_LAZY.\n var combinedFlags = {\n global,\n nodelete: Boolean(flags & 4096),\n loadAsync: jsflags.loadAsync,\n }\n \n if (jsflags.loadAsync) {\n return loadDynamicLibrary(filename, combinedFlags, localScope, handle);\n }\n \n try {\n return loadDynamicLibrary(filename, combinedFlags, localScope, handle)\n } catch (e) {\n dlSetError(`Could not load dynamic lib: ${filename}\\n${e}`);\n return 0;\n }\n };\n var __dlopen_js = (handle) => {\n return dlopenInternal(handle, { loadAsync: false });\n };\n __dlopen_js.sig = 'pp';\n\n \n \n \n var __dlsym_js = (handle, symbol, symbolIndex) => {\n // void *dlsym(void *restrict handle, const char *restrict name);\n // http://pubs.opengroup.org/onlinepubs/009695399/functions/dlsym.html\n symbol = UTF8ToString(symbol);\n var result;\n var newSymIndex;\n \n var lib = LDSO.loadedLibsByHandle[handle];\n if (!lib.exports.hasOwnProperty(symbol) || lib.exports[symbol].stub) {\n dlSetError(`Tried to lookup unknown symbol \"${symbol}\" in dynamic lib: ${lib.name}`)\n return 0;\n }\n newSymIndex = Object.keys(lib.exports).indexOf(symbol);\n result = lib.exports[symbol];\n \n if (typeof result == 'function') {\n \n var addr = getFunctionAddress(result);\n if (addr) {\n result = addr;\n } else {\n // Insert the function into the wasm table. If its a direct wasm\n // function the second argument will not be needed. If its a JS\n // function we rely on the `sig` attribute being set based on the\n // `__sig` specified in library JS file.\n result = addFunction(result, result.sig);\n HEAPU32[((symbolIndex)>>2)] = newSymIndex;\n }\n }\n return result;\n };\n __dlsym_js.sig = 'pppp';\n\n var nowIsMonotonic = 1;\n var __emscripten_get_now_is_monotonic = () => nowIsMonotonic;\n __emscripten_get_now_is_monotonic.sig = 'i';\n\n var __emscripten_runtime_keepalive_clear = () => {\n noExitRuntime = false;\n runtimeKeepaliveCounter = 0;\n };\n __emscripten_runtime_keepalive_clear.sig = 'v';\n\n var __emscripten_system = (command) => {\n if (ENVIRONMENT_IS_NODE) {\n if (!command) return 1; // shell is available\n \n var cmdstr = UTF8ToString(command);\n if (!cmdstr.length) return 0; // this is what glibc seems to do (shell works test?)\n \n var cp = require('child_process');\n var ret = cp.spawnSync(cmdstr, [], {shell:true, stdio:'inherit'});\n \n var _W_EXITCODE = (ret, sig) => ((ret) << 8 | (sig));\n \n // this really only can happen if process is killed by signal\n if (ret.status === null) {\n // sadly node doesn't expose such function\n var signalToNumber = (sig) => {\n // implement only the most common ones, and fallback to SIGINT\n switch (sig) {\n case 'SIGHUP': return 1;\n case 'SIGQUIT': return 3;\n case 'SIGFPE': return 8;\n case 'SIGKILL': return 9;\n case 'SIGALRM': return 14;\n case 'SIGTERM': return 15;\n default: return 2;\n }\n }\n return _W_EXITCODE(0, signalToNumber(ret.signal));\n }\n \n return _W_EXITCODE(ret.status, 0);\n }\n // int system(const char *command);\n // http://pubs.opengroup.org/onlinepubs/000095399/functions/system.html\n // Can't call external programs.\n if (!command) return 0; // no shell available\n return -52;\n };\n __emscripten_system.sig = 'ip';\n\n var __emscripten_throw_longjmp = () => {\n throw Infinity;\n };\n __emscripten_throw_longjmp.sig = 'v';\n\n function __gmtime_js(time, tmPtr) {\n time = bigintToI53Checked(time);\n \n \n var date = new Date(time * 1000);\n HEAP32[((tmPtr)>>2)] = date.getUTCSeconds();\n HEAP32[(((tmPtr)+(4))>>2)] = date.getUTCMinutes();\n HEAP32[(((tmPtr)+(8))>>2)] = date.getUTCHours();\n HEAP32[(((tmPtr)+(12))>>2)] = date.getUTCDate();\n HEAP32[(((tmPtr)+(16))>>2)] = date.getUTCMonth();\n HEAP32[(((tmPtr)+(20))>>2)] = date.getUTCFullYear()-1900;\n HEAP32[(((tmPtr)+(24))>>2)] = date.getUTCDay();\n var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0);\n var yday = ((date.getTime() - start) / (1000 * 60 * 60 * 24))|0;\n HEAP32[(((tmPtr)+(28))>>2)] = yday;\n ;\n }\n __gmtime_js.sig = 'vjp';\n\n var isLeapYear = (year) => year%4 === 0 && (year%100 !== 0 || year%400 === 0);\n \n var MONTH_DAYS_LEAP_CUMULATIVE = [0,31,60,91,121,152,182,213,244,274,305,335];\n \n var MONTH_DAYS_REGULAR_CUMULATIVE = [0,31,59,90,120,151,181,212,243,273,304,334];\n var ydayFromDate = (date) => {\n var leap = isLeapYear(date.getFullYear());\n var monthDaysCumulative = (leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE);\n var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; // -1 since it's days since Jan 1\n \n return yday;\n };\n \n function __localtime_js(time, tmPtr) {\n time = bigintToI53Checked(time);\n \n \n var date = new Date(time*1000);\n HEAP32[((tmPtr)>>2)] = date.getSeconds();\n HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes();\n HEAP32[(((tmPtr)+(8))>>2)] = date.getHours();\n HEAP32[(((tmPtr)+(12))>>2)] = date.getDate();\n HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth();\n HEAP32[(((tmPtr)+(20))>>2)] = date.getFullYear()-1900;\n HEAP32[(((tmPtr)+(24))>>2)] = date.getDay();\n \n var yday = ydayFromDate(date)|0;\n HEAP32[(((tmPtr)+(28))>>2)] = yday;\n HEAP32[(((tmPtr)+(36))>>2)] = -(date.getTimezoneOffset() * 60);\n \n // Attention: DST is in December in South, and some regions don't have DST at all.\n var start = new Date(date.getFullYear(), 0, 1);\n var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset();\n var winterOffset = start.getTimezoneOffset();\n var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0;\n HEAP32[(((tmPtr)+(32))>>2)] = dst;\n ;\n }\n __localtime_js.sig = 'vjp';\n\n \n \n \n \n \n function __mmap_js(len, prot, flags, fd, offset, allocated, addr) {\n offset = bigintToI53Checked(offset);\n \n \n try {\n \n if (isNaN(offset)) return 61;\n var stream = SYSCALLS.getStreamFromFD(fd);\n var res = FS.mmap(stream, len, offset, prot, flags);\n var ptr = res.ptr;\n HEAP32[((allocated)>>2)] = res.allocated;\n HEAPU32[((addr)>>2)] = ptr;\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n ;\n }\n __mmap_js.sig = 'ipiiijpp';\n\n \n function __munmap_js(addr, len, prot, flags, fd, offset) {\n offset = bigintToI53Checked(offset);\n \n \n try {\n \n var stream = SYSCALLS.getStreamFromFD(fd);\n if (prot & 2) {\n SYSCALLS.doMsync(addr, stream, len, flags, offset);\n }\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n ;\n }\n __munmap_js.sig = 'ippiiij';\n\n var timers = {\n };\n \n var handleException = (e) => {\n // Certain exception types we do not treat as errors since they are used for\n // internal control flow.\n // 1. ExitStatus, which is thrown by exit()\n // 2. \"unwind\", which is thrown by emscripten_unwind_to_js_event_loop() and others\n // that wish to return to JS event loop.\n if (e instanceof ExitStatus || e == 'unwind') {\n return EXITSTATUS;\n }\n quit_(1, e);\n };\n \n \n var runtimeKeepaliveCounter = 0;\n var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0;\n var _proc_exit = (code) => {\n EXITSTATUS = code;\n if (!keepRuntimeAlive()) {\n Module['onExit']?.(code);\n ABORT = true;\n }\n quit_(code, new ExitStatus(code));\n };\n _proc_exit.sig = 'vi';\n /** @suppress {duplicate } */\n /** @param {boolean|number=} implicit */\n var exitJS = (status, implicit) => {\n EXITSTATUS = status;\n \n _proc_exit(status);\n };\n var _exit = exitJS;\n _exit.sig = 'vi';\n \n \n var maybeExit = () => {\n if (!keepRuntimeAlive()) {\n try {\n _exit(EXITSTATUS);\n } catch (e) {\n handleException(e);\n }\n }\n };\n var callUserCallback = (func) => {\n if (ABORT) {\n return;\n }\n try {\n func();\n maybeExit();\n } catch (e) {\n handleException(e);\n }\n };\n \n \n var _emscripten_get_now = () => performance.now();\n _emscripten_get_now.sig = 'd';\n var __setitimer_js = (which, timeout_ms) => {\n // First, clear any existing timer.\n if (timers[which]) {\n clearTimeout(timers[which].id);\n delete timers[which];\n }\n \n // A timeout of zero simply cancels the current timeout so we have nothing\n // more to do.\n if (!timeout_ms) return 0;\n \n var id = setTimeout(() => {\n delete timers[which];\n callUserCallback(() => __emscripten_timeout(which, _emscripten_get_now()));\n }, timeout_ms);\n timers[which] = { id, timeout_ms };\n return 0;\n };\n __setitimer_js.sig = 'iid';\n\n var __tzset_js = (timezone, daylight, std_name, dst_name) => {\n // TODO: Use (malleable) environment variables instead of system settings.\n var currentYear = new Date().getFullYear();\n var winter = new Date(currentYear, 0, 1);\n var summer = new Date(currentYear, 6, 1);\n var winterOffset = winter.getTimezoneOffset();\n var summerOffset = summer.getTimezoneOffset();\n \n // Local standard timezone offset. Local standard time is not adjusted for\n // daylight savings. This code uses the fact that getTimezoneOffset returns\n // a greater value during Standard Time versus Daylight Saving Time (DST).\n // Thus it determines the expected output during Standard Time, and it\n // compares whether the output of the given date the same (Standard) or less\n // (DST).\n var stdTimezoneOffset = Math.max(winterOffset, summerOffset);\n \n // timezone is specified as seconds west of UTC (\"The external variable\n // `timezone` shall be set to the difference, in seconds, between\n // Coordinated Universal Time (UTC) and local standard time.\"), the same\n // as returned by stdTimezoneOffset.\n // See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html\n HEAPU32[((timezone)>>2)] = stdTimezoneOffset * 60;\n \n HEAP32[((daylight)>>2)] = Number(winterOffset != summerOffset);\n \n var extractZone = (timezoneOffset) => {\n // Why inverse sign?\n // Read here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset\n var sign = timezoneOffset >= 0 ? \"-\" : \"+\";\n \n var absOffset = Math.abs(timezoneOffset)\n var hours = String(Math.floor(absOffset / 60)).padStart(2, \"0\");\n var minutes = String(absOffset % 60).padStart(2, \"0\");\n \n return `UTC${sign}${hours}${minutes}`;\n }\n \n var winterName = extractZone(winterOffset);\n var summerName = extractZone(summerOffset);\n if (summerOffset < winterOffset) {\n // Northern hemisphere\n stringToUTF8(winterName, std_name, 17);\n stringToUTF8(summerName, dst_name, 17);\n } else {\n stringToUTF8(winterName, dst_name, 17);\n stringToUTF8(summerName, std_name, 17);\n }\n };\n __tzset_js.sig = 'vpppp';\n\n var readEmAsmArgsArray = [];\n var readEmAsmArgs = (sigPtr, buf) => {\n readEmAsmArgsArray.length = 0;\n var ch;\n // Most arguments are i32s, so shift the buffer pointer so it is a plain\n // index into HEAP32.\n while (ch = HEAPU8[sigPtr++]) {\n // Floats are always passed as doubles, so all types except for 'i'\n // are 8 bytes and require alignment.\n var wide = (ch != 105);\n wide &= (ch != 112);\n buf += wide && (buf % 8) ? 4 : 0;\n readEmAsmArgsArray.push(\n // Special case for pointers under wasm64 or CAN_ADDRESS_2GB mode.\n ch == 112 ? HEAPU32[((buf)>>2)] :\n ch == 106 ? HEAP64[((buf)>>3)] :\n ch == 105 ?\n HEAP32[((buf)>>2)] :\n HEAPF64[((buf)>>3)]\n );\n buf += wide ? 8 : 4;\n }\n return readEmAsmArgsArray;\n };\n var runEmAsmFunction = (code, sigPtr, argbuf) => {\n var args = readEmAsmArgs(sigPtr, argbuf);\n return ASM_CONSTS[code](...args);\n };\n var _emscripten_asm_const_int = (code, sigPtr, argbuf) => {\n return runEmAsmFunction(code, sigPtr, argbuf);\n };\n _emscripten_asm_const_int.sig = 'ippp';\n\n var _emscripten_date_now = () => Date.now();\n _emscripten_date_now.sig = 'd';\n\n \n \n var _emscripten_force_exit = (status) => {\n __emscripten_runtime_keepalive_clear();\n _exit(status);\n };\n _emscripten_force_exit.sig = 'vi';\n\n\n var getHeapMax = () =>\n // Stay one Wasm page short of 4GB: while e.g. Chrome is able to allocate\n // full 4GB Wasm memories, the size will wrap back to 0 bytes in Wasm side\n // for any code that deals with heap sizes, which would require special\n // casing all heap size related code to treat 0 specially.\n 2147483648;\n \n \n var growMemory = (size) => {\n var b = wasmMemory.buffer;\n var pages = (size - b.byteLength + 65535) / 65536;\n try {\n // round size grow request up to wasm page size (fixed 64KB per spec)\n wasmMemory.grow(pages); // .grow() takes a delta compared to the previous size\n updateMemoryViews();\n return 1 /*success*/;\n } catch(e) {\n }\n // implicit 0 return to save code size (caller will cast \"undefined\" into 0\n // anyhow)\n };\n var _emscripten_resize_heap = (requestedSize) => {\n var oldSize = HEAPU8.length;\n // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned.\n requestedSize >>>= 0;\n // With multithreaded builds, races can happen (another thread might increase the size\n // in between), so return a failure, and let the caller retry.\n \n // Memory resize rules:\n // 1. Always increase heap size to at least the requested size, rounded up\n // to next page multiple.\n // 2a. If MEMORY_GROWTH_LINEAR_STEP == -1, excessively resize the heap\n // geometrically: increase the heap size according to\n // MEMORY_GROWTH_GEOMETRIC_STEP factor (default +20%), At most\n // overreserve by MEMORY_GROWTH_GEOMETRIC_CAP bytes (default 96MB).\n // 2b. If MEMORY_GROWTH_LINEAR_STEP != -1, excessively resize the heap\n // linearly: increase the heap size by at least\n // MEMORY_GROWTH_LINEAR_STEP bytes.\n // 3. Max size for the heap is capped at 2048MB-WASM_PAGE_SIZE, or by\n // MAXIMUM_MEMORY, or by ASAN limit, depending on which is smallest\n // 4. If we were unable to allocate as much memory, it may be due to\n // over-eager decision to excessively reserve due to (3) above.\n // Hence if an allocation fails, cut down on the amount of excess\n // growth, in an attempt to succeed to perform a smaller allocation.\n \n // A limit is set for how much we can grow. We should not exceed that\n // (the wasm binary specifies it, so if we tried, we'd fail anyhow).\n var maxHeapSize = getHeapMax();\n if (requestedSize > maxHeapSize) {\n return false;\n }\n \n // Loop through potential heap size increases. If we attempt a too eager\n // reservation that fails, cut down on the attempted size and reserve a\n // smaller bump instead. (max 3 times, chosen somewhat arbitrarily)\n for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {\n var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); // ensure geometric growth\n // but limit overreserving (default to capping at +96MB overgrowth at most)\n overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296 );\n \n var newSize = Math.min(maxHeapSize, alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536));\n \n var replacement = growMemory(newSize);\n if (replacement) {\n \n return true;\n }\n }\n return false;\n };\n _emscripten_resize_heap.sig = 'ip';\n\n \n \n var _emscripten_set_main_loop_timing = (mode, value) => {\n MainLoop.timingMode = mode;\n MainLoop.timingValue = value;\n \n if (!MainLoop.func) {\n return 1; // Return non-zero on failure, can't set timing mode when there is no main loop.\n }\n \n if (!MainLoop.running) {\n \n MainLoop.running = true;\n }\n if (mode == 0) {\n MainLoop.scheduler = function MainLoop_scheduler_setTimeout() {\n var timeUntilNextTick = Math.max(0, MainLoop.tickStartTime + value - _emscripten_get_now())|0;\n setTimeout(MainLoop.runner, timeUntilNextTick); // doing this each time means that on exception, we stop\n };\n MainLoop.method = 'timeout';\n } else if (mode == 1) {\n MainLoop.scheduler = function MainLoop_scheduler_rAF() {\n MainLoop.requestAnimationFrame(MainLoop.runner);\n };\n MainLoop.method = 'rAF';\n } else if (mode == 2) {\n if (typeof MainLoop.setImmediate == 'undefined') {\n if (typeof setImmediate == 'undefined') {\n // Emulate setImmediate. (note: not a complete polyfill, we don't emulate clearImmediate() to keep code size to minimum, since not needed)\n var setImmediates = [];\n var emscriptenMainLoopMessageId = 'setimmediate';\n /** @param {Event} event */\n var MainLoop_setImmediate_messageHandler = (event) => {\n // When called in current thread or Worker, the main loop ID is structured slightly different to accommodate for --proxy-to-worker runtime listening to Worker events,\n // so check for both cases.\n if (event.data === emscriptenMainLoopMessageId || event.data.target === emscriptenMainLoopMessageId) {\n event.stopPropagation();\n setImmediates.shift()();\n }\n };\n addEventListener(\"message\", MainLoop_setImmediate_messageHandler, true);\n MainLoop.setImmediate = /** @type{function(function(): ?, ...?): number} */((func) => {\n setImmediates.push(func);\n if (ENVIRONMENT_IS_WORKER) {\n Module['setImmediates'] ??= [];\n Module['setImmediates'].push(func);\n postMessage({target: emscriptenMainLoopMessageId}); // In --proxy-to-worker, route the message via proxyClient.js\n } else postMessage(emscriptenMainLoopMessageId, \"*\"); // On the main thread, can just send the message to itself.\n });\n } else {\n MainLoop.setImmediate = setImmediate;\n }\n }\n MainLoop.scheduler = function MainLoop_scheduler_setImmediate() {\n MainLoop.setImmediate(MainLoop.runner);\n };\n MainLoop.method = 'immediate';\n }\n return 0;\n };\n _emscripten_set_main_loop_timing.sig = 'iii';\n var MainLoop = {\n running:false,\n scheduler:null,\n method:\"\",\n currentlyRunningMainloop:0,\n func:null,\n arg:0,\n timingMode:0,\n timingValue:0,\n currentFrameNumber:0,\n queue:[],\n preMainLoop:[],\n postMainLoop:[],\n pause() {\n MainLoop.scheduler = null;\n // Incrementing this signals the previous main loop that it's now become old, and it must return.\n MainLoop.currentlyRunningMainloop++;\n },\n resume() {\n MainLoop.currentlyRunningMainloop++;\n var timingMode = MainLoop.timingMode;\n var timingValue = MainLoop.timingValue;\n var func = MainLoop.func;\n MainLoop.func = null;\n // do not set timing and call scheduler, we will do it on the next lines\n setMainLoop(func, 0, false, MainLoop.arg, true);\n _emscripten_set_main_loop_timing(timingMode, timingValue);\n MainLoop.scheduler();\n },\n updateStatus() {\n if (Module['setStatus']) {\n var message = Module['statusMessage'] || 'Please wait...';\n var remaining = MainLoop.remainingBlockers ?? 0;\n var expected = MainLoop.expectedBlockers ?? 0;\n if (remaining) {\n if (remaining < expected) {\n Module['setStatus'](`{message} ({expected - remaining}/{expected})`);\n } else {\n Module['setStatus'](message);\n }\n } else {\n Module['setStatus']('');\n }\n }\n },\n init() {\n Module['preMainLoop'] && MainLoop.preMainLoop.push(Module['preMainLoop']);\n Module['postMainLoop'] && MainLoop.postMainLoop.push(Module['postMainLoop']);\n },\n runIter(func) {\n if (ABORT) return;\n for (var pre of MainLoop.preMainLoop) {\n if (pre() === false) {\n return; // |return false| skips a frame\n }\n }\n callUserCallback(func);\n for (var post of MainLoop.postMainLoop) {\n post();\n }\n },\n nextRAF:0,\n fakeRequestAnimationFrame(func) {\n // try to keep 60fps between calls to here\n var now = Date.now();\n if (MainLoop.nextRAF === 0) {\n MainLoop.nextRAF = now + 1000/60;\n } else {\n while (now + 2 >= MainLoop.nextRAF) { // fudge a little, to avoid timer jitter causing us to do lots of delay:0\n MainLoop.nextRAF += 1000/60;\n }\n }\n var delay = Math.max(MainLoop.nextRAF - now, 0);\n setTimeout(func, delay);\n },\n requestAnimationFrame(func) {\n if (typeof requestAnimationFrame == 'function') {\n requestAnimationFrame(func);\n return;\n }\n var RAF = MainLoop.fakeRequestAnimationFrame;\n RAF(func);\n },\n };\n \n \n \n \n /**\n * @param {number=} arg\n * @param {boolean=} noSetTiming\n */\n var setMainLoop = (iterFunc, fps, simulateInfiniteLoop, arg, noSetTiming) => {\n MainLoop.func = iterFunc;\n MainLoop.arg = arg;\n \n var thisMainLoopId = MainLoop.currentlyRunningMainloop;\n function checkIsRunning() {\n if (thisMainLoopId < MainLoop.currentlyRunningMainloop) {\n \n maybeExit();\n return false;\n }\n return true;\n }\n \n // We create the loop runner here but it is not actually running until\n // _emscripten_set_main_loop_timing is called (which might happen a\n // later time). This member signifies that the current runner has not\n // yet been started so that we can call runtimeKeepalivePush when it\n // gets it timing set for the first time.\n MainLoop.running = false;\n MainLoop.runner = function MainLoop_runner() {\n if (ABORT) return;\n if (MainLoop.queue.length > 0) {\n var start = Date.now();\n var blocker = MainLoop.queue.shift();\n blocker.func(blocker.arg);\n if (MainLoop.remainingBlockers) {\n var remaining = MainLoop.remainingBlockers;\n var next = remaining%1 == 0 ? remaining-1 : Math.floor(remaining);\n if (blocker.counted) {\n MainLoop.remainingBlockers = next;\n } else {\n // not counted, but move the progress along a tiny bit\n next = next + 0.5; // do not steal all the next one's progress\n MainLoop.remainingBlockers = (8*remaining + next)/9;\n }\n }\n MainLoop.updateStatus();\n \n // catches pause/resume main loop from blocker execution\n if (!checkIsRunning()) return;\n \n setTimeout(MainLoop.runner, 0);\n return;\n }\n \n // catch pauses from non-main loop sources\n if (!checkIsRunning()) return;\n \n // Implement very basic swap interval control\n MainLoop.currentFrameNumber = MainLoop.currentFrameNumber + 1 | 0;\n if (MainLoop.timingMode == 1 && MainLoop.timingValue > 1 && MainLoop.currentFrameNumber % MainLoop.timingValue != 0) {\n // Not the scheduled time to render this frame - skip.\n MainLoop.scheduler();\n return;\n } else if (MainLoop.timingMode == 0) {\n MainLoop.tickStartTime = _emscripten_get_now();\n }\n \n MainLoop.runIter(iterFunc);\n \n // catch pauses from the main loop itself\n if (!checkIsRunning()) return;\n \n MainLoop.scheduler();\n }\n \n if (!noSetTiming) {\n if (fps && fps > 0) {\n _emscripten_set_main_loop_timing(0, 1000.0 / fps);\n } else {\n // Do rAF by rendering each frame (no decimating)\n _emscripten_set_main_loop_timing(1, 1);\n }\n \n MainLoop.scheduler();\n }\n \n if (simulateInfiniteLoop) {\n throw 'unwind';\n }\n };\n \n var _emscripten_set_main_loop = (func, fps, simulateInfiniteLoop) => {\n var iterFunc = getWasmTableEntry(func);\n setMainLoop(iterFunc, fps, simulateInfiniteLoop);\n };\n _emscripten_set_main_loop.sig = 'vpii';\n\n \n var getExecutableName = () => {\n return thisProgram || './this.program';\n };\n var getEnvStrings = () => {\n if (!getEnvStrings.strings) {\n // Default values.\n // Browser language detection #8751\n var lang = ((typeof navigator == 'object' && navigator.languages && navigator.languages[0]) || 'C').replace('-', '_') + '.UTF-8';\n var env = {\n 'USER': 'web_user',\n 'LOGNAME': 'web_user',\n 'PATH': '/',\n 'PWD': '/',\n 'HOME': '/home/web_user',\n 'LANG': lang,\n '_': getExecutableName()\n };\n // Apply the user-provided values, if any.\n for (var x in ENV) {\n // x is a key in ENV; if ENV[x] is undefined, that means it was\n // explicitly set to be so. We allow user code to do that to\n // force variables with default values to remain unset.\n if (ENV[x] === undefined) delete env[x];\n else env[x] = ENV[x];\n }\n var strings = [];\n for (var x in env) {\n strings.push(`${x}=${env[x]}`);\n }\n getEnvStrings.strings = strings;\n }\n return getEnvStrings.strings;\n };\n \n var stringToAscii = (str, buffer) => {\n for (var i = 0; i < str.length; ++i) {\n HEAP8[buffer++] = str.charCodeAt(i);\n }\n // Null-terminate the string\n HEAP8[buffer] = 0;\n };\n var _environ_get = (__environ, environ_buf) => {\n var bufSize = 0;\n getEnvStrings().forEach((string, i) => {\n var ptr = environ_buf + bufSize;\n HEAPU32[(((__environ)+(i*4))>>2)] = ptr;\n stringToAscii(string, ptr);\n bufSize += string.length + 1;\n });\n return 0;\n };\n _environ_get.sig = 'ipp';\n\n var _environ_sizes_get = (penviron_count, penviron_buf_size) => {\n var strings = getEnvStrings();\n HEAPU32[((penviron_count)>>2)] = strings.length;\n var bufSize = 0;\n strings.forEach((string) => bufSize += string.length + 1);\n HEAPU32[((penviron_buf_size)>>2)] = bufSize;\n return 0;\n };\n _environ_sizes_get.sig = 'ipp';\n\n\n function _fd_close(fd) {\n try {\n \n var stream = SYSCALLS.getStreamFromFD(fd);\n FS.close(stream);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n }\n _fd_close.sig = 'ii';\n\n function _fd_fdstat_get(fd, pbuf) {\n try {\n \n var rightsBase = 0;\n var rightsInheriting = 0;\n var flags = 0;\n {\n var stream = SYSCALLS.getStreamFromFD(fd);\n // All character devices are terminals (other things a Linux system would\n // assume is a character device, like the mouse, we have special APIs for).\n var type = stream.tty ? 2 :\n FS.isDir(stream.mode) ? 3 :\n FS.isLink(stream.mode) ? 7 :\n 4;\n }\n HEAP8[pbuf] = type;\n HEAP16[(((pbuf)+(2))>>1)] = flags;\n HEAP64[(((pbuf)+(8))>>3)] = BigInt(rightsBase);\n HEAP64[(((pbuf)+(16))>>3)] = BigInt(rightsInheriting);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n }\n _fd_fdstat_get.sig = 'iip';\n\n /** @param {number=} offset */\n var doReadv = (stream, iov, iovcnt, offset) => {\n var ret = 0;\n for (var i = 0; i < iovcnt; i++) {\n var ptr = HEAPU32[((iov)>>2)];\n var len = HEAPU32[(((iov)+(4))>>2)];\n iov += 8;\n var curr = FS.read(stream, HEAP8, ptr, len, offset);\n if (curr < 0) return -1;\n ret += curr;\n if (curr < len) break; // nothing more to read\n if (typeof offset != 'undefined') {\n offset += curr;\n }\n }\n return ret;\n };\n \n \n function _fd_pread(fd, iov, iovcnt, offset, pnum) {\n offset = bigintToI53Checked(offset);\n \n \n try {\n \n if (isNaN(offset)) return 61;\n var stream = SYSCALLS.getStreamFromFD(fd)\n var num = doReadv(stream, iov, iovcnt, offset);\n HEAPU32[((pnum)>>2)] = num;\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n ;\n }\n _fd_pread.sig = 'iippjp';\n\n /** @param {number=} offset */\n var doWritev = (stream, iov, iovcnt, offset) => {\n var ret = 0;\n for (var i = 0; i < iovcnt; i++) {\n var ptr = HEAPU32[((iov)>>2)];\n var len = HEAPU32[(((iov)+(4))>>2)];\n iov += 8;\n var curr = FS.write(stream, HEAP8, ptr, len, offset);\n if (curr < 0) return -1;\n ret += curr;\n if (curr < len) {\n // No more space to write.\n break;\n }\n if (typeof offset != 'undefined') {\n offset += curr;\n }\n }\n return ret;\n };\n \n \n function _fd_pwrite(fd, iov, iovcnt, offset, pnum) {\n offset = bigintToI53Checked(offset);\n \n \n try {\n \n if (isNaN(offset)) return 61;\n var stream = SYSCALLS.getStreamFromFD(fd)\n var num = doWritev(stream, iov, iovcnt, offset);\n HEAPU32[((pnum)>>2)] = num;\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n ;\n }\n _fd_pwrite.sig = 'iippjp';\n\n \n function _fd_read(fd, iov, iovcnt, pnum) {\n try {\n \n var stream = SYSCALLS.getStreamFromFD(fd);\n var num = doReadv(stream, iov, iovcnt);\n HEAPU32[((pnum)>>2)] = num;\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n }\n _fd_read.sig = 'iippp';\n\n \n function _fd_seek(fd, offset, whence, newOffset) {\n offset = bigintToI53Checked(offset);\n \n \n try {\n \n if (isNaN(offset)) return 61;\n var stream = SYSCALLS.getStreamFromFD(fd);\n FS.llseek(stream, offset, whence);\n HEAP64[((newOffset)>>3)] = BigInt(stream.position);\n if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n ;\n }\n _fd_seek.sig = 'iijip';\n\n function _fd_sync(fd) {\n try {\n \n var stream = SYSCALLS.getStreamFromFD(fd);\n if (stream.stream_ops?.fsync) {\n return stream.stream_ops.fsync(stream);\n }\n return 0; // we can't do anything synchronously; the in-memory FS is already synced to\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n }\n _fd_sync.sig = 'ii';\n\n \n function _fd_write(fd, iov, iovcnt, pnum) {\n try {\n \n var stream = SYSCALLS.getStreamFromFD(fd);\n var num = doWritev(stream, iov, iovcnt);\n HEAPU32[((pnum)>>2)] = num;\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n }\n _fd_write.sig = 'iippp';\n\n \n \n \n \n \n \n \n \n \n var _getaddrinfo = (node, service, hint, out) => {\n // Note getaddrinfo currently only returns a single addrinfo with ai_next defaulting to NULL. When NULL\n // hints are specified or ai_family set to AF_UNSPEC or ai_socktype or ai_protocol set to 0 then we\n // really should provide a linked list of suitable addrinfo values.\n var addrs = [];\n var canon = null;\n var addr = 0;\n var port = 0;\n var flags = 0;\n var family = 0;\n var type = 0;\n var proto = 0;\n var ai, last;\n \n function allocaddrinfo(family, type, proto, canon, addr, port) {\n var sa, salen, ai;\n var errno;\n \n salen = family === 10 ?\n 28 :\n 16;\n addr = family === 10 ?\n inetNtop6(addr) :\n inetNtop4(addr);\n sa = _malloc(salen);\n errno = writeSockaddr(sa, family, addr, port);\n assert(!errno);\n \n ai = _malloc(32);\n HEAP32[(((ai)+(4))>>2)] = family;\n HEAP32[(((ai)+(8))>>2)] = type;\n HEAP32[(((ai)+(12))>>2)] = proto;\n HEAPU32[(((ai)+(24))>>2)] = canon;\n HEAPU32[(((ai)+(20))>>2)] = sa;\n if (family === 10) {\n HEAP32[(((ai)+(16))>>2)] = 28;\n } else {\n HEAP32[(((ai)+(16))>>2)] = 16;\n }\n HEAP32[(((ai)+(28))>>2)] = 0;\n \n return ai;\n }\n \n if (hint) {\n flags = HEAP32[((hint)>>2)];\n family = HEAP32[(((hint)+(4))>>2)];\n type = HEAP32[(((hint)+(8))>>2)];\n proto = HEAP32[(((hint)+(12))>>2)];\n }\n if (type && !proto) {\n proto = type === 2 ? 17 : 6;\n }\n if (!type && proto) {\n type = proto === 17 ? 2 : 1;\n }\n \n // If type or proto are set to zero in hints we should really be returning multiple addrinfo values, but for\n // now default to a TCP STREAM socket so we can at least return a sensible addrinfo given NULL hints.\n if (proto === 0) {\n proto = 6;\n }\n if (type === 0) {\n type = 1;\n }\n \n if (!node && !service) {\n return -2;\n }\n if (flags & ~(1|2|4|\n 1024|8|16|32)) {\n return -1;\n }\n if (hint !== 0 && (HEAP32[((hint)>>2)] & 2) && !node) {\n return -1;\n }\n if (flags & 32) {\n // TODO\n return -2;\n }\n if (type !== 0 && type !== 1 && type !== 2) {\n return -7;\n }\n if (family !== 0 && family !== 2 && family !== 10) {\n return -6;\n }\n \n if (service) {\n service = UTF8ToString(service);\n port = parseInt(service, 10);\n \n if (isNaN(port)) {\n if (flags & 1024) {\n return -2;\n }\n // TODO support resolving well-known service names from:\n // http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt\n return -8;\n }\n }\n \n if (!node) {\n if (family === 0) {\n family = 2;\n }\n if ((flags & 1) === 0) {\n if (family === 2) {\n addr = _htonl(2130706433);\n } else {\n addr = [0, 0, 0, 1];\n }\n }\n ai = allocaddrinfo(family, type, proto, null, addr, port);\n HEAPU32[((out)>>2)] = ai;\n return 0;\n }\n \n //\n // try as a numeric address\n //\n node = UTF8ToString(node);\n addr = inetPton4(node);\n if (addr !== null) {\n // incoming node is a valid ipv4 address\n if (family === 0 || family === 2) {\n family = 2;\n }\n else if (family === 10 && (flags & 8)) {\n addr = [0, 0, _htonl(0xffff), addr];\n family = 10;\n } else {\n return -2;\n }\n } else {\n addr = inetPton6(node);\n if (addr !== null) {\n // incoming node is a valid ipv6 address\n if (family === 0 || family === 10) {\n family = 10;\n } else {\n return -2;\n }\n }\n }\n if (addr != null) {\n ai = allocaddrinfo(family, type, proto, node, addr, port);\n HEAPU32[((out)>>2)] = ai;\n return 0;\n }\n if (flags & 4) {\n return -2;\n }\n \n //\n // try as a hostname\n //\n // resolve the hostname to a temporary fake address\n node = DNS.lookup_name(node);\n addr = inetPton4(node);\n if (family === 0) {\n family = 2;\n } else if (family === 10) {\n addr = [0, 0, _htonl(0xffff), addr];\n }\n ai = allocaddrinfo(family, type, proto, null, addr, port);\n HEAPU32[((out)>>2)] = ai;\n return 0;\n };\n _getaddrinfo.sig = 'ipppp';\n\n \n \n \n var _getnameinfo = (sa, salen, node, nodelen, serv, servlen, flags) => {\n var info = readSockaddr(sa, salen);\n if (info.errno) {\n return -6;\n }\n var port = info.port;\n var addr = info.addr;\n \n var overflowed = false;\n \n if (node && nodelen) {\n var lookup;\n if ((flags & 1) || !(lookup = DNS.lookup_addr(addr))) {\n if (flags & 8) {\n return -2;\n }\n } else {\n addr = lookup;\n }\n var numBytesWrittenExclNull = stringToUTF8(addr, node, nodelen);\n \n if (numBytesWrittenExclNull+1 >= nodelen) {\n overflowed = true;\n }\n }\n \n if (serv && servlen) {\n port = '' + port;\n var numBytesWrittenExclNull = stringToUTF8(port, serv, servlen);\n \n if (numBytesWrittenExclNull+1 >= servlen) {\n overflowed = true;\n }\n }\n \n if (overflowed) {\n // Note: even when we overflow, getnameinfo() is specced to write out the truncated results.\n return -12;\n }\n \n return 0;\n };\n _getnameinfo.sig = 'ipipipii';\n\n\n\n\n\n\n\n\n\n\n\n \n \n var stringToNewUTF8 = (str) => {\n var size = lengthBytesUTF8(str) + 1;\n var ret = _malloc(size);\n if (ret) stringToUTF8(str, ret, size);\n return ret;\n };\n\n\n var getCFunc = (ident) => {\n var func = Module['_' + ident]; // closure exported function\n return func;\n };\n \n var writeArrayToMemory = (array, buffer) => {\n HEAP8.set(array, buffer);\n };\n \n \n \n \n \n \n /**\n * @param {string|null=} returnType\n * @param {Array=} argTypes\n * @param {Arguments|Array=} args\n * @param {Object=} opts\n */\n var ccall = (ident, returnType, argTypes, args, opts) => {\n // For fast lookup of conversion functions\n var toC = {\n 'string': (str) => {\n var ret = 0;\n if (str !== null && str !== undefined && str !== 0) { // null string\n ret = stringToUTF8OnStack(str);\n }\n return ret;\n },\n 'array': (arr) => {\n var ret = stackAlloc(arr.length);\n writeArrayToMemory(arr, ret);\n return ret;\n }\n };\n \n function convertReturnValue(ret) {\n if (returnType === 'string') {\n return UTF8ToString(ret);\n }\n if (returnType === 'boolean') return Boolean(ret);\n return ret;\n }\n \n var func = getCFunc(ident);\n var cArgs = [];\n var stack = 0;\n if (args) {\n for (var i = 0; i < args.length; i++) {\n var converter = toC[argTypes[i]];\n if (converter) {\n if (stack === 0) stack = stackSave();\n cArgs[i] = converter(args[i]);\n } else {\n cArgs[i] = args[i];\n }\n }\n }\n var ret = func(...cArgs);\n function onDone(ret) {\n if (stack !== 0) stackRestore(stack);\n return convertReturnValue(ret);\n }\n \n ret = onDone(ret);\n return ret;\n };\n\n \n \n /**\n * @param {string=} returnType\n * @param {Array=} argTypes\n * @param {Object=} opts\n */\n var cwrap = (ident, returnType, argTypes, opts) => {\n // When the function takes numbers and returns a number, we can just return\n // the original function\n var numericArgs = !argTypes || argTypes.every((type) => type === 'number' || type === 'boolean');\n var numericRet = returnType !== 'string';\n if (numericRet && numericArgs && !opts) {\n return getCFunc(ident);\n }\n return (...args) => ccall(ident, returnType, argTypes, args, opts);\n };\n\n var FS_createPath = FS.createPath;\n\n\n\n var FS_unlink = (path) => FS.unlink(path);\n\n var FS_createLazyFile = FS.createLazyFile;\n\n var FS_createDevice = FS.createDevice;\n\n /** @suppress {duplicate } */\n var setTempRet0 = (val) => __emscripten_tempret_set(val);\n var _setTempRet0 = setTempRet0;\n Module['_setTempRet0'] = _setTempRet0;\n\n /** @suppress {duplicate } */\n var getTempRet0 = (val) => __emscripten_tempret_get();\n var _getTempRet0 = getTempRet0;\n Module['_getTempRet0'] = _getTempRet0;\n\n\n registerWasmPlugin();\n ;\n\n FS.createPreloadedFile = FS_createPreloadedFile;\n FS.staticInit();\n // Set module methods based on EXPORTED_RUNTIME_METHODS\n Module[\"FS_createPath\"] = FS.createPath;\n Module[\"FS_createDataFile\"] = FS.createDataFile;\n Module[\"FS_createPreloadedFile\"] = FS.createPreloadedFile;\n Module[\"FS_unlink\"] = FS.unlink;\n Module[\"FS_createLazyFile\"] = FS.createLazyFile;\n Module[\"FS_createDevice\"] = FS.createDevice;\n ;\nif (ENVIRONMENT_IS_NODE) { NODEFS.staticInit(); };\n\n Module[\"requestAnimationFrame\"] = MainLoop.requestAnimationFrame;\n Module[\"pauseMainLoop\"] = MainLoop.pause;\n Module[\"resumeMainLoop\"] = MainLoop.resume;\n MainLoop.init();;\nvar wasmImports = {\n /** @export */\n __assert_fail: ___assert_fail,\n /** @export */\n __call_sighandler: ___call_sighandler,\n /** @export */\n __heap_base: ___heap_base,\n /** @export */\n __indirect_function_table: wasmTable,\n /** @export */\n __memory_base: ___memory_base,\n /** @export */\n __stack_pointer: ___stack_pointer,\n /** @export */\n __syscall__newselect: ___syscall__newselect,\n /** @export */\n __syscall_bind: ___syscall_bind,\n /** @export */\n __syscall_chdir: ___syscall_chdir,\n /** @export */\n __syscall_chmod: ___syscall_chmod,\n /** @export */\n __syscall_connect: ___syscall_connect,\n /** @export */\n __syscall_dup: ___syscall_dup,\n /** @export */\n __syscall_dup3: ___syscall_dup3,\n /** @export */\n __syscall_faccessat: ___syscall_faccessat,\n /** @export */\n __syscall_fadvise64: ___syscall_fadvise64,\n /** @export */\n __syscall_fallocate: ___syscall_fallocate,\n /** @export */\n __syscall_fcntl64: ___syscall_fcntl64,\n /** @export */\n __syscall_fdatasync: ___syscall_fdatasync,\n /** @export */\n __syscall_fstat64: ___syscall_fstat64,\n /** @export */\n __syscall_ftruncate64: ___syscall_ftruncate64,\n /** @export */\n __syscall_getcwd: ___syscall_getcwd,\n /** @export */\n __syscall_getdents64: ___syscall_getdents64,\n /** @export */\n __syscall_getsockname: ___syscall_getsockname,\n /** @export */\n __syscall_getsockopt: ___syscall_getsockopt,\n /** @export */\n __syscall_ioctl: ___syscall_ioctl,\n /** @export */\n __syscall_lstat64: ___syscall_lstat64,\n /** @export */\n __syscall_mkdirat: ___syscall_mkdirat,\n /** @export */\n __syscall_newfstatat: ___syscall_newfstatat,\n /** @export */\n __syscall_openat: ___syscall_openat,\n /** @export */\n __syscall_pipe: ___syscall_pipe,\n /** @export */\n __syscall_poll: ___syscall_poll,\n /** @export */\n __syscall_readlinkat: ___syscall_readlinkat,\n /** @export */\n __syscall_recvfrom: ___syscall_recvfrom,\n /** @export */\n __syscall_renameat: ___syscall_renameat,\n /** @export */\n __syscall_rmdir: ___syscall_rmdir,\n /** @export */\n __syscall_sendto: ___syscall_sendto,\n /** @export */\n __syscall_socket: ___syscall_socket,\n /** @export */\n __syscall_stat64: ___syscall_stat64,\n /** @export */\n __syscall_symlink: ___syscall_symlink,\n /** @export */\n __syscall_truncate64: ___syscall_truncate64,\n /** @export */\n __syscall_unlinkat: ___syscall_unlinkat,\n /** @export */\n __table_base: ___table_base,\n /** @export */\n _abort_js: __abort_js,\n /** @export */\n _dlopen_js: __dlopen_js,\n /** @export */\n _dlsym_js: __dlsym_js,\n /** @export */\n _emscripten_get_now_is_monotonic: __emscripten_get_now_is_monotonic,\n /** @export */\n _emscripten_runtime_keepalive_clear: __emscripten_runtime_keepalive_clear,\n /** @export */\n _emscripten_system: __emscripten_system,\n /** @export */\n _emscripten_throw_longjmp: __emscripten_throw_longjmp,\n /** @export */\n _gmtime_js: __gmtime_js,\n /** @export */\n _localtime_js: __localtime_js,\n /** @export */\n _mmap_js: __mmap_js,\n /** @export */\n _munmap_js: __munmap_js,\n /** @export */\n _setitimer_js: __setitimer_js,\n /** @export */\n _tzset_js: __tzset_js,\n /** @export */\n emscripten_asm_const_int: _emscripten_asm_const_int,\n /** @export */\n emscripten_date_now: _emscripten_date_now,\n /** @export */\n emscripten_force_exit: _emscripten_force_exit,\n /** @export */\n emscripten_get_now: _emscripten_get_now,\n /** @export */\n emscripten_resize_heap: _emscripten_resize_heap,\n /** @export */\n emscripten_set_main_loop: _emscripten_set_main_loop,\n /** @export */\n environ_get: _environ_get,\n /** @export */\n environ_sizes_get: _environ_sizes_get,\n /** @export */\n exit: _exit,\n /** @export */\n fd_close: _fd_close,\n /** @export */\n fd_fdstat_get: _fd_fdstat_get,\n /** @export */\n fd_pread: _fd_pread,\n /** @export */\n fd_pwrite: _fd_pwrite,\n /** @export */\n fd_read: _fd_read,\n /** @export */\n fd_seek: _fd_seek,\n /** @export */\n fd_sync: _fd_sync,\n /** @export */\n fd_write: _fd_write,\n /** @export */\n getTempRet0: _getTempRet0,\n /** @export */\n getaddrinfo: _getaddrinfo,\n /** @export */\n getnameinfo: _getnameinfo,\n /** @export */\n invoke_di,\n /** @export */\n invoke_i,\n /** @export */\n invoke_id,\n /** @export */\n invoke_ii,\n /** @export */\n invoke_iii,\n /** @export */\n invoke_iiii,\n /** @export */\n invoke_iiiii,\n /** @export */\n invoke_iiiiii,\n /** @export */\n invoke_iiiiiii,\n /** @export */\n invoke_iiiiiiii,\n /** @export */\n invoke_iiiiiiiii,\n /** @export */\n invoke_iiiiiiiiii,\n /** @export */\n invoke_iiiiiiiiiiiiiiiii,\n /** @export */\n invoke_iiiiiji,\n /** @export */\n invoke_iiiij,\n /** @export */\n invoke_iiiijii,\n /** @export */\n invoke_iiij,\n /** @export */\n invoke_iiji,\n /** @export */\n invoke_ij,\n /** @export */\n invoke_ijiiiii,\n /** @export */\n invoke_ijiiiiii,\n /** @export */\n invoke_ji,\n /** @export */\n invoke_jii,\n /** @export */\n invoke_jiiii,\n /** @export */\n invoke_jiiiii,\n /** @export */\n invoke_jiiiiiiii,\n /** @export */\n invoke_v,\n /** @export */\n invoke_vi,\n /** @export */\n invoke_vid,\n /** @export */\n invoke_vii,\n /** @export */\n invoke_viii,\n /** @export */\n invoke_viiii,\n /** @export */\n invoke_viiiii,\n /** @export */\n invoke_viiiiii,\n /** @export */\n invoke_viiiiiii,\n /** @export */\n invoke_viiiiiiii,\n /** @export */\n invoke_viiiiiiiii,\n /** @export */\n invoke_viiiiiiiiiiii,\n /** @export */\n invoke_viiij,\n /** @export */\n invoke_viij,\n /** @export */\n invoke_viiji,\n /** @export */\n invoke_viijii,\n /** @export */\n invoke_viijiiii,\n /** @export */\n invoke_vij,\n /** @export */\n invoke_viji,\n /** @export */\n invoke_vijiji,\n /** @export */\n invoke_vj,\n /** @export */\n invoke_vji,\n /** @export */\n is_web_env,\n /** @export */\n memory: wasmMemory,\n /** @export */\n proc_exit: _proc_exit,\n /** @export */\n setTempRet0: _setTempRet0\n};\nvar wasmExports = createWasm();\nvar ___wasm_call_ctors = () => (___wasm_call_ctors = wasmExports['__wasm_call_ctors'])();\nvar ___wasm_apply_data_relocs = () => (___wasm_apply_data_relocs = wasmExports['__wasm_apply_data_relocs'])();\nvar _ScanKeywordLookup = Module['_ScanKeywordLookup'] = (a0, a1) => (_ScanKeywordLookup = Module['_ScanKeywordLookup'] = wasmExports['ScanKeywordLookup'])(a0, a1);\nvar _pg_snprintf = Module['_pg_snprintf'] = (a0, a1, a2, a3) => (_pg_snprintf = Module['_pg_snprintf'] = wasmExports['pg_snprintf'])(a0, a1, a2, a3);\nvar _strlen = Module['_strlen'] = (a0) => (_strlen = Module['_strlen'] = wasmExports['strlen'])(a0);\nvar _memset = Module['_memset'] = (a0, a1, a2) => (_memset = Module['_memset'] = wasmExports['memset'])(a0, a1, a2);\nvar _strchr = Module['_strchr'] = (a0, a1) => (_strchr = Module['_strchr'] = wasmExports['strchr'])(a0, a1);\nvar _PQserverVersion = Module['_PQserverVersion'] = (a0) => (_PQserverVersion = Module['_PQserverVersion'] = wasmExports['PQserverVersion'])(a0);\nvar _strstr = Module['_strstr'] = (a0, a1) => (_strstr = Module['_strstr'] = wasmExports['strstr'])(a0, a1);\nvar _pg_fprintf = Module['_pg_fprintf'] = (a0, a1, a2) => (_pg_fprintf = Module['_pg_fprintf'] = wasmExports['pg_fprintf'])(a0, a1, a2);\nvar _strspn = Module['_strspn'] = (a0, a1) => (_strspn = Module['_strspn'] = wasmExports['strspn'])(a0, a1);\nvar _malloc = Module['_malloc'] = (a0) => (_malloc = Module['_malloc'] = wasmExports['malloc'])(a0);\nvar _pg_strcasecmp = Module['_pg_strcasecmp'] = (a0, a1) => (_pg_strcasecmp = Module['_pg_strcasecmp'] = wasmExports['pg_strcasecmp'])(a0, a1);\nvar _strcmp = Module['_strcmp'] = (a0, a1) => (_strcmp = Module['_strcmp'] = wasmExports['strcmp'])(a0, a1);\nvar _free = Module['_free'] = (a0) => (_free = Module['_free'] = wasmExports['free'])(a0);\nvar _pg_tolower = Module['_pg_tolower'] = (a0) => (_pg_tolower = Module['_pg_tolower'] = wasmExports['pg_tolower'])(a0);\nvar _memchr = Module['_memchr'] = (a0, a1, a2) => (_memchr = Module['_memchr'] = wasmExports['memchr'])(a0, a1, a2);\nvar _getenv = Module['_getenv'] = (a0) => (_getenv = Module['_getenv'] = wasmExports['getenv'])(a0);\nvar _fileno = Module['_fileno'] = (a0) => (_fileno = Module['_fileno'] = wasmExports['fileno'])(a0);\nvar _isatty = Module['_isatty'] = (a0) => (_isatty = Module['_isatty'] = wasmExports['isatty'])(a0);\nvar _strdup = Module['_strdup'] = (a0) => (_strdup = Module['_strdup'] = wasmExports['strdup'])(a0);\nvar ___errno_location = Module['___errno_location'] = () => (___errno_location = Module['___errno_location'] = wasmExports['__errno_location'])();\nvar _fflush = Module['_fflush'] = (a0) => (_fflush = Module['_fflush'] = wasmExports['fflush'])(a0);\nvar _pg_vsnprintf = Module['_pg_vsnprintf'] = (a0, a1, a2, a3) => (_pg_vsnprintf = Module['_pg_vsnprintf'] = wasmExports['pg_vsnprintf'])(a0, a1, a2, a3);\nvar _pg_malloc_extended = Module['_pg_malloc_extended'] = (a0, a1) => (_pg_malloc_extended = Module['_pg_malloc_extended'] = wasmExports['pg_malloc_extended'])(a0, a1);\nvar _errstart_cold = Module['_errstart_cold'] = (a0, a1) => (_errstart_cold = Module['_errstart_cold'] = wasmExports['errstart_cold'])(a0, a1);\nvar _errmsg_internal = Module['_errmsg_internal'] = (a0, a1) => (_errmsg_internal = Module['_errmsg_internal'] = wasmExports['errmsg_internal'])(a0, a1);\nvar _errfinish = Module['_errfinish'] = (a0, a1, a2) => (_errfinish = Module['_errfinish'] = wasmExports['errfinish'])(a0, a1, a2);\nvar _puts = Module['_puts'] = (a0) => (_puts = Module['_puts'] = wasmExports['puts'])(a0);\nvar _psprintf = Module['_psprintf'] = (a0, a1) => (_psprintf = Module['_psprintf'] = wasmExports['psprintf'])(a0, a1);\nvar _pfree = Module['_pfree'] = (a0) => (_pfree = Module['_pfree'] = wasmExports['pfree'])(a0);\nvar _initStringInfo = Module['_initStringInfo'] = (a0) => (_initStringInfo = Module['_initStringInfo'] = wasmExports['initStringInfo'])(a0);\nvar _appendStringInfoChar = Module['_appendStringInfoChar'] = (a0, a1) => (_appendStringInfoChar = Module['_appendStringInfoChar'] = wasmExports['appendStringInfoChar'])(a0, a1);\nvar _appendStringInfoString = Module['_appendStringInfoString'] = (a0, a1) => (_appendStringInfoString = Module['_appendStringInfoString'] = wasmExports['appendStringInfoString'])(a0, a1);\nvar _escape_json = Module['_escape_json'] = (a0, a1) => (_escape_json = Module['_escape_json'] = wasmExports['escape_json'])(a0, a1);\nvar _enlargeStringInfo = Module['_enlargeStringInfo'] = (a0, a1) => (_enlargeStringInfo = Module['_enlargeStringInfo'] = wasmExports['enlargeStringInfo'])(a0, a1);\nvar _appendStringInfo = Module['_appendStringInfo'] = (a0, a1, a2) => (_appendStringInfo = Module['_appendStringInfo'] = wasmExports['appendStringInfo'])(a0, a1, a2);\nvar _errmsg = Module['_errmsg'] = (a0, a1) => (_errmsg = Module['_errmsg'] = wasmExports['errmsg'])(a0, a1);\nvar _errcode_for_file_access = Module['_errcode_for_file_access'] = () => (_errcode_for_file_access = Module['_errcode_for_file_access'] = wasmExports['errcode_for_file_access'])();\nvar _palloc0 = Module['_palloc0'] = (a0) => (_palloc0 = Module['_palloc0'] = wasmExports['palloc0'])(a0);\nvar _palloc = Module['_palloc'] = (a0) => (_palloc = Module['_palloc'] = wasmExports['palloc'])(a0);\nvar _errcode = Module['_errcode'] = (a0) => (_errcode = Module['_errcode'] = wasmExports['errcode'])(a0);\nvar _bbsink_forward_end_archive = Module['_bbsink_forward_end_archive'] = (a0) => (_bbsink_forward_end_archive = Module['_bbsink_forward_end_archive'] = wasmExports['bbsink_forward_end_archive'])(a0);\nvar _memcpy = Module['_memcpy'] = (a0, a1, a2) => (_memcpy = Module['_memcpy'] = wasmExports['memcpy'])(a0, a1, a2);\nvar _bbsink_forward_begin_manifest = Module['_bbsink_forward_begin_manifest'] = (a0) => (_bbsink_forward_begin_manifest = Module['_bbsink_forward_begin_manifest'] = wasmExports['bbsink_forward_begin_manifest'])(a0);\nvar _bbsink_forward_end_manifest = Module['_bbsink_forward_end_manifest'] = (a0) => (_bbsink_forward_end_manifest = Module['_bbsink_forward_end_manifest'] = wasmExports['bbsink_forward_end_manifest'])(a0);\nvar _bbsink_forward_end_backup = Module['_bbsink_forward_end_backup'] = (a0, a1, a2) => (_bbsink_forward_end_backup = Module['_bbsink_forward_end_backup'] = wasmExports['bbsink_forward_end_backup'])(a0, a1, a2);\nvar _bbsink_forward_cleanup = Module['_bbsink_forward_cleanup'] = (a0) => (_bbsink_forward_cleanup = Module['_bbsink_forward_cleanup'] = wasmExports['bbsink_forward_cleanup'])(a0);\nvar _StartTransactionCommand = Module['_StartTransactionCommand'] = () => (_StartTransactionCommand = Module['_StartTransactionCommand'] = wasmExports['StartTransactionCommand'])();\nvar _GetUserId = Module['_GetUserId'] = () => (_GetUserId = Module['_GetUserId'] = wasmExports['GetUserId'])();\nvar _has_privs_of_role = Module['_has_privs_of_role'] = (a0, a1) => (_has_privs_of_role = Module['_has_privs_of_role'] = wasmExports['has_privs_of_role'])(a0, a1);\nvar _errdetail = Module['_errdetail'] = (a0, a1) => (_errdetail = Module['_errdetail'] = wasmExports['errdetail'])(a0, a1);\nvar _CommitTransactionCommand = Module['_CommitTransactionCommand'] = () => (_CommitTransactionCommand = Module['_CommitTransactionCommand'] = wasmExports['CommitTransactionCommand'])();\nvar _bbsink_forward_begin_archive = Module['_bbsink_forward_begin_archive'] = (a0, a1) => (_bbsink_forward_begin_archive = Module['_bbsink_forward_begin_archive'] = wasmExports['bbsink_forward_begin_archive'])(a0, a1);\nvar _errhint = Module['_errhint'] = (a0, a1) => (_errhint = Module['_errhint'] = wasmExports['errhint'])(a0, a1);\nvar _bbsink_forward_archive_contents = Module['_bbsink_forward_archive_contents'] = (a0, a1) => (_bbsink_forward_archive_contents = Module['_bbsink_forward_archive_contents'] = wasmExports['bbsink_forward_archive_contents'])(a0, a1);\nvar _bbsink_forward_manifest_contents = Module['_bbsink_forward_manifest_contents'] = (a0, a1) => (_bbsink_forward_manifest_contents = Module['_bbsink_forward_manifest_contents'] = wasmExports['bbsink_forward_manifest_contents'])(a0, a1);\nvar _fd_durable_rename = Module['_fd_durable_rename'] = (a0, a1, a2) => (_fd_durable_rename = Module['_fd_durable_rename'] = wasmExports['fd_durable_rename'])(a0, a1, a2);\nvar _bbsink_forward_begin_backup = Module['_bbsink_forward_begin_backup'] = (a0) => (_bbsink_forward_begin_backup = Module['_bbsink_forward_begin_backup'] = wasmExports['bbsink_forward_begin_backup'])(a0);\nvar _BaseBackupAddTarget = Module['_BaseBackupAddTarget'] = (a0, a1, a2) => (_BaseBackupAddTarget = Module['_BaseBackupAddTarget'] = wasmExports['BaseBackupAddTarget'])(a0, a1, a2);\nvar _lappend = Module['_lappend'] = (a0, a1) => (_lappend = Module['_lappend'] = wasmExports['lappend'])(a0, a1);\nvar _pstrdup = Module['_pstrdup'] = (a0) => (_pstrdup = Module['_pstrdup'] = wasmExports['pstrdup'])(a0);\nvar _GetCurrentTimestamp = Module['_GetCurrentTimestamp'] = () => (_GetCurrentTimestamp = Module['_GetCurrentTimestamp'] = wasmExports['GetCurrentTimestamp'])();\nvar _CreateDestReceiver = Module['_CreateDestReceiver'] = (a0) => (_CreateDestReceiver = Module['_CreateDestReceiver'] = wasmExports['CreateDestReceiver'])(a0);\nvar _CreateTemplateTupleDesc = Module['_CreateTemplateTupleDesc'] = (a0) => (_CreateTemplateTupleDesc = Module['_CreateTemplateTupleDesc'] = wasmExports['CreateTemplateTupleDesc'])(a0);\nvar _strtoul = Module['_strtoul'] = (a0, a1, a2) => (_strtoul = Module['_strtoul'] = wasmExports['strtoul'])(a0, a1, a2);\nvar _cstring_to_text = Module['_cstring_to_text'] = (a0) => (_cstring_to_text = Module['_cstring_to_text'] = wasmExports['cstring_to_text'])(a0);\nvar _Int64GetDatum = Module['_Int64GetDatum'] = (a0) => (_Int64GetDatum = Module['_Int64GetDatum'] = wasmExports['Int64GetDatum'])(a0);\nvar _TimestampDifferenceMilliseconds = Module['_TimestampDifferenceMilliseconds'] = (a0, a1) => (_TimestampDifferenceMilliseconds = Module['_TimestampDifferenceMilliseconds'] = wasmExports['TimestampDifferenceMilliseconds'])(a0, a1);\nvar ___wasm_setjmp_test = Module['___wasm_setjmp_test'] = (a0, a1) => (___wasm_setjmp_test = Module['___wasm_setjmp_test'] = wasmExports['__wasm_setjmp_test'])(a0, a1);\nvar _defGetString = Module['_defGetString'] = (a0) => (_defGetString = Module['_defGetString'] = wasmExports['defGetString'])(a0);\nvar _defGetBoolean = Module['_defGetBoolean'] = (a0) => (_defGetBoolean = Module['_defGetBoolean'] = wasmExports['defGetBoolean'])(a0);\nvar _parse_bool = Module['_parse_bool'] = (a0, a1) => (_parse_bool = Module['_parse_bool'] = wasmExports['parse_bool'])(a0, a1);\nvar ___wasm_setjmp = Module['___wasm_setjmp'] = (a0, a1, a2) => (___wasm_setjmp = Module['___wasm_setjmp'] = wasmExports['__wasm_setjmp'])(a0, a1, a2);\nvar _pg_re_throw = Module['_pg_re_throw'] = () => (_pg_re_throw = Module['_pg_re_throw'] = wasmExports['pg_re_throw'])();\nvar _emscripten_longjmp = Module['_emscripten_longjmp'] = (a0, a1) => (_emscripten_longjmp = Module['_emscripten_longjmp'] = wasmExports['emscripten_longjmp'])(a0, a1);\nvar _ResourceOwnerCreate = Module['_ResourceOwnerCreate'] = (a0, a1) => (_ResourceOwnerCreate = Module['_ResourceOwnerCreate'] = wasmExports['ResourceOwnerCreate'])(a0, a1);\nvar _RecoveryInProgress = Module['_RecoveryInProgress'] = () => (_RecoveryInProgress = Module['_RecoveryInProgress'] = wasmExports['RecoveryInProgress'])();\nvar _makeStringInfo = Module['_makeStringInfo'] = () => (_makeStringInfo = Module['_makeStringInfo'] = wasmExports['makeStringInfo'])();\nvar _before_shmem_exit = Module['_before_shmem_exit'] = (a0, a1) => (_before_shmem_exit = Module['_before_shmem_exit'] = wasmExports['before_shmem_exit'])(a0, a1);\nvar _cancel_before_shmem_exit = Module['_cancel_before_shmem_exit'] = (a0, a1) => (_cancel_before_shmem_exit = Module['_cancel_before_shmem_exit'] = wasmExports['cancel_before_shmem_exit'])(a0, a1);\nvar _AllocateDir = Module['_AllocateDir'] = (a0) => (_AllocateDir = Module['_AllocateDir'] = wasmExports['AllocateDir'])(a0);\nvar _ReadDir = Module['_ReadDir'] = (a0, a1) => (_ReadDir = Module['_ReadDir'] = wasmExports['ReadDir'])(a0, a1);\nvar _FreeDir = Module['_FreeDir'] = (a0) => (_FreeDir = Module['_FreeDir'] = wasmExports['FreeDir'])(a0);\nvar _list_sort = Module['_list_sort'] = (a0, a1) => (_list_sort = Module['_list_sort'] = wasmExports['list_sort'])(a0, a1);\nvar _sscanf = Module['_sscanf'] = (a0, a1, a2) => (_sscanf = Module['_sscanf'] = wasmExports['sscanf'])(a0, a1, a2);\nvar _OpenTransientFile = Module['_OpenTransientFile'] = (a0, a1) => (_OpenTransientFile = Module['_OpenTransientFile'] = wasmExports['OpenTransientFile'])(a0, a1);\nvar _fstat = Module['_fstat'] = (a0, a1) => (_fstat = Module['_fstat'] = wasmExports['fstat'])(a0, a1);\nvar _CloseTransientFile = Module['_CloseTransientFile'] = (a0) => (_CloseTransientFile = Module['_CloseTransientFile'] = wasmExports['CloseTransientFile'])(a0);\nvar _errstart = Module['_errstart'] = (a0, a1) => (_errstart = Module['_errstart'] = wasmExports['errstart'])(a0, a1);\nvar _errmsg_plural = Module['_errmsg_plural'] = (a0, a1, a2, a3) => (_errmsg_plural = Module['_errmsg_plural'] = wasmExports['errmsg_plural'])(a0, a1, a2, a3);\nvar _strncmp = Module['_strncmp'] = (a0, a1, a2) => (_strncmp = Module['_strncmp'] = wasmExports['strncmp'])(a0, a1, a2);\nvar _ProcessInterrupts = Module['_ProcessInterrupts'] = () => (_ProcessInterrupts = Module['_ProcessInterrupts'] = wasmExports['ProcessInterrupts'])();\nvar _memcmp = Module['_memcmp'] = (a0, a1, a2) => (_memcmp = Module['_memcmp'] = wasmExports['memcmp'])(a0, a1, a2);\nvar _geteuid = Module['_geteuid'] = () => (_geteuid = Module['_geteuid'] = wasmExports['geteuid'])();\nvar _time = Module['_time'] = (a0) => (_time = Module['_time'] = wasmExports['time'])(a0);\nvar _atoi = Module['_atoi'] = (a0) => (_atoi = Module['_atoi'] = wasmExports['atoi'])(a0);\nvar _pg_checksum_page = Module['_pg_checksum_page'] = (a0, a1) => (_pg_checksum_page = Module['_pg_checksum_page'] = wasmExports['pg_checksum_page'])(a0, a1);\nvar _pgstat_progress_update_param = Module['_pgstat_progress_update_param'] = (a0, a1) => (_pgstat_progress_update_param = Module['_pgstat_progress_update_param'] = wasmExports['pgstat_progress_update_param'])(a0, a1);\nvar _ResetLatch = Module['_ResetLatch'] = (a0) => (_ResetLatch = Module['_ResetLatch'] = wasmExports['ResetLatch'])(a0);\nvar _WaitLatch = Module['_WaitLatch'] = (a0, a1, a2, a3) => (_WaitLatch = Module['_WaitLatch'] = wasmExports['WaitLatch'])(a0, a1, a2, a3);\nvar _gettimeofday = Module['_gettimeofday'] = (a0, a1) => (_gettimeofday = Module['_gettimeofday'] = wasmExports['gettimeofday'])(a0, a1);\nvar _raw_parser = Module['_raw_parser'] = (a0, a1) => (_raw_parser = Module['_raw_parser'] = wasmExports['raw_parser'])(a0, a1);\nvar _errdetail_internal = Module['_errdetail_internal'] = (a0, a1) => (_errdetail_internal = Module['_errdetail_internal'] = wasmExports['errdetail_internal'])(a0, a1);\nvar _list_make1_impl = Module['_list_make1_impl'] = (a0, a1) => (_list_make1_impl = Module['_list_make1_impl'] = wasmExports['list_make1_impl'])(a0, a1);\nvar _MemoryContextAllocZeroAligned = Module['_MemoryContextAllocZeroAligned'] = (a0, a1) => (_MemoryContextAllocZeroAligned = Module['_MemoryContextAllocZeroAligned'] = wasmExports['MemoryContextAllocZeroAligned'])(a0, a1);\nvar _pg_prng_double = Module['_pg_prng_double'] = (a0) => (_pg_prng_double = Module['_pg_prng_double'] = wasmExports['pg_prng_double'])(a0);\nvar _sigaddset = Module['_sigaddset'] = (a0, a1) => (_sigaddset = Module['_sigaddset'] = wasmExports['sigaddset'])(a0, a1);\nvar _die = Module['_die'] = (a0) => (_die = Module['_die'] = wasmExports['die'])(a0);\nvar _check_stack_depth = Module['_check_stack_depth'] = () => (_check_stack_depth = Module['_check_stack_depth'] = wasmExports['check_stack_depth'])();\nvar _pre_format_elog_string = Module['_pre_format_elog_string'] = (a0, a1) => (_pre_format_elog_string = Module['_pre_format_elog_string'] = wasmExports['pre_format_elog_string'])(a0, a1);\nvar _format_elog_string = Module['_format_elog_string'] = (a0, a1) => (_format_elog_string = Module['_format_elog_string'] = wasmExports['format_elog_string'])(a0, a1);\nvar _SplitIdentifierString = Module['_SplitIdentifierString'] = (a0, a1, a2) => (_SplitIdentifierString = Module['_SplitIdentifierString'] = wasmExports['SplitIdentifierString'])(a0, a1, a2);\nvar _list_free = Module['_list_free'] = (a0) => (_list_free = Module['_list_free'] = wasmExports['list_free'])(a0);\nvar _guc_malloc = Module['_guc_malloc'] = (a0, a1) => (_guc_malloc = Module['_guc_malloc'] = wasmExports['guc_malloc'])(a0, a1);\nvar _SetConfigOption = Module['_SetConfigOption'] = (a0, a1, a2, a3) => (_SetConfigOption = Module['_SetConfigOption'] = wasmExports['SetConfigOption'])(a0, a1, a2, a3);\nvar _pg_sprintf = Module['_pg_sprintf'] = (a0, a1, a2) => (_pg_sprintf = Module['_pg_sprintf'] = wasmExports['pg_sprintf'])(a0, a1, a2);\nvar _strlcpy = Module['_strlcpy'] = (a0, a1, a2) => (_strlcpy = Module['_strlcpy'] = wasmExports['strlcpy'])(a0, a1, a2);\nvar _fsync_pgdata = Module['_fsync_pgdata'] = (a0, a1) => (_fsync_pgdata = Module['_fsync_pgdata'] = wasmExports['fsync_pgdata'])(a0, a1);\nvar _get_restricted_token = Module['_get_restricted_token'] = () => (_get_restricted_token = Module['_get_restricted_token'] = wasmExports['get_restricted_token'])();\nvar _pg_malloc = Module['_pg_malloc'] = (a0) => (_pg_malloc = Module['_pg_malloc'] = wasmExports['pg_malloc'])(a0);\nvar _pg_realloc = Module['_pg_realloc'] = (a0, a1) => (_pg_realloc = Module['_pg_realloc'] = wasmExports['pg_realloc'])(a0, a1);\nvar _realloc = Module['_realloc'] = (a0, a1) => (_realloc = Module['_realloc'] = wasmExports['realloc'])(a0, a1);\nvar _pg_strdup = Module['_pg_strdup'] = (a0) => (_pg_strdup = Module['_pg_strdup'] = wasmExports['pg_strdup'])(a0);\nvar _simple_prompt = Module['_simple_prompt'] = (a0, a1) => (_simple_prompt = Module['_simple_prompt'] = wasmExports['simple_prompt'])(a0, a1);\nvar _MemoryContextDelete = Module['_MemoryContextDelete'] = (a0) => (_MemoryContextDelete = Module['_MemoryContextDelete'] = wasmExports['MemoryContextDelete'])(a0);\nvar _pg_printf = Module['_pg_printf'] = (a0, a1) => (_pg_printf = Module['_pg_printf'] = wasmExports['pg_printf'])(a0, a1);\nvar _AllocSetContextCreateInternal = Module['_AllocSetContextCreateInternal'] = (a0, a1, a2, a3, a4) => (_AllocSetContextCreateInternal = Module['_AllocSetContextCreateInternal'] = wasmExports['AllocSetContextCreateInternal'])(a0, a1, a2, a3, a4);\nvar _fopen = Module['_fopen'] = (a0, a1) => (_fopen = Module['_fopen'] = wasmExports['fopen'])(a0, a1);\nvar _interactive_file = Module['_interactive_file'] = () => (_interactive_file = Module['_interactive_file'] = wasmExports['interactive_file'])();\nvar _fclose = Module['_fclose'] = (a0) => (_fclose = Module['_fclose'] = wasmExports['fclose'])(a0);\nvar _interactive_one = Module['_interactive_one'] = () => (_interactive_one = Module['_interactive_one'] = wasmExports['interactive_one'])();\nvar _MemoryContextReset = Module['_MemoryContextReset'] = (a0) => (_MemoryContextReset = Module['_MemoryContextReset'] = wasmExports['MemoryContextReset'])(a0);\nvar _resetStringInfo = Module['_resetStringInfo'] = (a0) => (_resetStringInfo = Module['_resetStringInfo'] = wasmExports['resetStringInfo'])(a0);\nvar _getc = Module['_getc'] = (a0) => (_getc = Module['_getc'] = wasmExports['getc'])(a0);\nvar _pq_getmsgint = Module['_pq_getmsgint'] = (a0, a1) => (_pq_getmsgint = Module['_pq_getmsgint'] = wasmExports['pq_getmsgint'])(a0, a1);\nvar _pgstat_report_activity = Module['_pgstat_report_activity'] = (a0, a1) => (_pgstat_report_activity = Module['_pgstat_report_activity'] = wasmExports['pgstat_report_activity'])(a0, a1);\nvar _access = Module['_access'] = (a0, a1) => (_access = Module['_access'] = wasmExports['access'])(a0, a1);\nvar _pq_recvbuf_fill = Module['_pq_recvbuf_fill'] = (a0, a1) => (_pq_recvbuf_fill = Module['_pq_recvbuf_fill'] = wasmExports['pq_recvbuf_fill'])(a0, a1);\nvar _unlink = Module['_unlink'] = (a0) => (_unlink = Module['_unlink'] = wasmExports['unlink'])(a0);\nvar _calloc = Module['_calloc'] = (a0, a1) => (_calloc = Module['_calloc'] = wasmExports['calloc'])(a0, a1);\nvar _EmitErrorReport = Module['_EmitErrorReport'] = () => (_EmitErrorReport = Module['_EmitErrorReport'] = wasmExports['EmitErrorReport'])();\nvar _FlushErrorState = Module['_FlushErrorState'] = () => (_FlushErrorState = Module['_FlushErrorState'] = wasmExports['FlushErrorState'])();\nvar _pg_repl_raf = Module['_pg_repl_raf'] = () => (_pg_repl_raf = Module['_pg_repl_raf'] = wasmExports['pg_repl_raf'])();\nvar _pg_shutdown = Module['_pg_shutdown'] = () => (_pg_shutdown = Module['_pg_shutdown'] = wasmExports['pg_shutdown'])();\nvar _errhidestmt = Module['_errhidestmt'] = (a0) => (_errhidestmt = Module['_errhidestmt'] = wasmExports['errhidestmt'])(a0);\nvar _GetTransactionSnapshot = Module['_GetTransactionSnapshot'] = () => (_GetTransactionSnapshot = Module['_GetTransactionSnapshot'] = wasmExports['GetTransactionSnapshot'])();\nvar _PushActiveSnapshot = Module['_PushActiveSnapshot'] = (a0) => (_PushActiveSnapshot = Module['_PushActiveSnapshot'] = wasmExports['PushActiveSnapshot'])(a0);\nvar _PopActiveSnapshot = Module['_PopActiveSnapshot'] = () => (_PopActiveSnapshot = Module['_PopActiveSnapshot'] = wasmExports['PopActiveSnapshot'])();\nvar _CommandCounterIncrement = Module['_CommandCounterIncrement'] = () => (_CommandCounterIncrement = Module['_CommandCounterIncrement'] = wasmExports['CommandCounterIncrement'])();\nvar _MemoryContextSetParent = Module['_MemoryContextSetParent'] = (a0, a1) => (_MemoryContextSetParent = Module['_MemoryContextSetParent'] = wasmExports['MemoryContextSetParent'])(a0, a1);\nvar _makeParamList = Module['_makeParamList'] = (a0) => (_makeParamList = Module['_makeParamList'] = wasmExports['makeParamList'])(a0);\nvar _getTypeInputInfo = Module['_getTypeInputInfo'] = (a0, a1, a2) => (_getTypeInputInfo = Module['_getTypeInputInfo'] = wasmExports['getTypeInputInfo'])(a0, a1, a2);\nvar _pnstrdup = Module['_pnstrdup'] = (a0, a1) => (_pnstrdup = Module['_pnstrdup'] = wasmExports['pnstrdup'])(a0, a1);\nvar _interactive_write = Module['_interactive_write'] = (a0) => (_interactive_write = Module['_interactive_write'] = wasmExports['interactive_write'])(a0);\nvar _interactive_read = Module['_interactive_read'] = () => (_interactive_read = Module['_interactive_read'] = wasmExports['interactive_read'])();\nvar _appendStringInfoStringQuoted = Module['_appendStringInfoStringQuoted'] = (a0, a1, a2) => (_appendStringInfoStringQuoted = Module['_appendStringInfoStringQuoted'] = wasmExports['appendStringInfoStringQuoted'])(a0, a1, a2);\nvar _set_errcontext_domain = Module['_set_errcontext_domain'] = (a0) => (_set_errcontext_domain = Module['_set_errcontext_domain'] = wasmExports['set_errcontext_domain'])(a0);\nvar _errcontext_msg = Module['_errcontext_msg'] = (a0, a1) => (_errcontext_msg = Module['_errcontext_msg'] = wasmExports['errcontext_msg'])(a0, a1);\nvar _SearchSysCache1 = Module['_SearchSysCache1'] = (a0, a1) => (_SearchSysCache1 = Module['_SearchSysCache1'] = wasmExports['SearchSysCache1'])(a0, a1);\nvar _ReleaseSysCache = Module['_ReleaseSysCache'] = (a0) => (_ReleaseSysCache = Module['_ReleaseSysCache'] = wasmExports['ReleaseSysCache'])(a0);\nvar _fmgr_info = Module['_fmgr_info'] = (a0, a1) => (_fmgr_info = Module['_fmgr_info'] = wasmExports['fmgr_info'])(a0, a1);\nvar _object_aclcheck = Module['_object_aclcheck'] = (a0, a1, a2, a3) => (_object_aclcheck = Module['_object_aclcheck'] = wasmExports['object_aclcheck'])(a0, a1, a2, a3);\nvar _get_namespace_name = Module['_get_namespace_name'] = (a0) => (_get_namespace_name = Module['_get_namespace_name'] = wasmExports['get_namespace_name'])(a0);\nvar _aclcheck_error = Module['_aclcheck_error'] = (a0, a1, a2) => (_aclcheck_error = Module['_aclcheck_error'] = wasmExports['aclcheck_error'])(a0, a1, a2);\nvar _appendBinaryStringInfo = Module['_appendBinaryStringInfo'] = (a0, a1, a2) => (_appendBinaryStringInfo = Module['_appendBinaryStringInfo'] = wasmExports['appendBinaryStringInfo'])(a0, a1, a2);\nvar _getTypeOutputInfo = Module['_getTypeOutputInfo'] = (a0, a1, a2) => (_getTypeOutputInfo = Module['_getTypeOutputInfo'] = wasmExports['getTypeOutputInfo'])(a0, a1, a2);\nvar _OidOutputFunctionCall = Module['_OidOutputFunctionCall'] = (a0, a1) => (_OidOutputFunctionCall = Module['_OidOutputFunctionCall'] = wasmExports['OidOutputFunctionCall'])(a0, a1);\nvar _RegisterSnapshot = Module['_RegisterSnapshot'] = (a0) => (_RegisterSnapshot = Module['_RegisterSnapshot'] = wasmExports['RegisterSnapshot'])(a0);\nvar _UnregisterSnapshot = Module['_UnregisterSnapshot'] = (a0) => (_UnregisterSnapshot = Module['_UnregisterSnapshot'] = wasmExports['UnregisterSnapshot'])(a0);\nvar _GetActiveSnapshot = Module['_GetActiveSnapshot'] = () => (_GetActiveSnapshot = Module['_GetActiveSnapshot'] = wasmExports['GetActiveSnapshot'])();\nvar _MemoryContextAlloc = Module['_MemoryContextAlloc'] = (a0, a1) => (_MemoryContextAlloc = Module['_MemoryContextAlloc'] = wasmExports['MemoryContextAlloc'])(a0, a1);\nvar _SetTuplestoreDestReceiverParams = Module['_SetTuplestoreDestReceiverParams'] = (a0, a1, a2, a3, a4, a5) => (_SetTuplestoreDestReceiverParams = Module['_SetTuplestoreDestReceiverParams'] = wasmExports['SetTuplestoreDestReceiverParams'])(a0, a1, a2, a3, a4, a5);\nvar _MemoryContextDeleteChildren = Module['_MemoryContextDeleteChildren'] = (a0) => (_MemoryContextDeleteChildren = Module['_MemoryContextDeleteChildren'] = wasmExports['MemoryContextDeleteChildren'])(a0);\nvar _EnsurePortalSnapshotExists = Module['_EnsurePortalSnapshotExists'] = () => (_EnsurePortalSnapshotExists = Module['_EnsurePortalSnapshotExists'] = wasmExports['EnsurePortalSnapshotExists'])();\nvar _MakeSingleTupleTableSlot = Module['_MakeSingleTupleTableSlot'] = (a0, a1) => (_MakeSingleTupleTableSlot = Module['_MakeSingleTupleTableSlot'] = wasmExports['MakeSingleTupleTableSlot'])(a0, a1);\nvar _ExecDropSingleTupleTableSlot = Module['_ExecDropSingleTupleTableSlot'] = (a0) => (_ExecDropSingleTupleTableSlot = Module['_ExecDropSingleTupleTableSlot'] = wasmExports['ExecDropSingleTupleTableSlot'])(a0);\nvar _GetCommandTagName = Module['_GetCommandTagName'] = (a0) => (_GetCommandTagName = Module['_GetCommandTagName'] = wasmExports['GetCommandTagName'])(a0);\nvar _standard_ProcessUtility = Module['_standard_ProcessUtility'] = (a0, a1, a2, a3, a4, a5, a6, a7) => (_standard_ProcessUtility = Module['_standard_ProcessUtility'] = wasmExports['standard_ProcessUtility'])(a0, a1, a2, a3, a4, a5, a6, a7);\nvar _copyObjectImpl = Module['_copyObjectImpl'] = (a0) => (_copyObjectImpl = Module['_copyObjectImpl'] = wasmExports['copyObjectImpl'])(a0);\nvar _Async_Notify = Module['_Async_Notify'] = (a0, a1) => (_Async_Notify = Module['_Async_Notify'] = wasmExports['Async_Notify'])(a0, a1);\nvar _superuser = Module['_superuser'] = () => (_superuser = Module['_superuser'] = wasmExports['superuser'])();\nvar _list_concat = Module['_list_concat'] = (a0, a1) => (_list_concat = Module['_list_concat'] = wasmExports['list_concat'])(a0, a1);\nvar _RangeVarGetRelidExtended = Module['_RangeVarGetRelidExtended'] = (a0, a1, a2, a3, a4) => (_RangeVarGetRelidExtended = Module['_RangeVarGetRelidExtended'] = wasmExports['RangeVarGetRelidExtended'])(a0, a1, a2, a3, a4);\nvar _get_rel_relkind = Module['_get_rel_relkind'] = (a0) => (_get_rel_relkind = Module['_get_rel_relkind'] = wasmExports['get_rel_relkind'])(a0);\nvar _CreateTupleDescCopy = Module['_CreateTupleDescCopy'] = (a0) => (_CreateTupleDescCopy = Module['_CreateTupleDescCopy'] = wasmExports['CreateTupleDescCopy'])(a0);\nvar _bms_next_member = Module['_bms_next_member'] = (a0, a1) => (_bms_next_member = Module['_bms_next_member'] = wasmExports['bms_next_member'])(a0, a1);\nvar _bms_add_member = Module['_bms_add_member'] = (a0, a1) => (_bms_add_member = Module['_bms_add_member'] = wasmExports['bms_add_member'])(a0, a1);\nvar _bms_is_member = Module['_bms_is_member'] = (a0, a1) => (_bms_is_member = Module['_bms_is_member'] = wasmExports['bms_is_member'])(a0, a1);\nvar _bms_del_member = Module['_bms_del_member'] = (a0, a1) => (_bms_del_member = Module['_bms_del_member'] = wasmExports['bms_del_member'])(a0, a1);\nvar _bms_union = Module['_bms_union'] = (a0, a1) => (_bms_union = Module['_bms_union'] = wasmExports['bms_union'])(a0, a1);\nvar _bms_overlap = Module['_bms_overlap'] = (a0, a1) => (_bms_overlap = Module['_bms_overlap'] = wasmExports['bms_overlap'])(a0, a1);\nvar _table_open = Module['_table_open'] = (a0, a1) => (_table_open = Module['_table_open'] = wasmExports['table_open'])(a0, a1);\nvar _ScanKeyInit = Module['_ScanKeyInit'] = (a0, a1, a2, a3, a4) => (_ScanKeyInit = Module['_ScanKeyInit'] = wasmExports['ScanKeyInit'])(a0, a1, a2, a3, a4);\nvar _systable_beginscan = Module['_systable_beginscan'] = (a0, a1, a2, a3, a4, a5) => (_systable_beginscan = Module['_systable_beginscan'] = wasmExports['systable_beginscan'])(a0, a1, a2, a3, a4, a5);\nvar _systable_getnext = Module['_systable_getnext'] = (a0) => (_systable_getnext = Module['_systable_getnext'] = wasmExports['systable_getnext'])(a0);\nvar _systable_endscan = Module['_systable_endscan'] = (a0) => (_systable_endscan = Module['_systable_endscan'] = wasmExports['systable_endscan'])(a0);\nvar _table_close = Module['_table_close'] = (a0, a1) => (_table_close = Module['_table_close'] = wasmExports['table_close'])(a0, a1);\nvar _errdetail_relkind_not_supported = Module['_errdetail_relkind_not_supported'] = (a0) => (_errdetail_relkind_not_supported = Module['_errdetail_relkind_not_supported'] = wasmExports['errdetail_relkind_not_supported'])(a0);\nvar _object_ownercheck = Module['_object_ownercheck'] = (a0, a1, a2) => (_object_ownercheck = Module['_object_ownercheck'] = wasmExports['object_ownercheck'])(a0, a1, a2);\nvar _get_relkind_objtype = Module['_get_relkind_objtype'] = (a0) => (_get_relkind_objtype = Module['_get_relkind_objtype'] = wasmExports['get_relkind_objtype'])(a0);\nvar _SearchSysCache2 = Module['_SearchSysCache2'] = (a0, a1, a2) => (_SearchSysCache2 = Module['_SearchSysCache2'] = wasmExports['SearchSysCache2'])(a0, a1, a2);\nvar _get_rel_name = Module['_get_rel_name'] = (a0) => (_get_rel_name = Module['_get_rel_name'] = wasmExports['get_rel_name'])(a0);\nvar _heap_form_tuple = Module['_heap_form_tuple'] = (a0, a1, a2) => (_heap_form_tuple = Module['_heap_form_tuple'] = wasmExports['heap_form_tuple'])(a0, a1, a2);\nvar _heap_freetuple = Module['_heap_freetuple'] = (a0) => (_heap_freetuple = Module['_heap_freetuple'] = wasmExports['heap_freetuple'])(a0);\nvar _exprType = Module['_exprType'] = (a0) => (_exprType = Module['_exprType'] = wasmExports['exprType'])(a0);\nvar _format_type_be = Module['_format_type_be'] = (a0) => (_format_type_be = Module['_format_type_be'] = wasmExports['format_type_be'])(a0);\nvar _exprTypmod = Module['_exprTypmod'] = (a0) => (_exprTypmod = Module['_exprTypmod'] = wasmExports['exprTypmod'])(a0);\nvar _format_type_with_typemod = Module['_format_type_with_typemod'] = (a0, a1) => (_format_type_with_typemod = Module['_format_type_with_typemod'] = wasmExports['format_type_with_typemod'])(a0, a1);\nvar _relation_open = Module['_relation_open'] = (a0, a1) => (_relation_open = Module['_relation_open'] = wasmExports['relation_open'])(a0, a1);\nvar _relation_close = Module['_relation_close'] = (a0, a1) => (_relation_close = Module['_relation_close'] = wasmExports['relation_close'])(a0, a1);\nvar _makeString = Module['_makeString'] = (a0) => (_makeString = Module['_makeString'] = wasmExports['makeString'])(a0);\nvar _makeTargetEntry = Module['_makeTargetEntry'] = (a0, a1, a2, a3) => (_makeTargetEntry = Module['_makeTargetEntry'] = wasmExports['makeTargetEntry'])(a0, a1, a2, a3);\nvar _makeVar = Module['_makeVar'] = (a0, a1, a2, a3, a4, a5) => (_makeVar = Module['_makeVar'] = wasmExports['makeVar'])(a0, a1, a2, a3, a4, a5);\nvar _list_make2_impl = Module['_list_make2_impl'] = (a0, a1, a2) => (_list_make2_impl = Module['_list_make2_impl'] = wasmExports['list_make2_impl'])(a0, a1, a2);\nvar _lappend_oid = Module['_lappend_oid'] = (a0, a1) => (_lappend_oid = Module['_lappend_oid'] = wasmExports['lappend_oid'])(a0, a1);\nvar _lappend_int = Module['_lappend_int'] = (a0, a1) => (_lappend_int = Module['_lappend_int'] = wasmExports['lappend_int'])(a0, a1);\nvar _SearchSysCacheExists = Module['_SearchSysCacheExists'] = (a0, a1, a2, a3, a4) => (_SearchSysCacheExists = Module['_SearchSysCacheExists'] = wasmExports['SearchSysCacheExists'])(a0, a1, a2, a3, a4);\nvar _strip_implicit_coercions = Module['_strip_implicit_coercions'] = (a0) => (_strip_implicit_coercions = Module['_strip_implicit_coercions'] = wasmExports['strip_implicit_coercions'])(a0);\nvar _stringToNode = Module['_stringToNode'] = (a0) => (_stringToNode = Module['_stringToNode'] = wasmExports['stringToNode'])(a0);\nvar _coerce_to_target_type = Module['_coerce_to_target_type'] = (a0, a1, a2, a3, a4, a5, a6, a7) => (_coerce_to_target_type = Module['_coerce_to_target_type'] = wasmExports['coerce_to_target_type'])(a0, a1, a2, a3, a4, a5, a6, a7);\nvar _try_relation_open = Module['_try_relation_open'] = (a0, a1) => (_try_relation_open = Module['_try_relation_open'] = wasmExports['try_relation_open'])(a0, a1);\nvar _list_member_oid = Module['_list_member_oid'] = (a0, a1) => (_list_member_oid = Module['_list_member_oid'] = wasmExports['list_member_oid'])(a0, a1);\nvar _list_delete_last = Module['_list_delete_last'] = (a0) => (_list_delete_last = Module['_list_delete_last'] = wasmExports['list_delete_last'])(a0);\nvar _list_delete_cell = Module['_list_delete_cell'] = (a0, a1) => (_list_delete_cell = Module['_list_delete_cell'] = wasmExports['list_delete_cell'])(a0, a1);\nvar _addRTEPermissionInfo = Module['_addRTEPermissionInfo'] = (a0, a1) => (_addRTEPermissionInfo = Module['_addRTEPermissionInfo'] = wasmExports['addRTEPermissionInfo'])(a0, a1);\nvar _equal = Module['_equal'] = (a0, a1) => (_equal = Module['_equal'] = wasmExports['equal'])(a0, a1);\nvar _repalloc = Module['_repalloc'] = (a0, a1) => (_repalloc = Module['_repalloc'] = wasmExports['repalloc'])(a0, a1);\nvar _memmove = Module['_memmove'] = (a0, a1, a2) => (_memmove = Module['_memmove'] = wasmExports['memmove'])(a0, a1, a2);\nvar _palloc_extended = Module['_palloc_extended'] = (a0, a1) => (_palloc_extended = Module['_palloc_extended'] = wasmExports['palloc_extended'])(a0, a1);\nvar _pg_reg_getinitialstate = Module['_pg_reg_getinitialstate'] = (a0) => (_pg_reg_getinitialstate = Module['_pg_reg_getinitialstate'] = wasmExports['pg_reg_getinitialstate'])(a0);\nvar _pg_reg_getfinalstate = Module['_pg_reg_getfinalstate'] = (a0) => (_pg_reg_getfinalstate = Module['_pg_reg_getfinalstate'] = wasmExports['pg_reg_getfinalstate'])(a0);\nvar _pg_reg_getnumoutarcs = Module['_pg_reg_getnumoutarcs'] = (a0, a1) => (_pg_reg_getnumoutarcs = Module['_pg_reg_getnumoutarcs'] = wasmExports['pg_reg_getnumoutarcs'])(a0, a1);\nvar _pg_reg_getoutarcs = Module['_pg_reg_getoutarcs'] = (a0, a1, a2, a3) => (_pg_reg_getoutarcs = Module['_pg_reg_getoutarcs'] = wasmExports['pg_reg_getoutarcs'])(a0, a1, a2, a3);\nvar _pg_reg_getnumcolors = Module['_pg_reg_getnumcolors'] = (a0) => (_pg_reg_getnumcolors = Module['_pg_reg_getnumcolors'] = wasmExports['pg_reg_getnumcolors'])(a0);\nvar _pg_reg_colorisbegin = Module['_pg_reg_colorisbegin'] = (a0, a1) => (_pg_reg_colorisbegin = Module['_pg_reg_colorisbegin'] = wasmExports['pg_reg_colorisbegin'])(a0, a1);\nvar _pg_reg_colorisend = Module['_pg_reg_colorisend'] = (a0, a1) => (_pg_reg_colorisend = Module['_pg_reg_colorisend'] = wasmExports['pg_reg_colorisend'])(a0, a1);\nvar _pg_reg_getnumcharacters = Module['_pg_reg_getnumcharacters'] = (a0, a1) => (_pg_reg_getnumcharacters = Module['_pg_reg_getnumcharacters'] = wasmExports['pg_reg_getnumcharacters'])(a0, a1);\nvar _pg_reg_getcharacters = Module['_pg_reg_getcharacters'] = (a0, a1, a2, a3) => (_pg_reg_getcharacters = Module['_pg_reg_getcharacters'] = wasmExports['pg_reg_getcharacters'])(a0, a1, a2, a3);\nvar _pg_regerror = Module['_pg_regerror'] = (a0, a1, a2, a3) => (_pg_regerror = Module['_pg_regerror'] = wasmExports['pg_regerror'])(a0, a1, a2, a3);\nvar _strcpy = Module['_strcpy'] = (a0, a1) => (_strcpy = Module['_strcpy'] = wasmExports['strcpy'])(a0, a1);\nvar _pg_regcomp = Module['_pg_regcomp'] = (a0, a1, a2, a3, a4) => (_pg_regcomp = Module['_pg_regcomp'] = wasmExports['pg_regcomp'])(a0, a1, a2, a3, a4);\nvar _GetDatabaseEncoding = Module['_GetDatabaseEncoding'] = () => (_GetDatabaseEncoding = Module['_GetDatabaseEncoding'] = wasmExports['GetDatabaseEncoding'])();\nvar _pg_qsort = Module['_pg_qsort'] = (a0, a1, a2, a3) => (_pg_qsort = Module['_pg_qsort'] = wasmExports['pg_qsort'])(a0, a1, a2, a3);\nvar _isalnum = Module['_isalnum'] = (a0) => (_isalnum = Module['_isalnum'] = wasmExports['isalnum'])(a0);\nvar _tolower = Module['_tolower'] = (a0) => (_tolower = Module['_tolower'] = wasmExports['tolower'])(a0);\nvar _toupper = Module['_toupper'] = (a0) => (_toupper = Module['_toupper'] = wasmExports['toupper'])(a0);\nvar _makeRangeVar = Module['_makeRangeVar'] = (a0, a1, a2) => (_makeRangeVar = Module['_makeRangeVar'] = wasmExports['makeRangeVar'])(a0, a1, a2);\nvar _ferror = Module['_ferror'] = (a0) => (_ferror = Module['_ferror'] = wasmExports['ferror'])(a0);\nvar _fread = Module['_fread'] = (a0, a1, a2, a3) => (_fread = Module['_fread'] = wasmExports['fread'])(a0, a1, a2, a3);\nvar _clearerr = Module['_clearerr'] = (a0) => (_clearerr = Module['_clearerr'] = wasmExports['clearerr'])(a0);\nvar _pqsignal = Module['_pqsignal'] = (a0, a1) => (_pqsignal = Module['_pqsignal'] = wasmExports['pqsignal'])(a0, a1);\nvar _table_openrv = Module['_table_openrv'] = (a0, a1) => (_table_openrv = Module['_table_openrv'] = wasmExports['table_openrv'])(a0, a1);\nvar _MemoryContextAllocZero = Module['_MemoryContextAllocZero'] = (a0, a1) => (_MemoryContextAllocZero = Module['_MemoryContextAllocZero'] = wasmExports['MemoryContextAllocZero'])(a0, a1);\nvar _heap_getnext = Module['_heap_getnext'] = (a0, a1) => (_heap_getnext = Module['_heap_getnext'] = wasmExports['heap_getnext'])(a0, a1);\nvar _list_free_deep = Module['_list_free_deep'] = (a0) => (_list_free_deep = Module['_list_free_deep'] = wasmExports['list_free_deep'])(a0);\nvar _index_open = Module['_index_open'] = (a0, a1) => (_index_open = Module['_index_open'] = wasmExports['index_open'])(a0, a1);\nvar _index_close = Module['_index_close'] = (a0, a1) => (_index_close = Module['_index_close'] = wasmExports['index_close'])(a0, a1);\nvar _ExecReScan = Module['_ExecReScan'] = (a0) => (_ExecReScan = Module['_ExecReScan'] = wasmExports['ExecReScan'])(a0);\nvar _InstrEndLoop = Module['_InstrEndLoop'] = (a0) => (_InstrEndLoop = Module['_InstrEndLoop'] = wasmExports['InstrEndLoop'])(a0);\nvar _bms_free = Module['_bms_free'] = (a0) => (_bms_free = Module['_bms_free'] = wasmExports['bms_free'])(a0);\nvar _text_to_cstring = Module['_text_to_cstring'] = (a0) => (_text_to_cstring = Module['_text_to_cstring'] = wasmExports['text_to_cstring'])(a0);\nvar _slot_getsomeattrs_int = Module['_slot_getsomeattrs_int'] = (a0, a1) => (_slot_getsomeattrs_int = Module['_slot_getsomeattrs_int'] = wasmExports['slot_getsomeattrs_int'])(a0, a1);\nvar _CreateExecutorState = Module['_CreateExecutorState'] = () => (_CreateExecutorState = Module['_CreateExecutorState'] = wasmExports['CreateExecutorState'])();\nvar _FreeExecutorState = Module['_FreeExecutorState'] = (a0) => (_FreeExecutorState = Module['_FreeExecutorState'] = wasmExports['FreeExecutorState'])(a0);\nvar _FreeExprContext = Module['_FreeExprContext'] = (a0, a1) => (_FreeExprContext = Module['_FreeExprContext'] = wasmExports['FreeExprContext'])(a0, a1);\nvar _CreateExprContext = Module['_CreateExprContext'] = (a0) => (_CreateExprContext = Module['_CreateExprContext'] = wasmExports['CreateExprContext'])(a0);\nvar _MakePerTupleExprContext = Module['_MakePerTupleExprContext'] = (a0) => (_MakePerTupleExprContext = Module['_MakePerTupleExprContext'] = wasmExports['MakePerTupleExprContext'])(a0);\nvar _list_member_int = Module['_list_member_int'] = (a0, a1) => (_list_member_int = Module['_list_member_int'] = wasmExports['list_member_int'])(a0, a1);\nvar _ExecOpenScanRelation = Module['_ExecOpenScanRelation'] = (a0, a1, a2) => (_ExecOpenScanRelation = Module['_ExecOpenScanRelation'] = wasmExports['ExecOpenScanRelation'])(a0, a1, a2);\nvar _ExecInitRangeTable = Module['_ExecInitRangeTable'] = (a0, a1, a2) => (_ExecInitRangeTable = Module['_ExecInitRangeTable'] = wasmExports['ExecInitRangeTable'])(a0, a1, a2);\nvar _pg_mbstrlen_with_len = Module['_pg_mbstrlen_with_len'] = (a0, a1) => (_pg_mbstrlen_with_len = Module['_pg_mbstrlen_with_len'] = wasmExports['pg_mbstrlen_with_len'])(a0, a1);\nvar _errposition = Module['_errposition'] = (a0) => (_errposition = Module['_errposition'] = wasmExports['errposition'])(a0);\nvar _lookup_rowtype_tupdesc = Module['_lookup_rowtype_tupdesc'] = (a0, a1) => (_lookup_rowtype_tupdesc = Module['_lookup_rowtype_tupdesc'] = wasmExports['lookup_rowtype_tupdesc'])(a0, a1);\nvar _DecrTupleDescRefCount = Module['_DecrTupleDescRefCount'] = (a0) => (_DecrTupleDescRefCount = Module['_DecrTupleDescRefCount'] = wasmExports['DecrTupleDescRefCount'])(a0);\nvar _getmissingattr = Module['_getmissingattr'] = (a0, a1, a2) => (_getmissingattr = Module['_getmissingattr'] = wasmExports['getmissingattr'])(a0, a1, a2);\nvar _nocachegetattr = Module['_nocachegetattr'] = (a0, a1, a2) => (_nocachegetattr = Module['_nocachegetattr'] = wasmExports['nocachegetattr'])(a0, a1, a2);\nvar _ExecGetReturningSlot = Module['_ExecGetReturningSlot'] = (a0, a1) => (_ExecGetReturningSlot = Module['_ExecGetReturningSlot'] = wasmExports['ExecGetReturningSlot'])(a0, a1);\nvar _build_attrmap_by_name_if_req = Module['_build_attrmap_by_name_if_req'] = (a0, a1, a2) => (_build_attrmap_by_name_if_req = Module['_build_attrmap_by_name_if_req'] = wasmExports['build_attrmap_by_name_if_req'])(a0, a1, a2);\nvar _ExecGetResultRelCheckAsUser = Module['_ExecGetResultRelCheckAsUser'] = (a0, a1) => (_ExecGetResultRelCheckAsUser = Module['_ExecGetResultRelCheckAsUser'] = wasmExports['ExecGetResultRelCheckAsUser'])(a0, a1);\nvar _add_size = Module['_add_size'] = (a0, a1) => (_add_size = Module['_add_size'] = wasmExports['add_size'])(a0, a1);\nvar _shm_toc_allocate = Module['_shm_toc_allocate'] = (a0, a1) => (_shm_toc_allocate = Module['_shm_toc_allocate'] = wasmExports['shm_toc_allocate'])(a0, a1);\nvar _shm_toc_insert = Module['_shm_toc_insert'] = (a0, a1, a2) => (_shm_toc_insert = Module['_shm_toc_insert'] = wasmExports['shm_toc_insert'])(a0, a1, a2);\nvar _shm_toc_lookup = Module['_shm_toc_lookup'] = (a0, a1, a2) => (_shm_toc_lookup = Module['_shm_toc_lookup'] = wasmExports['shm_toc_lookup'])(a0, a1, a2);\nvar _ExecInitExpr = Module['_ExecInitExpr'] = (a0, a1) => (_ExecInitExpr = Module['_ExecInitExpr'] = wasmExports['ExecInitExpr'])(a0, a1);\nvar _ItemPointerCompare = Module['_ItemPointerCompare'] = (a0, a1) => (_ItemPointerCompare = Module['_ItemPointerCompare'] = wasmExports['ItemPointerCompare'])(a0, a1);\nvar _bms_add_members = Module['_bms_add_members'] = (a0, a1) => (_bms_add_members = Module['_bms_add_members'] = wasmExports['bms_add_members'])(a0, a1);\nvar _bms_num_members = Module['_bms_num_members'] = (a0) => (_bms_num_members = Module['_bms_num_members'] = wasmExports['bms_num_members'])(a0);\nvar _tuplesort_end = Module['_tuplesort_end'] = (a0) => (_tuplesort_end = Module['_tuplesort_end'] = wasmExports['tuplesort_end'])(a0);\nvar _ExecInitExprList = Module['_ExecInitExprList'] = (a0, a1) => (_ExecInitExprList = Module['_ExecInitExprList'] = wasmExports['ExecInitExprList'])(a0, a1);\nvar _get_typlenbyval = Module['_get_typlenbyval'] = (a0, a1, a2) => (_get_typlenbyval = Module['_get_typlenbyval'] = wasmExports['get_typlenbyval'])(a0, a1, a2);\nvar _SysCacheGetAttr = Module['_SysCacheGetAttr'] = (a0, a1, a2, a3) => (_SysCacheGetAttr = Module['_SysCacheGetAttr'] = wasmExports['SysCacheGetAttr'])(a0, a1, a2, a3);\nvar _ExecForceStoreHeapTuple = Module['_ExecForceStoreHeapTuple'] = (a0, a1, a2) => (_ExecForceStoreHeapTuple = Module['_ExecForceStoreHeapTuple'] = wasmExports['ExecForceStoreHeapTuple'])(a0, a1, a2);\nvar _tuplesort_performsort = Module['_tuplesort_performsort'] = (a0) => (_tuplesort_performsort = Module['_tuplesort_performsort'] = wasmExports['tuplesort_performsort'])(a0);\nvar _tuplesort_begin_heap = Module['_tuplesort_begin_heap'] = (a0, a1, a2, a3, a4, a5, a6, a7, a8) => (_tuplesort_begin_heap = Module['_tuplesort_begin_heap'] = wasmExports['tuplesort_begin_heap'])(a0, a1, a2, a3, a4, a5, a6, a7, a8);\nvar _ExecStoreVirtualTuple = Module['_ExecStoreVirtualTuple'] = (a0) => (_ExecStoreVirtualTuple = Module['_ExecStoreVirtualTuple'] = wasmExports['ExecStoreVirtualTuple'])(a0);\nvar _MemoryContextMemAllocated = Module['_MemoryContextMemAllocated'] = (a0, a1) => (_MemoryContextMemAllocated = Module['_MemoryContextMemAllocated'] = wasmExports['MemoryContextMemAllocated'])(a0, a1);\nvar _tuplesort_gettupleslot = Module['_tuplesort_gettupleslot'] = (a0, a1, a2, a3, a4) => (_tuplesort_gettupleslot = Module['_tuplesort_gettupleslot'] = wasmExports['tuplesort_gettupleslot'])(a0, a1, a2, a3, a4);\nvar _tuplesort_puttupleslot = Module['_tuplesort_puttupleslot'] = (a0, a1) => (_tuplesort_puttupleslot = Module['_tuplesort_puttupleslot'] = wasmExports['tuplesort_puttupleslot'])(a0, a1);\nvar _datumCopy = Module['_datumCopy'] = (a0, a1, a2) => (_datumCopy = Module['_datumCopy'] = wasmExports['datumCopy'])(a0, a1, a2);\nvar _ExecStoreAllNullTuple = Module['_ExecStoreAllNullTuple'] = (a0) => (_ExecStoreAllNullTuple = Module['_ExecStoreAllNullTuple'] = wasmExports['ExecStoreAllNullTuple'])(a0);\nvar _FunctionCall2Coll = Module['_FunctionCall2Coll'] = (a0, a1, a2, a3) => (_FunctionCall2Coll = Module['_FunctionCall2Coll'] = wasmExports['FunctionCall2Coll'])(a0, a1, a2, a3);\nvar _MakeExpandedObjectReadOnlyInternal = Module['_MakeExpandedObjectReadOnlyInternal'] = (a0) => (_MakeExpandedObjectReadOnlyInternal = Module['_MakeExpandedObjectReadOnlyInternal'] = wasmExports['MakeExpandedObjectReadOnlyInternal'])(a0);\nvar _ReleaseBuffer = Module['_ReleaseBuffer'] = (a0) => (_ReleaseBuffer = Module['_ReleaseBuffer'] = wasmExports['ReleaseBuffer'])(a0);\nvar _s_init_lock_sema = Module['_s_init_lock_sema'] = (a0, a1) => (_s_init_lock_sema = Module['_s_init_lock_sema'] = wasmExports['s_init_lock_sema'])(a0, a1);\nvar _ConditionVariableInit = Module['_ConditionVariableInit'] = (a0) => (_ConditionVariableInit = Module['_ConditionVariableInit'] = wasmExports['ConditionVariableInit'])(a0);\nvar _tas_sema = Module['_tas_sema'] = (a0) => (_tas_sema = Module['_tas_sema'] = wasmExports['tas_sema'])(a0);\nvar _s_lock = Module['_s_lock'] = (a0, a1, a2, a3) => (_s_lock = Module['_s_lock'] = wasmExports['s_lock'])(a0, a1, a2, a3);\nvar _s_unlock_sema = Module['_s_unlock_sema'] = (a0) => (_s_unlock_sema = Module['_s_unlock_sema'] = wasmExports['s_unlock_sema'])(a0);\nvar _ConditionVariableSleep = Module['_ConditionVariableSleep'] = (a0, a1) => (_ConditionVariableSleep = Module['_ConditionVariableSleep'] = wasmExports['ConditionVariableSleep'])(a0, a1);\nvar _ConditionVariableCancelSleep = Module['_ConditionVariableCancelSleep'] = () => (_ConditionVariableCancelSleep = Module['_ConditionVariableCancelSleep'] = wasmExports['ConditionVariableCancelSleep'])();\nvar _visibilitymap_get_status = Module['_visibilitymap_get_status'] = (a0, a1, a2) => (_visibilitymap_get_status = Module['_visibilitymap_get_status'] = wasmExports['visibilitymap_get_status'])(a0, a1, a2);\nvar _PrefetchBuffer = Module['_PrefetchBuffer'] = (a0, a1, a2, a3) => (_PrefetchBuffer = Module['_PrefetchBuffer'] = wasmExports['PrefetchBuffer'])(a0, a1, a2, a3);\nvar _ExecFindJunkAttributeInTlist = Module['_ExecFindJunkAttributeInTlist'] = (a0, a1) => (_ExecFindJunkAttributeInTlist = Module['_ExecFindJunkAttributeInTlist'] = wasmExports['ExecFindJunkAttributeInTlist'])(a0, a1);\nvar _get_call_expr_argtype = Module['_get_call_expr_argtype'] = (a0, a1) => (_get_call_expr_argtype = Module['_get_call_expr_argtype'] = wasmExports['get_call_expr_argtype'])(a0, a1);\nvar _get_typcollation = Module['_get_typcollation'] = (a0) => (_get_typcollation = Module['_get_typcollation'] = wasmExports['get_typcollation'])(a0);\nvar _MemoryContextSetIdentifier = Module['_MemoryContextSetIdentifier'] = (a0, a1) => (_MemoryContextSetIdentifier = Module['_MemoryContextSetIdentifier'] = wasmExports['MemoryContextSetIdentifier'])(a0, a1);\nvar _get_call_result_type = Module['_get_call_result_type'] = (a0, a1, a2) => (_get_call_result_type = Module['_get_call_result_type'] = wasmExports['get_call_result_type'])(a0, a1, a2);\nvar _SysCacheGetAttrNotNull = Module['_SysCacheGetAttrNotNull'] = (a0, a1, a2) => (_SysCacheGetAttrNotNull = Module['_SysCacheGetAttrNotNull'] = wasmExports['SysCacheGetAttrNotNull'])(a0, a1, a2);\nvar _BlessTupleDesc = Module['_BlessTupleDesc'] = (a0) => (_BlessTupleDesc = Module['_BlessTupleDesc'] = wasmExports['BlessTupleDesc'])(a0);\nvar _type_is_rowtype = Module['_type_is_rowtype'] = (a0) => (_type_is_rowtype = Module['_type_is_rowtype'] = wasmExports['type_is_rowtype'])(a0);\nvar _GetCurrentSubTransactionId = Module['_GetCurrentSubTransactionId'] = () => (_GetCurrentSubTransactionId = Module['_GetCurrentSubTransactionId'] = wasmExports['GetCurrentSubTransactionId'])();\nvar _tuplestore_begin_heap = Module['_tuplestore_begin_heap'] = (a0, a1, a2) => (_tuplestore_begin_heap = Module['_tuplestore_begin_heap'] = wasmExports['tuplestore_begin_heap'])(a0, a1, a2);\nvar _geterrposition = Module['_geterrposition'] = () => (_geterrposition = Module['_geterrposition'] = wasmExports['geterrposition'])();\nvar _internalerrposition = Module['_internalerrposition'] = (a0) => (_internalerrposition = Module['_internalerrposition'] = wasmExports['internalerrposition'])(a0);\nvar _internalerrquery = Module['_internalerrquery'] = (a0) => (_internalerrquery = Module['_internalerrquery'] = wasmExports['internalerrquery'])(a0);\nvar _tuplestore_end = Module['_tuplestore_end'] = (a0) => (_tuplestore_end = Module['_tuplestore_end'] = wasmExports['tuplestore_end'])(a0);\nvar _get_typtype = Module['_get_typtype'] = (a0) => (_get_typtype = Module['_get_typtype'] = wasmExports['get_typtype'])(a0);\nvar _InstrAlloc = Module['_InstrAlloc'] = (a0, a1, a2) => (_InstrAlloc = Module['_InstrAlloc'] = wasmExports['InstrAlloc'])(a0, a1, a2);\nvar _table_parallelscan_estimate = Module['_table_parallelscan_estimate'] = (a0, a1) => (_table_parallelscan_estimate = Module['_table_parallelscan_estimate'] = wasmExports['table_parallelscan_estimate'])(a0, a1);\nvar _table_parallelscan_initialize = Module['_table_parallelscan_initialize'] = (a0, a1, a2) => (_table_parallelscan_initialize = Module['_table_parallelscan_initialize'] = wasmExports['table_parallelscan_initialize'])(a0, a1, a2);\nvar _table_beginscan_parallel = Module['_table_beginscan_parallel'] = (a0, a1) => (_table_beginscan_parallel = Module['_table_beginscan_parallel'] = wasmExports['table_beginscan_parallel'])(a0, a1);\nvar _tuplestore_putvalues = Module['_tuplestore_putvalues'] = (a0, a1, a2, a3) => (_tuplestore_putvalues = Module['_tuplestore_putvalues'] = wasmExports['tuplestore_putvalues'])(a0, a1, a2, a3);\nvar _pull_varattnos = Module['_pull_varattnos'] = (a0, a1, a2) => (_pull_varattnos = Module['_pull_varattnos'] = wasmExports['pull_varattnos'])(a0, a1, a2);\nvar _ExecPrepareExpr = Module['_ExecPrepareExpr'] = (a0, a1) => (_ExecPrepareExpr = Module['_ExecPrepareExpr'] = wasmExports['ExecPrepareExpr'])(a0, a1);\nvar _hash_search = Module['_hash_search'] = (a0, a1, a2, a3) => (_hash_search = Module['_hash_search'] = wasmExports['hash_search'])(a0, a1, a2, a3);\nvar _hash_create = Module['_hash_create'] = (a0, a1, a2, a3) => (_hash_create = Module['_hash_create'] = wasmExports['hash_create'])(a0, a1, a2, a3);\nvar _pg_detoast_datum = Module['_pg_detoast_datum'] = (a0) => (_pg_detoast_datum = Module['_pg_detoast_datum'] = wasmExports['pg_detoast_datum'])(a0);\nvar _TransactionIdIsCurrentTransactionId = Module['_TransactionIdIsCurrentTransactionId'] = (a0) => (_TransactionIdIsCurrentTransactionId = Module['_TransactionIdIsCurrentTransactionId'] = wasmExports['TransactionIdIsCurrentTransactionId'])(a0);\nvar _execute_attr_map_slot = Module['_execute_attr_map_slot'] = (a0, a1, a2) => (_execute_attr_map_slot = Module['_execute_attr_map_slot'] = wasmExports['execute_attr_map_slot'])(a0, a1, a2);\nvar _MemoryContextAllocExtended = Module['_MemoryContextAllocExtended'] = (a0, a1, a2) => (_MemoryContextAllocExtended = Module['_MemoryContextAllocExtended'] = wasmExports['MemoryContextAllocExtended'])(a0, a1, a2);\nvar _bms_nonempty_difference = Module['_bms_nonempty_difference'] = (a0, a1) => (_bms_nonempty_difference = Module['_bms_nonempty_difference'] = wasmExports['bms_nonempty_difference'])(a0, a1);\nvar _FunctionCall1Coll = Module['_FunctionCall1Coll'] = (a0, a1, a2) => (_FunctionCall1Coll = Module['_FunctionCall1Coll'] = wasmExports['FunctionCall1Coll'])(a0, a1, a2);\nvar _fmgr_info_cxt = Module['_fmgr_info_cxt'] = (a0, a1, a2) => (_fmgr_info_cxt = Module['_fmgr_info_cxt'] = wasmExports['fmgr_info_cxt'])(a0, a1, a2);\nvar _tuplesort_reset = Module['_tuplesort_reset'] = (a0) => (_tuplesort_reset = Module['_tuplesort_reset'] = wasmExports['tuplesort_reset'])(a0);\nvar _deconstruct_array_builtin = Module['_deconstruct_array_builtin'] = (a0, a1, a2, a3, a4) => (_deconstruct_array_builtin = Module['_deconstruct_array_builtin'] = wasmExports['deconstruct_array_builtin'])(a0, a1, a2, a3, a4);\nvar _pairingheap_remove_first = Module['_pairingheap_remove_first'] = (a0) => (_pairingheap_remove_first = Module['_pairingheap_remove_first'] = wasmExports['pairingheap_remove_first'])(a0);\nvar _get_typlenbyvalalign = Module['_get_typlenbyvalalign'] = (a0, a1, a2, a3) => (_get_typlenbyvalalign = Module['_get_typlenbyvalalign'] = wasmExports['get_typlenbyvalalign'])(a0, a1, a2, a3);\nvar _deconstruct_array = Module['_deconstruct_array'] = (a0, a1, a2, a3, a4, a5, a6, a7) => (_deconstruct_array = Module['_deconstruct_array'] = wasmExports['deconstruct_array'])(a0, a1, a2, a3, a4, a5, a6, a7);\nvar _pairingheap_allocate = Module['_pairingheap_allocate'] = (a0, a1) => (_pairingheap_allocate = Module['_pairingheap_allocate'] = wasmExports['pairingheap_allocate'])(a0, a1);\nvar _pairingheap_first = Module['_pairingheap_first'] = (a0) => (_pairingheap_first = Module['_pairingheap_first'] = wasmExports['pairingheap_first'])(a0);\nvar _pairingheap_add = Module['_pairingheap_add'] = (a0, a1) => (_pairingheap_add = Module['_pairingheap_add'] = wasmExports['pairingheap_add'])(a0, a1);\nvar _convert_tuples_by_position = Module['_convert_tuples_by_position'] = (a0, a1, a2) => (_convert_tuples_by_position = Module['_convert_tuples_by_position'] = wasmExports['convert_tuples_by_position'])(a0, a1, a2);\nvar _detoast_external_attr = Module['_detoast_external_attr'] = (a0) => (_detoast_external_attr = Module['_detoast_external_attr'] = wasmExports['detoast_external_attr'])(a0);\nvar _LaunchParallelWorkers = Module['_LaunchParallelWorkers'] = (a0) => (_LaunchParallelWorkers = Module['_LaunchParallelWorkers'] = wasmExports['LaunchParallelWorkers'])(a0);\nvar _TupleDescInitEntry = Module['_TupleDescInitEntry'] = (a0, a1, a2, a3, a4, a5) => (_TupleDescInitEntry = Module['_TupleDescInitEntry'] = wasmExports['TupleDescInitEntry'])(a0, a1, a2, a3, a4, a5);\nvar _TupleDescInitEntryCollation = Module['_TupleDescInitEntryCollation'] = (a0, a1, a2) => (_TupleDescInitEntryCollation = Module['_TupleDescInitEntryCollation'] = wasmExports['TupleDescInitEntryCollation'])(a0, a1, a2);\nvar _pg_prng_uint32 = Module['_pg_prng_uint32'] = (a0) => (_pg_prng_uint32 = Module['_pg_prng_uint32'] = wasmExports['pg_prng_uint32'])(a0);\nvar _DirectFunctionCall1Coll = Module['_DirectFunctionCall1Coll'] = (a0, a1, a2) => (_DirectFunctionCall1Coll = Module['_DirectFunctionCall1Coll'] = wasmExports['DirectFunctionCall1Coll'])(a0, a1, a2);\nvar _get_attstatsslot = Module['_get_attstatsslot'] = (a0, a1, a2, a3, a4) => (_get_attstatsslot = Module['_get_attstatsslot'] = wasmExports['get_attstatsslot'])(a0, a1, a2, a3, a4);\nvar _free_attstatsslot = Module['_free_attstatsslot'] = (a0) => (_free_attstatsslot = Module['_free_attstatsslot'] = wasmExports['free_attstatsslot'])(a0);\nvar _LWLockAcquire = Module['_LWLockAcquire'] = (a0, a1) => (_LWLockAcquire = Module['_LWLockAcquire'] = wasmExports['LWLockAcquire'])(a0, a1);\nvar _LWLockRelease = Module['_LWLockRelease'] = (a0) => (_LWLockRelease = Module['_LWLockRelease'] = wasmExports['LWLockRelease'])(a0);\nvar _LWLockInitialize = Module['_LWLockInitialize'] = (a0, a1) => (_LWLockInitialize = Module['_LWLockInitialize'] = wasmExports['LWLockInitialize'])(a0, a1);\nvar _SPI_connect = Module['_SPI_connect'] = () => (_SPI_connect = Module['_SPI_connect'] = wasmExports['SPI_connect'])();\nvar _SPI_connect_ext = Module['_SPI_connect_ext'] = (a0) => (_SPI_connect_ext = Module['_SPI_connect_ext'] = wasmExports['SPI_connect_ext'])(a0);\nvar _SPI_finish = Module['_SPI_finish'] = () => (_SPI_finish = Module['_SPI_finish'] = wasmExports['SPI_finish'])();\nvar _SPI_commit = Module['_SPI_commit'] = () => (_SPI_commit = Module['_SPI_commit'] = wasmExports['SPI_commit'])();\nvar _CopyErrorData = Module['_CopyErrorData'] = () => (_CopyErrorData = Module['_CopyErrorData'] = wasmExports['CopyErrorData'])();\nvar _ReThrowError = Module['_ReThrowError'] = (a0) => (_ReThrowError = Module['_ReThrowError'] = wasmExports['ReThrowError'])(a0);\nvar _SPI_commit_and_chain = Module['_SPI_commit_and_chain'] = () => (_SPI_commit_and_chain = Module['_SPI_commit_and_chain'] = wasmExports['SPI_commit_and_chain'])();\nvar _SPI_rollback = Module['_SPI_rollback'] = () => (_SPI_rollback = Module['_SPI_rollback'] = wasmExports['SPI_rollback'])();\nvar _SPI_rollback_and_chain = Module['_SPI_rollback_and_chain'] = () => (_SPI_rollback_and_chain = Module['_SPI_rollback_and_chain'] = wasmExports['SPI_rollback_and_chain'])();\nvar _SPI_execute = Module['_SPI_execute'] = (a0, a1, a2) => (_SPI_execute = Module['_SPI_execute'] = wasmExports['SPI_execute'])(a0, a1, a2);\nvar _SPI_freetuptable = Module['_SPI_freetuptable'] = (a0) => (_SPI_freetuptable = Module['_SPI_freetuptable'] = wasmExports['SPI_freetuptable'])(a0);\nvar _ReleaseCachedPlan = Module['_ReleaseCachedPlan'] = (a0, a1) => (_ReleaseCachedPlan = Module['_ReleaseCachedPlan'] = wasmExports['ReleaseCachedPlan'])(a0, a1);\nvar _SPI_exec = Module['_SPI_exec'] = (a0, a1) => (_SPI_exec = Module['_SPI_exec'] = wasmExports['SPI_exec'])(a0, a1);\nvar _SPI_execute_extended = Module['_SPI_execute_extended'] = (a0, a1) => (_SPI_execute_extended = Module['_SPI_execute_extended'] = wasmExports['SPI_execute_extended'])(a0, a1);\nvar _SPI_execp = Module['_SPI_execp'] = (a0, a1, a2, a3) => (_SPI_execp = Module['_SPI_execp'] = wasmExports['SPI_execp'])(a0, a1, a2, a3);\nvar _SPI_execute_plan_extended = Module['_SPI_execute_plan_extended'] = (a0, a1) => (_SPI_execute_plan_extended = Module['_SPI_execute_plan_extended'] = wasmExports['SPI_execute_plan_extended'])(a0, a1);\nvar _SPI_execute_plan_with_paramlist = Module['_SPI_execute_plan_with_paramlist'] = (a0, a1, a2, a3) => (_SPI_execute_plan_with_paramlist = Module['_SPI_execute_plan_with_paramlist'] = wasmExports['SPI_execute_plan_with_paramlist'])(a0, a1, a2, a3);\nvar _SPI_prepare = Module['_SPI_prepare'] = (a0, a1, a2) => (_SPI_prepare = Module['_SPI_prepare'] = wasmExports['SPI_prepare'])(a0, a1, a2);\nvar _SPI_prepare_extended = Module['_SPI_prepare_extended'] = (a0, a1) => (_SPI_prepare_extended = Module['_SPI_prepare_extended'] = wasmExports['SPI_prepare_extended'])(a0, a1);\nvar _SPI_keepplan = Module['_SPI_keepplan'] = (a0) => (_SPI_keepplan = Module['_SPI_keepplan'] = wasmExports['SPI_keepplan'])(a0);\nvar _SPI_freeplan = Module['_SPI_freeplan'] = (a0) => (_SPI_freeplan = Module['_SPI_freeplan'] = wasmExports['SPI_freeplan'])(a0);\nvar _SPI_copytuple = Module['_SPI_copytuple'] = (a0) => (_SPI_copytuple = Module['_SPI_copytuple'] = wasmExports['SPI_copytuple'])(a0);\nvar _SPI_returntuple = Module['_SPI_returntuple'] = (a0, a1) => (_SPI_returntuple = Module['_SPI_returntuple'] = wasmExports['SPI_returntuple'])(a0, a1);\nvar _heap_deform_tuple = Module['_heap_deform_tuple'] = (a0, a1, a2, a3) => (_heap_deform_tuple = Module['_heap_deform_tuple'] = wasmExports['heap_deform_tuple'])(a0, a1, a2, a3);\nvar _SPI_fnumber = Module['_SPI_fnumber'] = (a0, a1) => (_SPI_fnumber = Module['_SPI_fnumber'] = wasmExports['SPI_fnumber'])(a0, a1);\nvar _SPI_fname = Module['_SPI_fname'] = (a0, a1) => (_SPI_fname = Module['_SPI_fname'] = wasmExports['SPI_fname'])(a0, a1);\nvar _SPI_getvalue = Module['_SPI_getvalue'] = (a0, a1, a2) => (_SPI_getvalue = Module['_SPI_getvalue'] = wasmExports['SPI_getvalue'])(a0, a1, a2);\nvar _SPI_getbinval = Module['_SPI_getbinval'] = (a0, a1, a2, a3) => (_SPI_getbinval = Module['_SPI_getbinval'] = wasmExports['SPI_getbinval'])(a0, a1, a2, a3);\nvar _SPI_gettype = Module['_SPI_gettype'] = (a0, a1) => (_SPI_gettype = Module['_SPI_gettype'] = wasmExports['SPI_gettype'])(a0, a1);\nvar _SPI_gettypeid = Module['_SPI_gettypeid'] = (a0, a1) => (_SPI_gettypeid = Module['_SPI_gettypeid'] = wasmExports['SPI_gettypeid'])(a0, a1);\nvar _SPI_getrelname = Module['_SPI_getrelname'] = (a0) => (_SPI_getrelname = Module['_SPI_getrelname'] = wasmExports['SPI_getrelname'])(a0);\nvar _SPI_palloc = Module['_SPI_palloc'] = (a0) => (_SPI_palloc = Module['_SPI_palloc'] = wasmExports['SPI_palloc'])(a0);\nvar _SPI_datumTransfer = Module['_SPI_datumTransfer'] = (a0, a1, a2) => (_SPI_datumTransfer = Module['_SPI_datumTransfer'] = wasmExports['SPI_datumTransfer'])(a0, a1, a2);\nvar _datumTransfer = Module['_datumTransfer'] = (a0, a1, a2) => (_datumTransfer = Module['_datumTransfer'] = wasmExports['datumTransfer'])(a0, a1, a2);\nvar _MemoryContextStrdup = Module['_MemoryContextStrdup'] = (a0, a1) => (_MemoryContextStrdup = Module['_MemoryContextStrdup'] = wasmExports['MemoryContextStrdup'])(a0, a1);\nvar _SPI_cursor_open_with_paramlist = Module['_SPI_cursor_open_with_paramlist'] = (a0, a1, a2, a3) => (_SPI_cursor_open_with_paramlist = Module['_SPI_cursor_open_with_paramlist'] = wasmExports['SPI_cursor_open_with_paramlist'])(a0, a1, a2, a3);\nvar _SPI_cursor_parse_open = Module['_SPI_cursor_parse_open'] = (a0, a1, a2) => (_SPI_cursor_parse_open = Module['_SPI_cursor_parse_open'] = wasmExports['SPI_cursor_parse_open'])(a0, a1, a2);\nvar _SPI_cursor_find = Module['_SPI_cursor_find'] = (a0) => (_SPI_cursor_find = Module['_SPI_cursor_find'] = wasmExports['SPI_cursor_find'])(a0);\nvar _SPI_cursor_fetch = Module['_SPI_cursor_fetch'] = (a0, a1, a2) => (_SPI_cursor_fetch = Module['_SPI_cursor_fetch'] = wasmExports['SPI_cursor_fetch'])(a0, a1, a2);\nvar _SPI_scroll_cursor_fetch = Module['_SPI_scroll_cursor_fetch'] = (a0, a1, a2) => (_SPI_scroll_cursor_fetch = Module['_SPI_scroll_cursor_fetch'] = wasmExports['SPI_scroll_cursor_fetch'])(a0, a1, a2);\nvar _SPI_scroll_cursor_move = Module['_SPI_scroll_cursor_move'] = (a0, a1, a2) => (_SPI_scroll_cursor_move = Module['_SPI_scroll_cursor_move'] = wasmExports['SPI_scroll_cursor_move'])(a0, a1, a2);\nvar _SPI_cursor_close = Module['_SPI_cursor_close'] = (a0) => (_SPI_cursor_close = Module['_SPI_cursor_close'] = wasmExports['SPI_cursor_close'])(a0);\nvar _SPI_result_code_string = Module['_SPI_result_code_string'] = (a0) => (_SPI_result_code_string = Module['_SPI_result_code_string'] = wasmExports['SPI_result_code_string'])(a0);\nvar _SPI_plan_get_plan_sources = Module['_SPI_plan_get_plan_sources'] = (a0) => (_SPI_plan_get_plan_sources = Module['_SPI_plan_get_plan_sources'] = wasmExports['SPI_plan_get_plan_sources'])(a0);\nvar _SPI_plan_get_cached_plan = Module['_SPI_plan_get_cached_plan'] = (a0) => (_SPI_plan_get_cached_plan = Module['_SPI_plan_get_cached_plan'] = wasmExports['SPI_plan_get_cached_plan'])(a0);\nvar _SPI_register_trigger_data = Module['_SPI_register_trigger_data'] = (a0) => (_SPI_register_trigger_data = Module['_SPI_register_trigger_data'] = wasmExports['SPI_register_trigger_data'])(a0);\nvar _tuplestore_tuple_count = Module['_tuplestore_tuple_count'] = (a0) => (_tuplestore_tuple_count = Module['_tuplestore_tuple_count'] = wasmExports['tuplestore_tuple_count'])(a0);\nvar _exprLocation = Module['_exprLocation'] = (a0) => (_exprLocation = Module['_exprLocation'] = wasmExports['exprLocation'])(a0);\nvar _tuplestore_puttuple = Module['_tuplestore_puttuple'] = (a0, a1) => (_tuplestore_puttuple = Module['_tuplestore_puttuple'] = wasmExports['tuplestore_puttuple'])(a0, a1);\nvar _pg_class_aclcheck = Module['_pg_class_aclcheck'] = (a0, a1, a2) => (_pg_class_aclcheck = Module['_pg_class_aclcheck'] = wasmExports['pg_class_aclcheck'])(a0, a1, a2);\nvar _RelationGetIndexList = Module['_RelationGetIndexList'] = (a0) => (_RelationGetIndexList = Module['_RelationGetIndexList'] = wasmExports['RelationGetIndexList'])(a0);\nvar _get_partition_ancestors = Module['_get_partition_ancestors'] = (a0) => (_get_partition_ancestors = Module['_get_partition_ancestors'] = wasmExports['get_partition_ancestors'])(a0);\nvar _ExecInitExprWithParams = Module['_ExecInitExprWithParams'] = (a0, a1) => (_ExecInitExprWithParams = Module['_ExecInitExprWithParams'] = wasmExports['ExecInitExprWithParams'])(a0, a1);\nvar _AddWaitEventToSet = Module['_AddWaitEventToSet'] = (a0, a1, a2, a3, a4) => (_AddWaitEventToSet = Module['_AddWaitEventToSet'] = wasmExports['AddWaitEventToSet'])(a0, a1, a2, a3, a4);\nvar _GetNumRegisteredWaitEvents = Module['_GetNumRegisteredWaitEvents'] = (a0) => (_GetNumRegisteredWaitEvents = Module['_GetNumRegisteredWaitEvents'] = wasmExports['GetNumRegisteredWaitEvents'])(a0);\nvar _BuildIndexInfo = Module['_BuildIndexInfo'] = (a0) => (_BuildIndexInfo = Module['_BuildIndexInfo'] = wasmExports['BuildIndexInfo'])(a0);\nvar _ItemPointerEquals = Module['_ItemPointerEquals'] = (a0, a1) => (_ItemPointerEquals = Module['_ItemPointerEquals'] = wasmExports['ItemPointerEquals'])(a0, a1);\nvar _TransactionIdPrecedes = Module['_TransactionIdPrecedes'] = (a0, a1) => (_TransactionIdPrecedes = Module['_TransactionIdPrecedes'] = wasmExports['TransactionIdPrecedes'])(a0, a1);\nvar _bsearch = Module['_bsearch'] = (a0, a1, a2, a3, a4) => (_bsearch = Module['_bsearch'] = wasmExports['bsearch'])(a0, a1, a2, a3, a4);\nvar _pg_detoast_datum_copy = Module['_pg_detoast_datum_copy'] = (a0) => (_pg_detoast_datum_copy = Module['_pg_detoast_datum_copy'] = wasmExports['pg_detoast_datum_copy'])(a0);\nvar _HeapTupleHeaderGetDatum = Module['_HeapTupleHeaderGetDatum'] = (a0) => (_HeapTupleHeaderGetDatum = Module['_HeapTupleHeaderGetDatum'] = wasmExports['HeapTupleHeaderGetDatum'])(a0);\nvar _construct_md_array = Module['_construct_md_array'] = (a0, a1, a2, a3, a4, a5, a6, a7, a8) => (_construct_md_array = Module['_construct_md_array'] = wasmExports['construct_md_array'])(a0, a1, a2, a3, a4, a5, a6, a7, a8);\nvar _ArrayGetNItems = Module['_ArrayGetNItems'] = (a0, a1) => (_ArrayGetNItems = Module['_ArrayGetNItems'] = wasmExports['ArrayGetNItems'])(a0, a1);\nvar _construct_empty_array = Module['_construct_empty_array'] = (a0) => (_construct_empty_array = Module['_construct_empty_array'] = wasmExports['construct_empty_array'])(a0);\nvar _DatumGetEOHP = Module['_DatumGetEOHP'] = (a0) => (_DatumGetEOHP = Module['_DatumGetEOHP'] = wasmExports['DatumGetEOHP'])(a0);\nvar _expanded_record_fetch_tupdesc = Module['_expanded_record_fetch_tupdesc'] = (a0) => (_expanded_record_fetch_tupdesc = Module['_expanded_record_fetch_tupdesc'] = wasmExports['expanded_record_fetch_tupdesc'])(a0);\nvar _expanded_record_fetch_field = Module['_expanded_record_fetch_field'] = (a0, a1, a2) => (_expanded_record_fetch_field = Module['_expanded_record_fetch_field'] = wasmExports['expanded_record_fetch_field'])(a0, a1, a2);\nvar _lookup_type_cache = Module['_lookup_type_cache'] = (a0, a1) => (_lookup_type_cache = Module['_lookup_type_cache'] = wasmExports['lookup_type_cache'])(a0, a1);\nvar _execute_attr_map_tuple = Module['_execute_attr_map_tuple'] = (a0, a1) => (_execute_attr_map_tuple = Module['_execute_attr_map_tuple'] = wasmExports['execute_attr_map_tuple'])(a0, a1);\nvar _cstring_to_text_with_len = Module['_cstring_to_text_with_len'] = (a0, a1) => (_cstring_to_text_with_len = Module['_cstring_to_text_with_len'] = wasmExports['cstring_to_text_with_len'])(a0, a1);\nvar _pg_detoast_datum_packed = Module['_pg_detoast_datum_packed'] = (a0) => (_pg_detoast_datum_packed = Module['_pg_detoast_datum_packed'] = wasmExports['pg_detoast_datum_packed'])(a0);\nvar _lookup_rowtype_tupdesc_domain = Module['_lookup_rowtype_tupdesc_domain'] = (a0, a1, a2) => (_lookup_rowtype_tupdesc_domain = Module['_lookup_rowtype_tupdesc_domain'] = wasmExports['lookup_rowtype_tupdesc_domain'])(a0, a1, a2);\nvar _MemoryContextGetParent = Module['_MemoryContextGetParent'] = (a0) => (_MemoryContextGetParent = Module['_MemoryContextGetParent'] = wasmExports['MemoryContextGetParent'])(a0);\nvar _DeleteExpandedObject = Module['_DeleteExpandedObject'] = (a0) => (_DeleteExpandedObject = Module['_DeleteExpandedObject'] = wasmExports['DeleteExpandedObject'])(a0);\nvar _get_opfamily_member = Module['_get_opfamily_member'] = (a0, a1, a2, a3) => (_get_opfamily_member = Module['_get_opfamily_member'] = wasmExports['get_opfamily_member'])(a0, a1, a2, a3);\nvar _GetCurrentCommandId = Module['_GetCurrentCommandId'] = (a0) => (_GetCurrentCommandId = Module['_GetCurrentCommandId'] = wasmExports['GetCurrentCommandId'])(a0);\nvar _clock_gettime = Module['_clock_gettime'] = (a0, a1) => (_clock_gettime = Module['_clock_gettime'] = wasmExports['clock_gettime'])(a0, a1);\nvar _BufferUsageAccumDiff = Module['_BufferUsageAccumDiff'] = (a0, a1, a2) => (_BufferUsageAccumDiff = Module['_BufferUsageAccumDiff'] = wasmExports['BufferUsageAccumDiff'])(a0, a1, a2);\nvar _WalUsageAccumDiff = Module['_WalUsageAccumDiff'] = (a0, a1, a2) => (_WalUsageAccumDiff = Module['_WalUsageAccumDiff'] = wasmExports['WalUsageAccumDiff'])(a0, a1, a2);\nvar _InstrUpdateTupleCount = Module['_InstrUpdateTupleCount'] = (a0, a1) => (_InstrUpdateTupleCount = Module['_InstrUpdateTupleCount'] = wasmExports['InstrUpdateTupleCount'])(a0, a1);\nvar _ExprEvalPushStep = Module['_ExprEvalPushStep'] = (a0, a1) => (_ExprEvalPushStep = Module['_ExprEvalPushStep'] = wasmExports['ExprEvalPushStep'])(a0, a1);\nvar _get_element_type = Module['_get_element_type'] = (a0) => (_get_element_type = Module['_get_element_type'] = wasmExports['get_element_type'])(a0);\nvar _EOH_get_flat_size = Module['_EOH_get_flat_size'] = (a0) => (_EOH_get_flat_size = Module['_EOH_get_flat_size'] = wasmExports['EOH_get_flat_size'])(a0);\nvar _EOH_flatten_into = Module['_EOH_flatten_into'] = (a0, a1, a2) => (_EOH_flatten_into = Module['_EOH_flatten_into'] = wasmExports['EOH_flatten_into'])(a0, a1, a2);\nvar _ExecStoreHeapTuple = Module['_ExecStoreHeapTuple'] = (a0, a1, a2) => (_ExecStoreHeapTuple = Module['_ExecStoreHeapTuple'] = wasmExports['ExecStoreHeapTuple'])(a0, a1, a2);\nvar _MakeTupleTableSlot = Module['_MakeTupleTableSlot'] = (a0, a1) => (_MakeTupleTableSlot = Module['_MakeTupleTableSlot'] = wasmExports['MakeTupleTableSlot'])(a0, a1);\nvar _ExecFetchSlotHeapTuple = Module['_ExecFetchSlotHeapTuple'] = (a0, a1, a2) => (_ExecFetchSlotHeapTuple = Module['_ExecFetchSlotHeapTuple'] = wasmExports['ExecFetchSlotHeapTuple'])(a0, a1, a2);\nvar _TupleDescGetAttInMetadata = Module['_TupleDescGetAttInMetadata'] = (a0) => (_TupleDescGetAttInMetadata = Module['_TupleDescGetAttInMetadata'] = wasmExports['TupleDescGetAttInMetadata'])(a0);\nvar _BuildTupleFromCStrings = Module['_BuildTupleFromCStrings'] = (a0, a1) => (_BuildTupleFromCStrings = Module['_BuildTupleFromCStrings'] = wasmExports['BuildTupleFromCStrings'])(a0, a1);\nvar _InputFunctionCall = Module['_InputFunctionCall'] = (a0, a1, a2, a3) => (_InputFunctionCall = Module['_InputFunctionCall'] = wasmExports['InputFunctionCall'])(a0, a1, a2, a3);\nvar _standard_ExecutorStart = Module['_standard_ExecutorStart'] = (a0, a1) => (_standard_ExecutorStart = Module['_standard_ExecutorStart'] = wasmExports['standard_ExecutorStart'])(a0, a1);\nvar _get_rel_namespace = Module['_get_rel_namespace'] = (a0) => (_get_rel_namespace = Module['_get_rel_namespace'] = wasmExports['get_rel_namespace'])(a0);\nvar _standard_ExecutorRun = Module['_standard_ExecutorRun'] = (a0, a1, a2, a3) => (_standard_ExecutorRun = Module['_standard_ExecutorRun'] = wasmExports['standard_ExecutorRun'])(a0, a1, a2, a3);\nvar _EnterParallelMode = Module['_EnterParallelMode'] = () => (_EnterParallelMode = Module['_EnterParallelMode'] = wasmExports['EnterParallelMode'])();\nvar _ExitParallelMode = Module['_ExitParallelMode'] = () => (_ExitParallelMode = Module['_ExitParallelMode'] = wasmExports['ExitParallelMode'])();\nvar _standard_ExecutorFinish = Module['_standard_ExecutorFinish'] = (a0) => (_standard_ExecutorFinish = Module['_standard_ExecutorFinish'] = wasmExports['standard_ExecutorFinish'])(a0);\nvar _standard_ExecutorEnd = Module['_standard_ExecutorEnd'] = (a0) => (_standard_ExecutorEnd = Module['_standard_ExecutorEnd'] = wasmExports['standard_ExecutorEnd'])(a0);\nvar _CreateParallelContext = Module['_CreateParallelContext'] = (a0, a1, a2) => (_CreateParallelContext = Module['_CreateParallelContext'] = wasmExports['CreateParallelContext'])(a0, a1, a2);\nvar _InitializeParallelDSM = Module['_InitializeParallelDSM'] = (a0) => (_InitializeParallelDSM = Module['_InitializeParallelDSM'] = wasmExports['InitializeParallelDSM'])(a0);\nvar _WaitForParallelWorkersToFinish = Module['_WaitForParallelWorkersToFinish'] = (a0) => (_WaitForParallelWorkersToFinish = Module['_WaitForParallelWorkersToFinish'] = wasmExports['WaitForParallelWorkersToFinish'])(a0);\nvar _DestroyParallelContext = Module['_DestroyParallelContext'] = (a0) => (_DestroyParallelContext = Module['_DestroyParallelContext'] = wasmExports['DestroyParallelContext'])(a0);\nvar _index_deform_tuple = Module['_index_deform_tuple'] = (a0, a1, a2, a3) => (_index_deform_tuple = Module['_index_deform_tuple'] = wasmExports['index_deform_tuple'])(a0, a1, a2, a3);\nvar _ExecAsyncResponse = Module['_ExecAsyncResponse'] = (a0) => (_ExecAsyncResponse = Module['_ExecAsyncResponse'] = wasmExports['ExecAsyncResponse'])(a0);\nvar _ExecAsyncRequestDone = Module['_ExecAsyncRequestDone'] = (a0, a1) => (_ExecAsyncRequestDone = Module['_ExecAsyncRequestDone'] = wasmExports['ExecAsyncRequestDone'])(a0, a1);\nvar _ExecAsyncRequestPending = Module['_ExecAsyncRequestPending'] = (a0) => (_ExecAsyncRequestPending = Module['_ExecAsyncRequestPending'] = wasmExports['ExecAsyncRequestPending'])(a0);\nvar _format_procedure = Module['_format_procedure'] = (a0) => (_format_procedure = Module['_format_procedure'] = wasmExports['format_procedure'])(a0);\nvar _stat = Module['_stat'] = (a0, a1) => (_stat = Module['_stat'] = wasmExports['stat'])(a0, a1);\nvar _bloom_create = Module['_bloom_create'] = (a0, a1, a2) => (_bloom_create = Module['_bloom_create'] = wasmExports['bloom_create'])(a0, a1, a2);\nvar _bloom_free = Module['_bloom_free'] = (a0) => (_bloom_free = Module['_bloom_free'] = wasmExports['bloom_free'])(a0);\nvar _bloom_add_element = Module['_bloom_add_element'] = (a0, a1, a2) => (_bloom_add_element = Module['_bloom_add_element'] = wasmExports['bloom_add_element'])(a0, a1, a2);\nvar _hash_bytes_extended = Module['_hash_bytes_extended'] = (a0, a1, a2) => (_hash_bytes_extended = Module['_hash_bytes_extended'] = wasmExports['hash_bytes_extended'])(a0, a1, a2);\nvar _bloom_lacks_element = Module['_bloom_lacks_element'] = (a0, a1, a2) => (_bloom_lacks_element = Module['_bloom_lacks_element'] = wasmExports['bloom_lacks_element'])(a0, a1, a2);\nvar _bloom_prop_bits_set = Module['_bloom_prop_bits_set'] = (a0) => (_bloom_prop_bits_set = Module['_bloom_prop_bits_set'] = wasmExports['bloom_prop_bits_set'])(a0);\nvar _pg_popcount = Module['_pg_popcount'] = (a0, a1) => (_pg_popcount = Module['_pg_popcount'] = wasmExports['pg_popcount'])(a0, a1);\nvar _log = Module['_log'] = (a0) => (_log = Module['_log'] = wasmExports['log'])(a0);\nvar _bms_make_singleton = Module['_bms_make_singleton'] = (a0) => (_bms_make_singleton = Module['_bms_make_singleton'] = wasmExports['bms_make_singleton'])(a0);\nvar _pairingheap_free = Module['_pairingheap_free'] = (a0) => (_pairingheap_free = Module['_pairingheap_free'] = wasmExports['pairingheap_free'])(a0);\nvar _estimate_expression_value = Module['_estimate_expression_value'] = (a0, a1) => (_estimate_expression_value = Module['_estimate_expression_value'] = wasmExports['estimate_expression_value'])(a0, a1);\nvar _clamp_row_est = Module['_clamp_row_est'] = (a0) => (_clamp_row_est = Module['_clamp_row_est'] = wasmExports['clamp_row_est'])(a0);\nvar _hash_bytes = Module['_hash_bytes'] = (a0, a1) => (_hash_bytes = Module['_hash_bytes'] = wasmExports['hash_bytes'])(a0, a1);\nvar _MarkBufferDirty = Module['_MarkBufferDirty'] = (a0) => (_MarkBufferDirty = Module['_MarkBufferDirty'] = wasmExports['MarkBufferDirty'])(a0);\nvar _UnlockReleaseBuffer = Module['_UnlockReleaseBuffer'] = (a0) => (_UnlockReleaseBuffer = Module['_UnlockReleaseBuffer'] = wasmExports['UnlockReleaseBuffer'])(a0);\nvar _PageAddItemExtended = Module['_PageAddItemExtended'] = (a0, a1, a2, a3, a4) => (_PageAddItemExtended = Module['_PageAddItemExtended'] = wasmExports['PageAddItemExtended'])(a0, a1, a2, a3, a4);\nvar _BufferGetBlockNumber = Module['_BufferGetBlockNumber'] = (a0) => (_BufferGetBlockNumber = Module['_BufferGetBlockNumber'] = wasmExports['BufferGetBlockNumber'])(a0);\nvar _PageIndexMultiDelete = Module['_PageIndexMultiDelete'] = (a0, a1, a2) => (_PageIndexMultiDelete = Module['_PageIndexMultiDelete'] = wasmExports['PageIndexMultiDelete'])(a0, a1, a2);\nvar __hash_ovflblkno_to_bitno = Module['__hash_ovflblkno_to_bitno'] = (a0, a1) => (__hash_ovflblkno_to_bitno = Module['__hash_ovflblkno_to_bitno'] = wasmExports['_hash_ovflblkno_to_bitno'])(a0, a1);\nvar _LockBuffer = Module['_LockBuffer'] = (a0, a1) => (_LockBuffer = Module['_LockBuffer'] = wasmExports['LockBuffer'])(a0, a1);\nvar __hash_relbuf = Module['__hash_relbuf'] = (a0, a1) => (__hash_relbuf = Module['__hash_relbuf'] = wasmExports['_hash_relbuf'])(a0, a1);\nvar __hash_getbuf = Module['__hash_getbuf'] = (a0, a1, a2, a3) => (__hash_getbuf = Module['__hash_getbuf'] = wasmExports['_hash_getbuf'])(a0, a1, a2, a3);\nvar _XLogBeginInsert = Module['_XLogBeginInsert'] = () => (_XLogBeginInsert = Module['_XLogBeginInsert'] = wasmExports['XLogBeginInsert'])();\nvar _XLogRegisterData = Module['_XLogRegisterData'] = (a0, a1) => (_XLogRegisterData = Module['_XLogRegisterData'] = wasmExports['XLogRegisterData'])(a0, a1);\nvar _XLogInsert = Module['_XLogInsert'] = (a0, a1) => (_XLogInsert = Module['_XLogInsert'] = wasmExports['XLogInsert'])(a0, a1);\nvar __hash_getbuf_with_strategy = Module['__hash_getbuf_with_strategy'] = (a0, a1, a2, a3, a4) => (__hash_getbuf_with_strategy = Module['__hash_getbuf_with_strategy'] = wasmExports['_hash_getbuf_with_strategy'])(a0, a1, a2, a3, a4);\nvar _SearchSysCacheList = Module['_SearchSysCacheList'] = (a0, a1, a2, a3, a4) => (_SearchSysCacheList = Module['_SearchSysCacheList'] = wasmExports['SearchSysCacheList'])(a0, a1, a2, a3, a4);\nvar _check_amoptsproc_signature = Module['_check_amoptsproc_signature'] = (a0) => (_check_amoptsproc_signature = Module['_check_amoptsproc_signature'] = wasmExports['check_amoptsproc_signature'])(a0);\nvar _format_operator = Module['_format_operator'] = (a0) => (_format_operator = Module['_format_operator'] = wasmExports['format_operator'])(a0);\nvar _check_amop_signature = Module['_check_amop_signature'] = (a0, a1, a2, a3) => (_check_amop_signature = Module['_check_amop_signature'] = wasmExports['check_amop_signature'])(a0, a1, a2, a3);\nvar _identify_opfamily_groups = Module['_identify_opfamily_groups'] = (a0, a1) => (_identify_opfamily_groups = Module['_identify_opfamily_groups'] = wasmExports['identify_opfamily_groups'])(a0, a1);\nvar _ReleaseCatCacheList = Module['_ReleaseCatCacheList'] = (a0) => (_ReleaseCatCacheList = Module['_ReleaseCatCacheList'] = wasmExports['ReleaseCatCacheList'])(a0);\nvar __hash_get_indextuple_hashkey = Module['__hash_get_indextuple_hashkey'] = (a0) => (__hash_get_indextuple_hashkey = Module['__hash_get_indextuple_hashkey'] = wasmExports['_hash_get_indextuple_hashkey'])(a0);\nvar _PageGetFreeSpace = Module['_PageGetFreeSpace'] = (a0) => (_PageGetFreeSpace = Module['_PageGetFreeSpace'] = wasmExports['PageGetFreeSpace'])(a0);\nvar _ReadBuffer = Module['_ReadBuffer'] = (a0, a1) => (_ReadBuffer = Module['_ReadBuffer'] = wasmExports['ReadBuffer'])(a0, a1);\nvar _ReadBufferExtended = Module['_ReadBufferExtended'] = (a0, a1, a2, a3, a4) => (_ReadBufferExtended = Module['_ReadBufferExtended'] = wasmExports['ReadBufferExtended'])(a0, a1, a2, a3, a4);\nvar _PageInit = Module['_PageInit'] = (a0, a1, a2) => (_PageInit = Module['_PageInit'] = wasmExports['PageInit'])(a0, a1, a2);\nvar _RelationGetNumberOfBlocksInFork = Module['_RelationGetNumberOfBlocksInFork'] = (a0, a1) => (_RelationGetNumberOfBlocksInFork = Module['_RelationGetNumberOfBlocksInFork'] = wasmExports['RelationGetNumberOfBlocksInFork'])(a0, a1);\nvar _ExtendBufferedRel = Module['_ExtendBufferedRel'] = (a0, a1, a2, a3) => (_ExtendBufferedRel = Module['_ExtendBufferedRel'] = wasmExports['ExtendBufferedRel'])(a0, a1, a2, a3);\nvar _index_getprocid = Module['_index_getprocid'] = (a0, a1, a2) => (_index_getprocid = Module['_index_getprocid'] = wasmExports['index_getprocid'])(a0, a1, a2);\nvar _smgropen = Module['_smgropen'] = (a0, a1) => (_smgropen = Module['_smgropen'] = wasmExports['smgropen'])(a0, a1);\nvar _smgrsetowner = Module['_smgrsetowner'] = (a0, a1) => (_smgrsetowner = Module['_smgrsetowner'] = wasmExports['smgrsetowner'])(a0, a1);\nvar _hash_destroy = Module['_hash_destroy'] = (a0) => (_hash_destroy = Module['_hash_destroy'] = wasmExports['hash_destroy'])(a0);\nvar _index_form_tuple = Module['_index_form_tuple'] = (a0, a1, a2) => (_index_form_tuple = Module['_index_form_tuple'] = wasmExports['index_form_tuple'])(a0, a1, a2);\nvar _LockBufferForCleanup = Module['_LockBufferForCleanup'] = (a0) => (_LockBufferForCleanup = Module['_LockBufferForCleanup'] = wasmExports['LockBufferForCleanup'])(a0);\nvar _RelationGetIndexScan = Module['_RelationGetIndexScan'] = (a0, a1, a2) => (_RelationGetIndexScan = Module['_RelationGetIndexScan'] = wasmExports['RelationGetIndexScan'])(a0, a1, a2);\nvar _tbm_add_tuples = Module['_tbm_add_tuples'] = (a0, a1, a2, a3) => (_tbm_add_tuples = Module['_tbm_add_tuples'] = wasmExports['tbm_add_tuples'])(a0, a1, a2, a3);\nvar _vacuum_delay_point = Module['_vacuum_delay_point'] = () => (_vacuum_delay_point = Module['_vacuum_delay_point'] = wasmExports['vacuum_delay_point'])();\nvar _index_getprocinfo = Module['_index_getprocinfo'] = (a0, a1, a2) => (_index_getprocinfo = Module['_index_getprocinfo'] = wasmExports['index_getprocinfo'])(a0, a1, a2);\nvar _build_reloptions = Module['_build_reloptions'] = (a0, a1, a2, a3, a4, a5) => (_build_reloptions = Module['_build_reloptions'] = wasmExports['build_reloptions'])(a0, a1, a2, a3, a4, a5);\nvar _TestForOldSnapshot_impl = Module['_TestForOldSnapshot_impl'] = (a0, a1) => (_TestForOldSnapshot_impl = Module['_TestForOldSnapshot_impl'] = wasmExports['TestForOldSnapshot_impl'])(a0, a1);\nvar _pgstat_assoc_relation = Module['_pgstat_assoc_relation'] = (a0) => (_pgstat_assoc_relation = Module['_pgstat_assoc_relation'] = wasmExports['pgstat_assoc_relation'])(a0);\nvar _visibilitymap_clear = Module['_visibilitymap_clear'] = (a0, a1, a2, a3) => (_visibilitymap_clear = Module['_visibilitymap_clear'] = wasmExports['visibilitymap_clear'])(a0, a1, a2, a3);\nvar _visibilitymap_pin = Module['_visibilitymap_pin'] = (a0, a1, a2) => (_visibilitymap_pin = Module['_visibilitymap_pin'] = wasmExports['visibilitymap_pin'])(a0, a1, a2);\nvar _smgrexists = Module['_smgrexists'] = (a0, a1) => (_smgrexists = Module['_smgrexists'] = wasmExports['smgrexists'])(a0, a1);\nvar _visibilitymap_prepare_truncate = Module['_visibilitymap_prepare_truncate'] = (a0, a1) => (_visibilitymap_prepare_truncate = Module['_visibilitymap_prepare_truncate'] = wasmExports['visibilitymap_prepare_truncate'])(a0, a1);\nvar _log_newpage_buffer = Module['_log_newpage_buffer'] = (a0, a1) => (_log_newpage_buffer = Module['_log_newpage_buffer'] = wasmExports['log_newpage_buffer'])(a0, a1);\nvar _HeapTupleSatisfiesVisibility = Module['_HeapTupleSatisfiesVisibility'] = (a0, a1, a2) => (_HeapTupleSatisfiesVisibility = Module['_HeapTupleSatisfiesVisibility'] = wasmExports['HeapTupleSatisfiesVisibility'])(a0, a1, a2);\nvar _HeapTupleGetUpdateXid = Module['_HeapTupleGetUpdateXid'] = (a0) => (_HeapTupleGetUpdateXid = Module['_HeapTupleGetUpdateXid'] = wasmExports['HeapTupleGetUpdateXid'])(a0);\nvar _HeapTupleSatisfiesVacuum = Module['_HeapTupleSatisfiesVacuum'] = (a0, a1, a2) => (_HeapTupleSatisfiesVacuum = Module['_HeapTupleSatisfiesVacuum'] = wasmExports['HeapTupleSatisfiesVacuum'])(a0, a1, a2);\nvar _GetOldestNonRemovableTransactionId = Module['_GetOldestNonRemovableTransactionId'] = (a0) => (_GetOldestNonRemovableTransactionId = Module['_GetOldestNonRemovableTransactionId'] = wasmExports['GetOldestNonRemovableTransactionId'])(a0);\nvar _PageGetHeapFreeSpace = Module['_PageGetHeapFreeSpace'] = (a0) => (_PageGetHeapFreeSpace = Module['_PageGetHeapFreeSpace'] = wasmExports['PageGetHeapFreeSpace'])(a0);\nvar _vac_estimate_reltuples = Module['_vac_estimate_reltuples'] = (a0, a1, a2, a3) => (_vac_estimate_reltuples = Module['_vac_estimate_reltuples'] = wasmExports['vac_estimate_reltuples'])(a0, a1, a2, a3);\nvar _GetRecordedFreeSpace = Module['_GetRecordedFreeSpace'] = (a0, a1) => (_GetRecordedFreeSpace = Module['_GetRecordedFreeSpace'] = wasmExports['GetRecordedFreeSpace'])(a0, a1);\nvar _heap_tuple_needs_eventual_freeze = Module['_heap_tuple_needs_eventual_freeze'] = (a0) => (_heap_tuple_needs_eventual_freeze = Module['_heap_tuple_needs_eventual_freeze'] = wasmExports['heap_tuple_needs_eventual_freeze'])(a0);\nvar _hash_seq_init = Module['_hash_seq_init'] = (a0, a1) => (_hash_seq_init = Module['_hash_seq_init'] = wasmExports['hash_seq_init'])(a0, a1);\nvar _hash_seq_search = Module['_hash_seq_search'] = (a0) => (_hash_seq_search = Module['_hash_seq_search'] = wasmExports['hash_seq_search'])(a0);\nvar _ftruncate = Module['_ftruncate'] = (a0, a1) => (_ftruncate = Module['_ftruncate'] = wasmExports['ftruncate'])(a0, a1);\nvar _pwrite = Module['_pwrite'] = (a0, a1, a2, a3) => (_pwrite = Module['_pwrite'] = wasmExports['pwrite'])(a0, a1, a2, a3);\nvar _fd_fsync_fname = Module['_fd_fsync_fname'] = (a0, a1) => (_fd_fsync_fname = Module['_fd_fsync_fname'] = wasmExports['fd_fsync_fname'])(a0, a1);\nvar _GetMultiXactIdMembers = Module['_GetMultiXactIdMembers'] = (a0, a1, a2, a3) => (_GetMultiXactIdMembers = Module['_GetMultiXactIdMembers'] = wasmExports['GetMultiXactIdMembers'])(a0, a1, a2, a3);\nvar _GetAccessStrategy = Module['_GetAccessStrategy'] = (a0) => (_GetAccessStrategy = Module['_GetAccessStrategy'] = wasmExports['GetAccessStrategy'])(a0);\nvar _FreeAccessStrategy = Module['_FreeAccessStrategy'] = (a0) => (_FreeAccessStrategy = Module['_FreeAccessStrategy'] = wasmExports['FreeAccessStrategy'])(a0);\nvar _HeapTupleSatisfiesUpdate = Module['_HeapTupleSatisfiesUpdate'] = (a0, a1, a2) => (_HeapTupleSatisfiesUpdate = Module['_HeapTupleSatisfiesUpdate'] = wasmExports['HeapTupleSatisfiesUpdate'])(a0, a1, a2);\nvar _TransactionIdDidCommit = Module['_TransactionIdDidCommit'] = (a0) => (_TransactionIdDidCommit = Module['_TransactionIdDidCommit'] = wasmExports['TransactionIdDidCommit'])(a0);\nvar _TransactionIdIsInProgress = Module['_TransactionIdIsInProgress'] = (a0) => (_TransactionIdIsInProgress = Module['_TransactionIdIsInProgress'] = wasmExports['TransactionIdIsInProgress'])(a0);\nvar _datumIsEqual = Module['_datumIsEqual'] = (a0, a1, a2, a3) => (_datumIsEqual = Module['_datumIsEqual'] = wasmExports['datumIsEqual'])(a0, a1, a2, a3);\nvar _MultiXactIdPrecedes = Module['_MultiXactIdPrecedes'] = (a0, a1) => (_MultiXactIdPrecedes = Module['_MultiXactIdPrecedes'] = wasmExports['MultiXactIdPrecedes'])(a0, a1);\nvar _XLogRecGetBlockTagExtended = Module['_XLogRecGetBlockTagExtended'] = (a0, a1, a2, a3, a4, a5) => (_XLogRecGetBlockTagExtended = Module['_XLogRecGetBlockTagExtended'] = wasmExports['XLogRecGetBlockTagExtended'])(a0, a1, a2, a3, a4, a5);\nvar _ConditionalLockBuffer = Module['_ConditionalLockBuffer'] = (a0) => (_ConditionalLockBuffer = Module['_ConditionalLockBuffer'] = wasmExports['ConditionalLockBuffer'])(a0);\nvar _toast_open_indexes = Module['_toast_open_indexes'] = (a0, a1, a2, a3) => (_toast_open_indexes = Module['_toast_open_indexes'] = wasmExports['toast_open_indexes'])(a0, a1, a2, a3);\nvar _init_toast_snapshot = Module['_init_toast_snapshot'] = (a0) => (_init_toast_snapshot = Module['_init_toast_snapshot'] = wasmExports['init_toast_snapshot'])(a0);\nvar _systable_beginscan_ordered = Module['_systable_beginscan_ordered'] = (a0, a1, a2, a3, a4) => (_systable_beginscan_ordered = Module['_systable_beginscan_ordered'] = wasmExports['systable_beginscan_ordered'])(a0, a1, a2, a3, a4);\nvar _systable_getnext_ordered = Module['_systable_getnext_ordered'] = (a0, a1) => (_systable_getnext_ordered = Module['_systable_getnext_ordered'] = wasmExports['systable_getnext_ordered'])(a0, a1);\nvar _systable_endscan_ordered = Module['_systable_endscan_ordered'] = (a0) => (_systable_endscan_ordered = Module['_systable_endscan_ordered'] = wasmExports['systable_endscan_ordered'])(a0);\nvar _toast_close_indexes = Module['_toast_close_indexes'] = (a0, a1, a2) => (_toast_close_indexes = Module['_toast_close_indexes'] = wasmExports['toast_close_indexes'])(a0, a1, a2);\nvar _GenerationContextCreate = Module['_GenerationContextCreate'] = (a0, a1, a2, a3, a4) => (_GenerationContextCreate = Module['_GenerationContextCreate'] = wasmExports['GenerationContextCreate'])(a0, a1, a2, a3, a4);\nvar _LockRelationForExtension = Module['_LockRelationForExtension'] = (a0, a1) => (_LockRelationForExtension = Module['_LockRelationForExtension'] = wasmExports['LockRelationForExtension'])(a0, a1);\nvar _UnlockRelationForExtension = Module['_UnlockRelationForExtension'] = (a0, a1) => (_UnlockRelationForExtension = Module['_UnlockRelationForExtension'] = wasmExports['UnlockRelationForExtension'])(a0, a1);\nvar _RecordFreeIndexPage = Module['_RecordFreeIndexPage'] = (a0, a1) => (_RecordFreeIndexPage = Module['_RecordFreeIndexPage'] = wasmExports['RecordFreeIndexPage'])(a0, a1);\nvar _IndexFreeSpaceMapVacuum = Module['_IndexFreeSpaceMapVacuum'] = (a0) => (_IndexFreeSpaceMapVacuum = Module['_IndexFreeSpaceMapVacuum'] = wasmExports['IndexFreeSpaceMapVacuum'])(a0);\nvar _gistcheckpage = Module['_gistcheckpage'] = (a0, a1) => (_gistcheckpage = Module['_gistcheckpage'] = wasmExports['gistcheckpage'])(a0, a1);\nvar _nocache_index_getattr = Module['_nocache_index_getattr'] = (a0, a1, a2) => (_nocache_index_getattr = Module['_nocache_index_getattr'] = wasmExports['nocache_index_getattr'])(a0, a1, a2);\nvar _GetFreeIndexPage = Module['_GetFreeIndexPage'] = (a0) => (_GetFreeIndexPage = Module['_GetFreeIndexPage'] = wasmExports['GetFreeIndexPage'])(a0);\nvar _check_amproc_signature = Module['_check_amproc_signature'] = (a0, a1, a2, a3, a4, a5) => (_check_amproc_signature = Module['_check_amproc_signature'] = wasmExports['check_amproc_signature'])(a0, a1, a2, a3, a4, a5);\nvar _DirectFunctionCall2Coll = Module['_DirectFunctionCall2Coll'] = (a0, a1, a2, a3) => (_DirectFunctionCall2Coll = Module['_DirectFunctionCall2Coll'] = wasmExports['DirectFunctionCall2Coll'])(a0, a1, a2, a3);\nvar _float_overflow_error = Module['_float_overflow_error'] = () => (_float_overflow_error = Module['_float_overflow_error'] = wasmExports['float_overflow_error'])();\nvar _float_underflow_error = Module['_float_underflow_error'] = () => (_float_underflow_error = Module['_float_underflow_error'] = wasmExports['float_underflow_error'])();\nvar _DirectFunctionCall5Coll = Module['_DirectFunctionCall5Coll'] = (a0, a1, a2, a3, a4, a5, a6) => (_DirectFunctionCall5Coll = Module['_DirectFunctionCall5Coll'] = wasmExports['DirectFunctionCall5Coll'])(a0, a1, a2, a3, a4, a5, a6);\nvar _Float8GetDatum = Module['_Float8GetDatum'] = (a0) => (_Float8GetDatum = Module['_Float8GetDatum'] = wasmExports['Float8GetDatum'])(a0);\nvar _fmgr_info_copy = Module['_fmgr_info_copy'] = (a0, a1, a2) => (_fmgr_info_copy = Module['_fmgr_info_copy'] = wasmExports['fmgr_info_copy'])(a0, a1, a2);\nvar _PageIndexTupleOverwrite = Module['_PageIndexTupleOverwrite'] = (a0, a1, a2, a3) => (_PageIndexTupleOverwrite = Module['_PageIndexTupleOverwrite'] = wasmExports['PageIndexTupleOverwrite'])(a0, a1, a2, a3);\nvar _log_newpage_range = Module['_log_newpage_range'] = (a0, a1, a2, a3, a4) => (_log_newpage_range = Module['_log_newpage_range'] = wasmExports['log_newpage_range'])(a0, a1, a2, a3, a4);\nvar _pow = Module['_pow'] = (a0, a1) => (_pow = Module['_pow'] = wasmExports['pow'])(a0, a1);\nvar _CreateTupleDescCopyConstr = Module['_CreateTupleDescCopyConstr'] = (a0) => (_CreateTupleDescCopyConstr = Module['_CreateTupleDescCopyConstr'] = wasmExports['CreateTupleDescCopyConstr'])(a0);\nvar _PageGetExactFreeSpace = Module['_PageGetExactFreeSpace'] = (a0) => (_PageGetExactFreeSpace = Module['_PageGetExactFreeSpace'] = wasmExports['PageGetExactFreeSpace'])(a0);\nvar _brin_build_desc = Module['_brin_build_desc'] = (a0) => (_brin_build_desc = Module['_brin_build_desc'] = wasmExports['brin_build_desc'])(a0);\nvar _brin_deform_tuple = Module['_brin_deform_tuple'] = (a0, a1, a2) => (_brin_deform_tuple = Module['_brin_deform_tuple'] = wasmExports['brin_deform_tuple'])(a0, a1, a2);\nvar _IndexGetRelation = Module['_IndexGetRelation'] = (a0, a1) => (_IndexGetRelation = Module['_IndexGetRelation'] = wasmExports['IndexGetRelation'])(a0, a1);\nvar _FunctionCall4Coll = Module['_FunctionCall4Coll'] = (a0, a1, a2, a3, a4, a5) => (_FunctionCall4Coll = Module['_FunctionCall4Coll'] = wasmExports['FunctionCall4Coll'])(a0, a1, a2, a3, a4, a5);\nvar _brin_free_desc = Module['_brin_free_desc'] = (a0) => (_brin_free_desc = Module['_brin_free_desc'] = wasmExports['brin_free_desc'])(a0);\nvar _GetUserIdAndSecContext = Module['_GetUserIdAndSecContext'] = (a0, a1) => (_GetUserIdAndSecContext = Module['_GetUserIdAndSecContext'] = wasmExports['GetUserIdAndSecContext'])(a0, a1);\nvar _SetUserIdAndSecContext = Module['_SetUserIdAndSecContext'] = (a0, a1) => (_SetUserIdAndSecContext = Module['_SetUserIdAndSecContext'] = wasmExports['SetUserIdAndSecContext'])(a0, a1);\nvar _NewGUCNestLevel = Module['_NewGUCNestLevel'] = () => (_NewGUCNestLevel = Module['_NewGUCNestLevel'] = wasmExports['NewGUCNestLevel'])();\nvar _AtEOXact_GUC = Module['_AtEOXact_GUC'] = (a0, a1) => (_AtEOXact_GUC = Module['_AtEOXact_GUC'] = wasmExports['AtEOXact_GUC'])(a0, a1);\nvar _get_fn_opclass_options = Module['_get_fn_opclass_options'] = (a0) => (_get_fn_opclass_options = Module['_get_fn_opclass_options'] = wasmExports['get_fn_opclass_options'])(a0);\nvar _init_local_reloptions = Module['_init_local_reloptions'] = (a0, a1) => (_init_local_reloptions = Module['_init_local_reloptions'] = wasmExports['init_local_reloptions'])(a0, a1);\nvar _numeric_sub = Module['_numeric_sub'] = (a0) => (_numeric_sub = Module['_numeric_sub'] = wasmExports['numeric_sub'])(a0);\nvar _qsort_arg = Module['_qsort_arg'] = (a0, a1, a2, a3, a4) => (_qsort_arg = Module['_qsort_arg'] = wasmExports['qsort_arg'])(a0, a1, a2, a3, a4);\nvar _add_local_int_reloption = Module['_add_local_int_reloption'] = (a0, a1, a2, a3, a4, a5, a6) => (_add_local_int_reloption = Module['_add_local_int_reloption'] = wasmExports['add_local_int_reloption'])(a0, a1, a2, a3, a4, a5, a6);\nvar _OutputFunctionCall = Module['_OutputFunctionCall'] = (a0, a1) => (_OutputFunctionCall = Module['_OutputFunctionCall'] = wasmExports['OutputFunctionCall'])(a0, a1);\nvar _accumArrayResult = Module['_accumArrayResult'] = (a0, a1, a2, a3, a4) => (_accumArrayResult = Module['_accumArrayResult'] = wasmExports['accumArrayResult'])(a0, a1, a2, a3, a4);\nvar _makeArrayResult = Module['_makeArrayResult'] = (a0, a1) => (_makeArrayResult = Module['_makeArrayResult'] = wasmExports['makeArrayResult'])(a0, a1);\nvar _hash_get_num_entries = Module['_hash_get_num_entries'] = (a0) => (_hash_get_num_entries = Module['_hash_get_num_entries'] = wasmExports['hash_get_num_entries'])(a0);\nvar _RestoreBlockImage = Module['_RestoreBlockImage'] = (a0, a1, a2) => (_RestoreBlockImage = Module['_RestoreBlockImage'] = wasmExports['RestoreBlockImage'])(a0, a1, a2);\nvar _wal_segment_open = Module['_wal_segment_open'] = (a0, a1, a2) => (_wal_segment_open = Module['_wal_segment_open'] = wasmExports['wal_segment_open'])(a0, a1, a2);\nvar _wal_segment_close = Module['_wal_segment_close'] = (a0) => (_wal_segment_close = Module['_wal_segment_close'] = wasmExports['wal_segment_close'])(a0);\nvar _close = Module['_close'] = (a0) => (_close = Module['_close'] = wasmExports['close'])(a0);\nvar _GetFlushRecPtr = Module['_GetFlushRecPtr'] = (a0) => (_GetFlushRecPtr = Module['_GetFlushRecPtr'] = wasmExports['GetFlushRecPtr'])(a0);\nvar _GetXLogReplayRecPtr = Module['_GetXLogReplayRecPtr'] = (a0) => (_GetXLogReplayRecPtr = Module['_GetXLogReplayRecPtr'] = wasmExports['GetXLogReplayRecPtr'])(a0);\nvar _pg_usleep = Module['_pg_usleep'] = (a0) => (_pg_usleep = Module['_pg_usleep'] = wasmExports['pg_usleep'])(a0);\nvar _read_local_xlog_page_no_wait = Module['_read_local_xlog_page_no_wait'] = (a0, a1, a2, a3, a4) => (_read_local_xlog_page_no_wait = Module['_read_local_xlog_page_no_wait'] = wasmExports['read_local_xlog_page_no_wait'])(a0, a1, a2, a3, a4);\nvar _dsm_create = Module['_dsm_create'] = (a0, a1) => (_dsm_create = Module['_dsm_create'] = wasmExports['dsm_create'])(a0, a1);\nvar _dsm_segment_address = Module['_dsm_segment_address'] = (a0) => (_dsm_segment_address = Module['_dsm_segment_address'] = wasmExports['dsm_segment_address'])(a0);\nvar _WaitForBackgroundWorkerShutdown = Module['_WaitForBackgroundWorkerShutdown'] = (a0) => (_WaitForBackgroundWorkerShutdown = Module['_WaitForBackgroundWorkerShutdown'] = wasmExports['WaitForBackgroundWorkerShutdown'])(a0);\nvar _dsm_segment_handle = Module['_dsm_segment_handle'] = (a0) => (_dsm_segment_handle = Module['_dsm_segment_handle'] = wasmExports['dsm_segment_handle'])(a0);\nvar _RegisterDynamicBackgroundWorker = Module['_RegisterDynamicBackgroundWorker'] = (a0, a1) => (_RegisterDynamicBackgroundWorker = Module['_RegisterDynamicBackgroundWorker'] = wasmExports['RegisterDynamicBackgroundWorker'])(a0, a1);\nvar _WaitForParallelWorkersToAttach = Module['_WaitForParallelWorkersToAttach'] = (a0) => (_WaitForParallelWorkersToAttach = Module['_WaitForParallelWorkersToAttach'] = wasmExports['WaitForParallelWorkersToAttach'])(a0);\nvar _dsm_detach = Module['_dsm_detach'] = (a0) => (_dsm_detach = Module['_dsm_detach'] = wasmExports['dsm_detach'])(a0);\nvar _BackgroundWorkerUnblockSignals = Module['_BackgroundWorkerUnblockSignals'] = () => (_BackgroundWorkerUnblockSignals = Module['_BackgroundWorkerUnblockSignals'] = wasmExports['BackgroundWorkerUnblockSignals'])();\nvar _dsm_attach = Module['_dsm_attach'] = (a0) => (_dsm_attach = Module['_dsm_attach'] = wasmExports['dsm_attach'])(a0);\nvar _BackgroundWorkerInitializeConnectionByOid = Module['_BackgroundWorkerInitializeConnectionByOid'] = (a0, a1, a2) => (_BackgroundWorkerInitializeConnectionByOid = Module['_BackgroundWorkerInitializeConnectionByOid'] = wasmExports['BackgroundWorkerInitializeConnectionByOid'])(a0, a1, a2);\nvar _GenericXLogStart = Module['_GenericXLogStart'] = (a0) => (_GenericXLogStart = Module['_GenericXLogStart'] = wasmExports['GenericXLogStart'])(a0);\nvar _GenericXLogRegisterBuffer = Module['_GenericXLogRegisterBuffer'] = (a0, a1, a2) => (_GenericXLogRegisterBuffer = Module['_GenericXLogRegisterBuffer'] = wasmExports['GenericXLogRegisterBuffer'])(a0, a1, a2);\nvar _GenericXLogFinish = Module['_GenericXLogFinish'] = (a0) => (_GenericXLogFinish = Module['_GenericXLogFinish'] = wasmExports['GenericXLogFinish'])(a0);\nvar _GenericXLogAbort = Module['_GenericXLogAbort'] = (a0) => (_GenericXLogAbort = Module['_GenericXLogAbort'] = wasmExports['GenericXLogAbort'])(a0);\nvar _ShmemInitStruct = Module['_ShmemInitStruct'] = (a0, a1, a2) => (_ShmemInitStruct = Module['_ShmemInitStruct'] = wasmExports['ShmemInitStruct'])(a0, a1, a2);\nvar _init_MultiFuncCall = Module['_init_MultiFuncCall'] = (a0) => (_init_MultiFuncCall = Module['_init_MultiFuncCall'] = wasmExports['init_MultiFuncCall'])(a0);\nvar _per_MultiFuncCall = Module['_per_MultiFuncCall'] = (a0) => (_per_MultiFuncCall = Module['_per_MultiFuncCall'] = wasmExports['per_MultiFuncCall'])(a0);\nvar _end_MultiFuncCall = Module['_end_MultiFuncCall'] = (a0, a1) => (_end_MultiFuncCall = Module['_end_MultiFuncCall'] = wasmExports['end_MultiFuncCall'])(a0, a1);\nvar _read = Module['_read'] = (a0, a1, a2) => (_read = Module['_read'] = wasmExports['read'])(a0, a1, a2);\nvar _superuser_arg = Module['_superuser_arg'] = (a0) => (_superuser_arg = Module['_superuser_arg'] = wasmExports['superuser_arg'])(a0);\nvar _XLogReaderAllocate = Module['_XLogReaderAllocate'] = (a0, a1, a2, a3) => (_XLogReaderAllocate = Module['_XLogReaderAllocate'] = wasmExports['XLogReaderAllocate'])(a0, a1, a2, a3);\nvar _XLogReadRecord = Module['_XLogReadRecord'] = (a0, a1) => (_XLogReadRecord = Module['_XLogReadRecord'] = wasmExports['XLogReadRecord'])(a0, a1);\nvar _XLogReaderFree = Module['_XLogReaderFree'] = (a0) => (_XLogReaderFree = Module['_XLogReaderFree'] = wasmExports['XLogReaderFree'])(a0);\nvar _write = Module['_write'] = (a0, a1, a2) => (_write = Module['_write'] = wasmExports['write'])(a0, a1, a2);\nvar _ReadMultiXactIdRange = Module['_ReadMultiXactIdRange'] = (a0, a1) => (_ReadMultiXactIdRange = Module['_ReadMultiXactIdRange'] = wasmExports['ReadMultiXactIdRange'])(a0, a1);\nvar _MultiXactIdPrecedesOrEquals = Module['_MultiXactIdPrecedesOrEquals'] = (a0, a1) => (_MultiXactIdPrecedesOrEquals = Module['_MultiXactIdPrecedesOrEquals'] = wasmExports['MultiXactIdPrecedesOrEquals'])(a0, a1);\nvar _numeric_in = Module['_numeric_in'] = (a0) => (_numeric_in = Module['_numeric_in'] = wasmExports['numeric_in'])(a0);\nvar _DirectFunctionCall3Coll = Module['_DirectFunctionCall3Coll'] = (a0, a1, a2, a3, a4) => (_DirectFunctionCall3Coll = Module['_DirectFunctionCall3Coll'] = wasmExports['DirectFunctionCall3Coll'])(a0, a1, a2, a3, a4);\nvar _AllocateFile = Module['_AllocateFile'] = (a0, a1) => (_AllocateFile = Module['_AllocateFile'] = wasmExports['AllocateFile'])(a0, a1);\nvar _FreeFile = Module['_FreeFile'] = (a0) => (_FreeFile = Module['_FreeFile'] = wasmExports['FreeFile'])(a0);\nvar _InitMaterializedSRF = Module['_InitMaterializedSRF'] = (a0, a1) => (_InitMaterializedSRF = Module['_InitMaterializedSRF'] = wasmExports['InitMaterializedSRF'])(a0, a1);\nvar _XLogRecStoreStats = Module['_XLogRecStoreStats'] = (a0, a1) => (_XLogRecStoreStats = Module['_XLogRecStoreStats'] = wasmExports['XLogRecStoreStats'])(a0, a1);\nvar _XLogFindNextRecord = Module['_XLogFindNextRecord'] = (a0, a1) => (_XLogFindNextRecord = Module['_XLogFindNextRecord'] = wasmExports['XLogFindNextRecord'])(a0, a1);\nvar _fgets = Module['_fgets'] = (a0, a1, a2) => (_fgets = Module['_fgets'] = wasmExports['fgets'])(a0, a1, a2);\nvar _getpid = Module['_getpid'] = () => (_getpid = Module['_getpid'] = wasmExports['getpid'])();\nvar _lseek = Module['_lseek'] = (a0, a1, a2) => (_lseek = Module['_lseek'] = wasmExports['lseek'])(a0, a1, a2);\nvar _strtol = Module['_strtol'] = (a0, a1, a2) => (_strtol = Module['_strtol'] = wasmExports['strtol'])(a0, a1, a2);\nvar _wait_result_to_str = Module['_wait_result_to_str'] = (a0) => (_wait_result_to_str = Module['_wait_result_to_str'] = wasmExports['wait_result_to_str'])(a0);\nvar _replace_percent_placeholders = Module['_replace_percent_placeholders'] = (a0, a1, a2, a3) => (_replace_percent_placeholders = Module['_replace_percent_placeholders'] = wasmExports['replace_percent_placeholders'])(a0, a1, a2, a3);\nvar _RmgrNotFound = Module['_RmgrNotFound'] = (a0) => (_RmgrNotFound = Module['_RmgrNotFound'] = wasmExports['RmgrNotFound'])(a0);\nvar _GetCurrentTransactionNestLevel = Module['_GetCurrentTransactionNestLevel'] = () => (_GetCurrentTransactionNestLevel = Module['_GetCurrentTransactionNestLevel'] = wasmExports['GetCurrentTransactionNestLevel'])();\nvar _ResourceOwnerDelete = Module['_ResourceOwnerDelete'] = (a0) => (_ResourceOwnerDelete = Module['_ResourceOwnerDelete'] = wasmExports['ResourceOwnerDelete'])(a0);\nvar _AtEOSubXact_Files = Module['_AtEOSubXact_Files'] = (a0, a1, a2) => (_AtEOSubXact_Files = Module['_AtEOSubXact_Files'] = wasmExports['AtEOSubXact_Files'])(a0, a1, a2);\nvar _RegisterXactCallback = Module['_RegisterXactCallback'] = (a0, a1) => (_RegisterXactCallback = Module['_RegisterXactCallback'] = wasmExports['RegisterXactCallback'])(a0, a1);\nvar _RegisterSubXactCallback = Module['_RegisterSubXactCallback'] = (a0, a1) => (_RegisterSubXactCallback = Module['_RegisterSubXactCallback'] = wasmExports['RegisterSubXactCallback'])(a0, a1);\nvar _BeginInternalSubTransaction = Module['_BeginInternalSubTransaction'] = (a0) => (_BeginInternalSubTransaction = Module['_BeginInternalSubTransaction'] = wasmExports['BeginInternalSubTransaction'])(a0);\nvar _ReleaseCurrentSubTransaction = Module['_ReleaseCurrentSubTransaction'] = () => (_ReleaseCurrentSubTransaction = Module['_ReleaseCurrentSubTransaction'] = wasmExports['ReleaseCurrentSubTransaction'])();\nvar _RollbackAndReleaseCurrentSubTransaction = Module['_RollbackAndReleaseCurrentSubTransaction'] = () => (_RollbackAndReleaseCurrentSubTransaction = Module['_RollbackAndReleaseCurrentSubTransaction'] = wasmExports['RollbackAndReleaseCurrentSubTransaction'])();\nvar _timestamptz_in = Module['_timestamptz_in'] = (a0) => (_timestamptz_in = Module['_timestamptz_in'] = wasmExports['timestamptz_in'])(a0);\nvar _timestamptz_to_str = Module['_timestamptz_to_str'] = (a0) => (_timestamptz_to_str = Module['_timestamptz_to_str'] = wasmExports['timestamptz_to_str'])(a0);\nvar _fscanf = Module['_fscanf'] = (a0, a1, a2) => (_fscanf = Module['_fscanf'] = wasmExports['fscanf'])(a0, a1, a2);\nvar _ParseDateTime = Module['_ParseDateTime'] = (a0, a1, a2, a3, a4, a5, a6) => (_ParseDateTime = Module['_ParseDateTime'] = wasmExports['ParseDateTime'])(a0, a1, a2, a3, a4, a5, a6);\nvar _DecodeDateTime = Module['_DecodeDateTime'] = (a0, a1, a2, a3, a4, a5, a6, a7) => (_DecodeDateTime = Module['_DecodeDateTime'] = wasmExports['DecodeDateTime'])(a0, a1, a2, a3, a4, a5, a6, a7);\nvar _ReleaseExternalFD = Module['_ReleaseExternalFD'] = () => (_ReleaseExternalFD = Module['_ReleaseExternalFD'] = wasmExports['ReleaseExternalFD'])();\nvar _pg_strong_random = Module['_pg_strong_random'] = (a0, a1) => (_pg_strong_random = Module['_pg_strong_random'] = wasmExports['pg_strong_random'])(a0, a1);\nvar _XLogRecGetBlockRefInfo = Module['_XLogRecGetBlockRefInfo'] = (a0, a1, a2, a3, a4) => (_XLogRecGetBlockRefInfo = Module['_XLogRecGetBlockRefInfo'] = wasmExports['XLogRecGetBlockRefInfo'])(a0, a1, a2, a3, a4);\nvar _strncpy = Module['_strncpy'] = (a0, a1, a2) => (_strncpy = Module['_strncpy'] = wasmExports['strncpy'])(a0, a1, a2);\nvar _heap_modify_tuple_by_cols = Module['_heap_modify_tuple_by_cols'] = (a0, a1, a2, a3, a4, a5) => (_heap_modify_tuple_by_cols = Module['_heap_modify_tuple_by_cols'] = wasmExports['heap_modify_tuple_by_cols'])(a0, a1, a2, a3, a4, a5);\nvar _free_attrmap = Module['_free_attrmap'] = (a0) => (_free_attrmap = Module['_free_attrmap'] = wasmExports['free_attrmap'])(a0);\nvar _add_reloption_kind = Module['_add_reloption_kind'] = () => (_add_reloption_kind = Module['_add_reloption_kind'] = wasmExports['add_reloption_kind'])();\nvar _register_reloptions_validator = Module['_register_reloptions_validator'] = (a0, a1) => (_register_reloptions_validator = Module['_register_reloptions_validator'] = wasmExports['register_reloptions_validator'])(a0, a1);\nvar _add_int_reloption = Module['_add_int_reloption'] = (a0, a1, a2, a3, a4, a5, a6) => (_add_int_reloption = Module['_add_int_reloption'] = wasmExports['add_int_reloption'])(a0, a1, a2, a3, a4, a5, a6);\nvar _untransformRelOptions = Module['_untransformRelOptions'] = (a0) => (_untransformRelOptions = Module['_untransformRelOptions'] = wasmExports['untransformRelOptions'])(a0);\nvar _makeDefElem = Module['_makeDefElem'] = (a0, a1, a2) => (_makeDefElem = Module['_makeDefElem'] = wasmExports['makeDefElem'])(a0, a1, a2);\nvar _parse_int = Module['_parse_int'] = (a0, a1, a2, a3) => (_parse_int = Module['_parse_int'] = wasmExports['parse_int'])(a0, a1, a2, a3);\nvar _parse_real = Module['_parse_real'] = (a0, a1, a2, a3) => (_parse_real = Module['_parse_real'] = wasmExports['parse_real'])(a0, a1, a2, a3);\nvar _typenameTypeIdAndMod = Module['_typenameTypeIdAndMod'] = (a0, a1, a2, a3) => (_typenameTypeIdAndMod = Module['_typenameTypeIdAndMod'] = wasmExports['typenameTypeIdAndMod'])(a0, a1, a2, a3);\nvar _pg_ltoa = Module['_pg_ltoa'] = (a0, a1) => (_pg_ltoa = Module['_pg_ltoa'] = wasmExports['pg_ltoa'])(a0, a1);\nvar _RelationIdGetRelation = Module['_RelationIdGetRelation'] = (a0) => (_RelationIdGetRelation = Module['_RelationIdGetRelation'] = wasmExports['RelationIdGetRelation'])(a0);\nvar _relation_openrv = Module['_relation_openrv'] = (a0, a1) => (_relation_openrv = Module['_relation_openrv'] = wasmExports['relation_openrv'])(a0, a1);\nvar _RelationClose = Module['_RelationClose'] = (a0) => (_RelationClose = Module['_RelationClose'] = wasmExports['RelationClose'])(a0);\nvar _varstr_cmp = Module['_varstr_cmp'] = (a0, a1, a2, a3, a4) => (_varstr_cmp = Module['_varstr_cmp'] = wasmExports['varstr_cmp'])(a0, a1, a2, a3, a4);\nvar _pg_prng_uint64_range = Module['_pg_prng_uint64_range'] = (a0, a1, a2) => (_pg_prng_uint64_range = Module['_pg_prng_uint64_range'] = wasmExports['pg_prng_uint64_range'])(a0, a1, a2);\nvar _ginPostingListDecode = Module['_ginPostingListDecode'] = (a0, a1) => (_ginPostingListDecode = Module['_ginPostingListDecode'] = wasmExports['ginPostingListDecode'])(a0, a1);\nvar _LockPage = Module['_LockPage'] = (a0, a1, a2) => (_LockPage = Module['_LockPage'] = wasmExports['LockPage'])(a0, a1, a2);\nvar _UnlockPage = Module['_UnlockPage'] = (a0, a1, a2) => (_UnlockPage = Module['_UnlockPage'] = wasmExports['UnlockPage'])(a0, a1, a2);\nvar __bt_search = Module['__bt_search'] = (a0, a1, a2, a3, a4, a5) => (__bt_search = Module['__bt_search'] = wasmExports['_bt_search'])(a0, a1, a2, a3, a4, a5);\nvar __bt_compare = Module['__bt_compare'] = (a0, a1, a2, a3) => (__bt_compare = Module['__bt_compare'] = wasmExports['_bt_compare'])(a0, a1, a2, a3);\nvar __bt_relbuf = Module['__bt_relbuf'] = (a0, a1) => (__bt_relbuf = Module['__bt_relbuf'] = wasmExports['_bt_relbuf'])(a0, a1);\nvar __bt_binsrch_insert = Module['__bt_binsrch_insert'] = (a0, a1) => (__bt_binsrch_insert = Module['__bt_binsrch_insert'] = wasmExports['_bt_binsrch_insert'])(a0, a1);\nvar __bt_metaversion = Module['__bt_metaversion'] = (a0, a1, a2) => (__bt_metaversion = Module['__bt_metaversion'] = wasmExports['_bt_metaversion'])(a0, a1, a2);\nvar __bt_freestack = Module['__bt_freestack'] = (a0) => (__bt_freestack = Module['__bt_freestack'] = wasmExports['_bt_freestack'])(a0);\nvar _btboolcmp = Module['_btboolcmp'] = (a0) => (_btboolcmp = Module['_btboolcmp'] = wasmExports['btboolcmp'])(a0);\nvar _btint2cmp = Module['_btint2cmp'] = (a0) => (_btint2cmp = Module['_btint2cmp'] = wasmExports['btint2cmp'])(a0);\nvar _btint4cmp = Module['_btint4cmp'] = (a0) => (_btint4cmp = Module['_btint4cmp'] = wasmExports['btint4cmp'])(a0);\nvar _btint8cmp = Module['_btint8cmp'] = (a0) => (_btint8cmp = Module['_btint8cmp'] = wasmExports['btint8cmp'])(a0);\nvar _btoidcmp = Module['_btoidcmp'] = (a0) => (_btoidcmp = Module['_btoidcmp'] = wasmExports['btoidcmp'])(a0);\nvar _btcharcmp = Module['_btcharcmp'] = (a0) => (_btcharcmp = Module['_btcharcmp'] = wasmExports['btcharcmp'])(a0);\nvar __bt_checkpage = Module['__bt_checkpage'] = (a0, a1) => (__bt_checkpage = Module['__bt_checkpage'] = wasmExports['_bt_checkpage'])(a0, a1);\nvar __bt_mkscankey = Module['__bt_mkscankey'] = (a0, a1) => (__bt_mkscankey = Module['__bt_mkscankey'] = wasmExports['_bt_mkscankey'])(a0, a1);\nvar __bt_form_posting = Module['__bt_form_posting'] = (a0, a1, a2) => (__bt_form_posting = Module['__bt_form_posting'] = wasmExports['_bt_form_posting'])(a0, a1, a2);\nvar __bt_allequalimage = Module['__bt_allequalimage'] = (a0, a1) => (__bt_allequalimage = Module['__bt_allequalimage'] = wasmExports['_bt_allequalimage'])(a0, a1);\nvar _ConditionVariableSignal = Module['_ConditionVariableSignal'] = (a0) => (_ConditionVariableSignal = Module['_ConditionVariableSignal'] = wasmExports['ConditionVariableSignal'])(a0);\nvar _tuplesort_estimate_shared = Module['_tuplesort_estimate_shared'] = (a0) => (_tuplesort_estimate_shared = Module['_tuplesort_estimate_shared'] = wasmExports['tuplesort_estimate_shared'])(a0);\nvar _tuplesort_initialize_shared = Module['_tuplesort_initialize_shared'] = (a0, a1, a2) => (_tuplesort_initialize_shared = Module['_tuplesort_initialize_shared'] = wasmExports['tuplesort_initialize_shared'])(a0, a1, a2);\nvar _tuplesort_attach_shared = Module['_tuplesort_attach_shared'] = (a0, a1) => (_tuplesort_attach_shared = Module['_tuplesort_attach_shared'] = wasmExports['tuplesort_attach_shared'])(a0, a1);\nvar __bt_check_natts = Module['__bt_check_natts'] = (a0, a1, a2, a3) => (__bt_check_natts = Module['__bt_check_natts'] = wasmExports['_bt_check_natts'])(a0, a1, a2, a3);\nvar _smgrread = Module['_smgrread'] = (a0, a1, a2, a3) => (_smgrread = Module['_smgrread'] = wasmExports['smgrread'])(a0, a1, a2, a3);\nvar _smgrtruncate = Module['_smgrtruncate'] = (a0, a1, a2, a3) => (_smgrtruncate = Module['_smgrtruncate'] = wasmExports['smgrtruncate'])(a0, a1, a2, a3);\nvar _ShmemInitHash = Module['_ShmemInitHash'] = (a0, a1, a2, a3, a4) => (_ShmemInitHash = Module['_ShmemInitHash'] = wasmExports['ShmemInitHash'])(a0, a1, a2, a3, a4);\nvar _hash_estimate_size = Module['_hash_estimate_size'] = (a0, a1) => (_hash_estimate_size = Module['_hash_estimate_size'] = wasmExports['hash_estimate_size'])(a0, a1);\nvar _on_shmem_exit = Module['_on_shmem_exit'] = (a0, a1) => (_on_shmem_exit = Module['_on_shmem_exit'] = wasmExports['on_shmem_exit'])(a0, a1);\nvar _LWLockRegisterTranche = Module['_LWLockRegisterTranche'] = (a0, a1) => (_LWLockRegisterTranche = Module['_LWLockRegisterTranche'] = wasmExports['LWLockRegisterTranche'])(a0, a1);\nvar _GetNamedLWLockTranche = Module['_GetNamedLWLockTranche'] = (a0) => (_GetNamedLWLockTranche = Module['_GetNamedLWLockTranche'] = wasmExports['GetNamedLWLockTranche'])(a0);\nvar _LWLockNewTrancheId = Module['_LWLockNewTrancheId'] = () => (_LWLockNewTrancheId = Module['_LWLockNewTrancheId'] = wasmExports['LWLockNewTrancheId'])();\nvar _RequestNamedLWLockTranche = Module['_RequestNamedLWLockTranche'] = (a0, a1) => (_RequestNamedLWLockTranche = Module['_RequestNamedLWLockTranche'] = wasmExports['RequestNamedLWLockTranche'])(a0, a1);\nvar _RequestAddinShmemSpace = Module['_RequestAddinShmemSpace'] = (a0) => (_RequestAddinShmemSpace = Module['_RequestAddinShmemSpace'] = wasmExports['RequestAddinShmemSpace'])(a0);\nvar _BackendXidGetPid = Module['_BackendXidGetPid'] = (a0) => (_BackendXidGetPid = Module['_BackendXidGetPid'] = wasmExports['BackendXidGetPid'])(a0);\nvar _fcntl = Module['_fcntl'] = (a0, a1, a2) => (_fcntl = Module['_fcntl'] = wasmExports['fcntl'])(a0, a1, a2);\nvar _poll = Module['_poll'] = (a0, a1, a2) => (_poll = Module['_poll'] = wasmExports['poll'])(a0, a1, a2);\nvar _WaitLatchOrSocket = Module['_WaitLatchOrSocket'] = (a0, a1, a2, a3, a4) => (_WaitLatchOrSocket = Module['_WaitLatchOrSocket'] = wasmExports['WaitLatchOrSocket'])(a0, a1, a2, a3, a4);\nvar _procsignal_sigusr1_handler = Module['_procsignal_sigusr1_handler'] = (a0) => (_procsignal_sigusr1_handler = Module['_procsignal_sigusr1_handler'] = wasmExports['procsignal_sigusr1_handler'])(a0);\nvar _have_free_buffer = Module['_have_free_buffer'] = () => (_have_free_buffer = Module['_have_free_buffer'] = wasmExports['have_free_buffer'])();\nvar _LockBufHdr = Module['_LockBufHdr'] = (a0) => (_LockBufHdr = Module['_LockBufHdr'] = wasmExports['LockBufHdr'])(a0);\nvar _copy_file = Module['_copy_file'] = (a0, a1) => (_copy_file = Module['_copy_file'] = wasmExports['copy_file'])(a0, a1);\nvar _wasm_OpenPipeStream = Module['_wasm_OpenPipeStream'] = (a0, a1) => (_wasm_OpenPipeStream = Module['_wasm_OpenPipeStream'] = wasmExports['wasm_OpenPipeStream'])(a0, a1);\nvar _fiprintf = Module['_fiprintf'] = (a0, a1, a2) => (_fiprintf = Module['_fiprintf'] = wasmExports['fiprintf'])(a0, a1, a2);\nvar _fsync_fname_ext = Module['_fsync_fname_ext'] = (a0, a1, a2, a3) => (_fsync_fname_ext = Module['_fsync_fname_ext'] = wasmExports['fsync_fname_ext'])(a0, a1, a2, a3);\nvar _rename = Module['_rename'] = (a0, a1) => (_rename = Module['_rename'] = wasmExports['rename'])(a0, a1);\nvar _dup = Module['_dup'] = (a0) => (_dup = Module['_dup'] = wasmExports['dup'])(a0);\nvar _open = Module['_open'] = (a0, a1, a2) => (_open = Module['_open'] = wasmExports['open'])(a0, a1, a2);\nvar _AcquireExternalFD = Module['_AcquireExternalFD'] = () => (_AcquireExternalFD = Module['_AcquireExternalFD'] = wasmExports['AcquireExternalFD'])();\nvar _pclose = Module['_pclose'] = (a0) => (_pclose = Module['_pclose'] = wasmExports['pclose'])(a0);\nvar _ClosePipeStream = Module['_ClosePipeStream'] = (a0) => (_ClosePipeStream = Module['_ClosePipeStream'] = wasmExports['ClosePipeStream'])(a0);\nvar _get_tsearch_config_filename = Module['_get_tsearch_config_filename'] = (a0, a1) => (_get_tsearch_config_filename = Module['_get_tsearch_config_filename'] = wasmExports['get_tsearch_config_filename'])(a0, a1);\nvar _lowerstr = Module['_lowerstr'] = (a0) => (_lowerstr = Module['_lowerstr'] = wasmExports['lowerstr'])(a0);\nvar _readstoplist = Module['_readstoplist'] = (a0, a1, a2) => (_readstoplist = Module['_readstoplist'] = wasmExports['readstoplist'])(a0, a1, a2);\nvar _lowerstr_with_len = Module['_lowerstr_with_len'] = (a0, a1) => (_lowerstr_with_len = Module['_lowerstr_with_len'] = wasmExports['lowerstr_with_len'])(a0, a1);\nvar _searchstoplist = Module['_searchstoplist'] = (a0, a1) => (_searchstoplist = Module['_searchstoplist'] = wasmExports['searchstoplist'])(a0, a1);\nvar _tsearch_readline_begin = Module['_tsearch_readline_begin'] = (a0, a1) => (_tsearch_readline_begin = Module['_tsearch_readline_begin'] = wasmExports['tsearch_readline_begin'])(a0, a1);\nvar _tsearch_readline = Module['_tsearch_readline'] = (a0) => (_tsearch_readline = Module['_tsearch_readline'] = wasmExports['tsearch_readline'])(a0);\nvar _pg_mblen = Module['_pg_mblen'] = (a0) => (_pg_mblen = Module['_pg_mblen'] = wasmExports['pg_mblen'])(a0);\nvar _t_isspace = Module['_t_isspace'] = (a0) => (_t_isspace = Module['_t_isspace'] = wasmExports['t_isspace'])(a0);\nvar _tsearch_readline_end = Module['_tsearch_readline_end'] = (a0) => (_tsearch_readline_end = Module['_tsearch_readline_end'] = wasmExports['tsearch_readline_end'])(a0);\nvar _pg_mb2wchar_with_len = Module['_pg_mb2wchar_with_len'] = (a0, a1, a2) => (_pg_mb2wchar_with_len = Module['_pg_mb2wchar_with_len'] = wasmExports['pg_mb2wchar_with_len'])(a0, a1, a2);\nvar _t_isdigit = Module['_t_isdigit'] = (a0) => (_t_isdigit = Module['_t_isdigit'] = wasmExports['t_isdigit'])(a0);\nvar _strcat = Module['_strcat'] = (a0, a1) => (_strcat = Module['_strcat'] = wasmExports['strcat'])(a0, a1);\nvar _lookup_ts_dictionary_cache = Module['_lookup_ts_dictionary_cache'] = (a0) => (_lookup_ts_dictionary_cache = Module['_lookup_ts_dictionary_cache'] = wasmExports['lookup_ts_dictionary_cache'])(a0);\nvar _construct_array_builtin = Module['_construct_array_builtin'] = (a0, a1, a2) => (_construct_array_builtin = Module['_construct_array_builtin'] = wasmExports['construct_array_builtin'])(a0, a1, a2);\nvar _t_isalnum = Module['_t_isalnum'] = (a0) => (_t_isalnum = Module['_t_isalnum'] = wasmExports['t_isalnum'])(a0);\nvar _pg_any_to_server = Module['_pg_any_to_server'] = (a0, a1, a2) => (_pg_any_to_server = Module['_pg_any_to_server'] = wasmExports['pg_any_to_server'])(a0, a1, a2);\nvar _pg_database_encoding_max_length = Module['_pg_database_encoding_max_length'] = () => (_pg_database_encoding_max_length = Module['_pg_database_encoding_max_length'] = wasmExports['pg_database_encoding_max_length'])();\nvar _isxdigit = Module['_isxdigit'] = (a0) => (_isxdigit = Module['_isxdigit'] = wasmExports['isxdigit'])(a0);\nvar _pg_strtoint32 = Module['_pg_strtoint32'] = (a0) => (_pg_strtoint32 = Module['_pg_strtoint32'] = wasmExports['pg_strtoint32'])(a0);\nvar _textToQualifiedNameList = Module['_textToQualifiedNameList'] = (a0) => (_textToQualifiedNameList = Module['_textToQualifiedNameList'] = wasmExports['textToQualifiedNameList'])(a0);\nvar _DirectFunctionCall4Coll = Module['_DirectFunctionCall4Coll'] = (a0, a1, a2, a3, a4, a5) => (_DirectFunctionCall4Coll = Module['_DirectFunctionCall4Coll'] = wasmExports['DirectFunctionCall4Coll'])(a0, a1, a2, a3, a4, a5);\nvar _get_restriction_variable = Module['_get_restriction_variable'] = (a0, a1, a2, a3, a4, a5) => (_get_restriction_variable = Module['_get_restriction_variable'] = wasmExports['get_restriction_variable'])(a0, a1, a2, a3, a4, a5);\nvar _GetForeignDataWrapper = Module['_GetForeignDataWrapper'] = (a0) => (_GetForeignDataWrapper = Module['_GetForeignDataWrapper'] = wasmExports['GetForeignDataWrapper'])(a0);\nvar _GetSysCacheOid = Module['_GetSysCacheOid'] = (a0, a1, a2, a3, a4, a5) => (_GetSysCacheOid = Module['_GetSysCacheOid'] = wasmExports['GetSysCacheOid'])(a0, a1, a2, a3, a4, a5);\nvar _GetForeignServer = Module['_GetForeignServer'] = (a0) => (_GetForeignServer = Module['_GetForeignServer'] = wasmExports['GetForeignServer'])(a0);\nvar _GetForeignServerExtended = Module['_GetForeignServerExtended'] = (a0, a1) => (_GetForeignServerExtended = Module['_GetForeignServerExtended'] = wasmExports['GetForeignServerExtended'])(a0, a1);\nvar _GetForeignServerByName = Module['_GetForeignServerByName'] = (a0, a1) => (_GetForeignServerByName = Module['_GetForeignServerByName'] = wasmExports['GetForeignServerByName'])(a0, a1);\nvar _GetUserMapping = Module['_GetUserMapping'] = (a0, a1) => (_GetUserMapping = Module['_GetUserMapping'] = wasmExports['GetUserMapping'])(a0, a1);\nvar _GetUserNameFromId = Module['_GetUserNameFromId'] = (a0, a1) => (_GetUserNameFromId = Module['_GetUserNameFromId'] = wasmExports['GetUserNameFromId'])(a0, a1);\nvar _GetForeignTable = Module['_GetForeignTable'] = (a0) => (_GetForeignTable = Module['_GetForeignTable'] = wasmExports['GetForeignTable'])(a0);\nvar _GetForeignColumnOptions = Module['_GetForeignColumnOptions'] = (a0, a1) => (_GetForeignColumnOptions = Module['_GetForeignColumnOptions'] = wasmExports['GetForeignColumnOptions'])(a0, a1);\nvar _initClosestMatch = Module['_initClosestMatch'] = (a0, a1, a2) => (_initClosestMatch = Module['_initClosestMatch'] = wasmExports['initClosestMatch'])(a0, a1, a2);\nvar _updateClosestMatch = Module['_updateClosestMatch'] = (a0, a1) => (_updateClosestMatch = Module['_updateClosestMatch'] = wasmExports['updateClosestMatch'])(a0, a1);\nvar _getClosestMatch = Module['_getClosestMatch'] = (a0) => (_getClosestMatch = Module['_getClosestMatch'] = wasmExports['getClosestMatch'])(a0);\nvar _GetExistingLocalJoinPath = Module['_GetExistingLocalJoinPath'] = (a0) => (_GetExistingLocalJoinPath = Module['_GetExistingLocalJoinPath'] = wasmExports['GetExistingLocalJoinPath'])(a0);\nvar _find_base_rel = Module['_find_base_rel'] = (a0, a1) => (_find_base_rel = Module['_find_base_rel'] = wasmExports['find_base_rel'])(a0, a1);\nvar _bms_equal = Module['_bms_equal'] = (a0, a1) => (_bms_equal = Module['_bms_equal'] = wasmExports['bms_equal'])(a0, a1);\nvar _list_copy = Module['_list_copy'] = (a0) => (_list_copy = Module['_list_copy'] = wasmExports['list_copy'])(a0);\nvar _list_make3_impl = Module['_list_make3_impl'] = (a0, a1, a2, a3) => (_list_make3_impl = Module['_list_make3_impl'] = wasmExports['list_make3_impl'])(a0, a1, a2, a3);\nvar _parser_errposition = Module['_parser_errposition'] = (a0, a1) => (_parser_errposition = Module['_parser_errposition'] = wasmExports['parser_errposition'])(a0, a1);\nvar _get_fn_expr_argtype = Module['_get_fn_expr_argtype'] = (a0, a1) => (_get_fn_expr_argtype = Module['_get_fn_expr_argtype'] = wasmExports['get_fn_expr_argtype'])(a0, a1);\nvar _fwrite = Module['_fwrite'] = (a0, a1, a2, a3) => (_fwrite = Module['_fwrite'] = wasmExports['fwrite'])(a0, a1, a2, a3);\nvar _fputc = Module['_fputc'] = (a0, a1) => (_fputc = Module['_fputc'] = wasmExports['fputc'])(a0, a1);\nvar _MemoryContextAllocHuge = Module['_MemoryContextAllocHuge'] = (a0, a1) => (_MemoryContextAllocHuge = Module['_MemoryContextAllocHuge'] = wasmExports['MemoryContextAllocHuge'])(a0, a1);\nvar _hash_seq_term = Module['_hash_seq_term'] = (a0) => (_hash_seq_term = Module['_hash_seq_term'] = wasmExports['hash_seq_term'])(a0);\nvar _PinPortal = Module['_PinPortal'] = (a0) => (_PinPortal = Module['_PinPortal'] = wasmExports['PinPortal'])(a0);\nvar _UnpinPortal = Module['_UnpinPortal'] = (a0) => (_UnpinPortal = Module['_UnpinPortal'] = wasmExports['UnpinPortal'])(a0);\nvar _strnlen = Module['_strnlen'] = (a0, a1) => (_strnlen = Module['_strnlen'] = wasmExports['strnlen'])(a0, a1);\nvar _pchomp = Module['_pchomp'] = (a0) => (_pchomp = Module['_pchomp'] = wasmExports['pchomp'])(a0);\nvar _dlsym = Module['_dlsym'] = (a0, a1) => (_dlsym = Module['_dlsym'] = wasmExports['dlsym'])(a0, a1);\nvar _dlopen = Module['_dlopen'] = (a0, a1) => (_dlopen = Module['_dlopen'] = wasmExports['dlopen'])(a0, a1);\nvar _dlerror = Module['_dlerror'] = () => (_dlerror = Module['_dlerror'] = wasmExports['dlerror'])();\nvar _dlclose = Module['_dlclose'] = (a0) => (_dlclose = Module['_dlclose'] = wasmExports['dlclose'])(a0);\nvar _find_rendezvous_variable = Module['_find_rendezvous_variable'] = (a0) => (_find_rendezvous_variable = Module['_find_rendezvous_variable'] = wasmExports['find_rendezvous_variable'])(a0);\nvar _canonicalize_path = Module['_canonicalize_path'] = (a0) => (_canonicalize_path = Module['_canonicalize_path'] = wasmExports['canonicalize_path'])(a0);\nvar _CallerFInfoFunctionCall2 = Module['_CallerFInfoFunctionCall2'] = (a0, a1, a2, a3, a4) => (_CallerFInfoFunctionCall2 = Module['_CallerFInfoFunctionCall2'] = wasmExports['CallerFInfoFunctionCall2'])(a0, a1, a2, a3, a4);\nvar _FunctionCall0Coll = Module['_FunctionCall0Coll'] = (a0, a1) => (_FunctionCall0Coll = Module['_FunctionCall0Coll'] = wasmExports['FunctionCall0Coll'])(a0, a1);\nvar _get_fn_expr_rettype = Module['_get_fn_expr_rettype'] = (a0) => (_get_fn_expr_rettype = Module['_get_fn_expr_rettype'] = wasmExports['get_fn_expr_rettype'])(a0);\nvar _get_base_element_type = Module['_get_base_element_type'] = (a0) => (_get_base_element_type = Module['_get_base_element_type'] = wasmExports['get_base_element_type'])(a0);\nvar _has_fn_opclass_options = Module['_has_fn_opclass_options'] = (a0) => (_has_fn_opclass_options = Module['_has_fn_opclass_options'] = wasmExports['has_fn_opclass_options'])(a0);\nvar _CheckFunctionValidatorAccess = Module['_CheckFunctionValidatorAccess'] = (a0, a1) => (_CheckFunctionValidatorAccess = Module['_CheckFunctionValidatorAccess'] = wasmExports['CheckFunctionValidatorAccess'])(a0, a1);\nvar _resolve_polymorphic_argtypes = Module['_resolve_polymorphic_argtypes'] = (a0, a1, a2, a3) => (_resolve_polymorphic_argtypes = Module['_resolve_polymorphic_argtypes'] = wasmExports['resolve_polymorphic_argtypes'])(a0, a1, a2, a3);\nvar _get_func_arg_info = Module['_get_func_arg_info'] = (a0, a1, a2, a3) => (_get_func_arg_info = Module['_get_func_arg_info'] = wasmExports['get_func_arg_info'])(a0, a1, a2, a3);\nvar _makeRangeVarFromNameList = Module['_makeRangeVarFromNameList'] = (a0) => (_makeRangeVarFromNameList = Module['_makeRangeVarFromNameList'] = wasmExports['makeRangeVarFromNameList'])(a0);\nvar _pg_hmac_free = Module['_pg_hmac_free'] = (a0) => (_pg_hmac_free = Module['_pg_hmac_free'] = wasmExports['pg_hmac_free'])(a0);\nvar _ResourceOwnerReleaseAllPlanCacheRefs = Module['_ResourceOwnerReleaseAllPlanCacheRefs'] = (a0) => (_ResourceOwnerReleaseAllPlanCacheRefs = Module['_ResourceOwnerReleaseAllPlanCacheRefs'] = wasmExports['ResourceOwnerReleaseAllPlanCacheRefs'])(a0);\nvar _RegisterResourceReleaseCallback = Module['_RegisterResourceReleaseCallback'] = (a0, a1) => (_RegisterResourceReleaseCallback = Module['_RegisterResourceReleaseCallback'] = wasmExports['RegisterResourceReleaseCallback'])(a0, a1);\nvar _namein = Module['_namein'] = (a0) => (_namein = Module['_namein'] = wasmExports['namein'])(a0);\nvar _tidin = Module['_tidin'] = (a0) => (_tidin = Module['_tidin'] = wasmExports['tidin'])(a0);\nvar _tidout = Module['_tidout'] = (a0) => (_tidout = Module['_tidout'] = wasmExports['tidout'])(a0);\nvar _texteq = Module['_texteq'] = (a0) => (_texteq = Module['_texteq'] = wasmExports['texteq'])(a0);\nvar _btfloat4cmp = Module['_btfloat4cmp'] = (a0) => (_btfloat4cmp = Module['_btfloat4cmp'] = wasmExports['btfloat4cmp'])(a0);\nvar _btfloat8cmp = Module['_btfloat8cmp'] = (a0) => (_btfloat8cmp = Module['_btfloat8cmp'] = wasmExports['btfloat8cmp'])(a0);\nvar _btnamecmp = Module['_btnamecmp'] = (a0) => (_btnamecmp = Module['_btnamecmp'] = wasmExports['btnamecmp'])(a0);\nvar _bttextcmp = Module['_bttextcmp'] = (a0) => (_bttextcmp = Module['_bttextcmp'] = wasmExports['bttextcmp'])(a0);\nvar _cash_cmp = Module['_cash_cmp'] = (a0) => (_cash_cmp = Module['_cash_cmp'] = wasmExports['cash_cmp'])(a0);\nvar _text_lt = Module['_text_lt'] = (a0) => (_text_lt = Module['_text_lt'] = wasmExports['text_lt'])(a0);\nvar _text_le = Module['_text_le'] = (a0) => (_text_le = Module['_text_le'] = wasmExports['text_le'])(a0);\nvar _text_gt = Module['_text_gt'] = (a0) => (_text_gt = Module['_text_gt'] = wasmExports['text_gt'])(a0);\nvar _text_ge = Module['_text_ge'] = (a0) => (_text_ge = Module['_text_ge'] = wasmExports['text_ge'])(a0);\nvar _current_query = Module['_current_query'] = (a0) => (_current_query = Module['_current_query'] = wasmExports['current_query'])(a0);\nvar _macaddr_eq = Module['_macaddr_eq'] = (a0) => (_macaddr_eq = Module['_macaddr_eq'] = wasmExports['macaddr_eq'])(a0);\nvar _macaddr_lt = Module['_macaddr_lt'] = (a0) => (_macaddr_lt = Module['_macaddr_lt'] = wasmExports['macaddr_lt'])(a0);\nvar _macaddr_le = Module['_macaddr_le'] = (a0) => (_macaddr_le = Module['_macaddr_le'] = wasmExports['macaddr_le'])(a0);\nvar _macaddr_gt = Module['_macaddr_gt'] = (a0) => (_macaddr_gt = Module['_macaddr_gt'] = wasmExports['macaddr_gt'])(a0);\nvar _macaddr_ge = Module['_macaddr_ge'] = (a0) => (_macaddr_ge = Module['_macaddr_ge'] = wasmExports['macaddr_ge'])(a0);\nvar _macaddr_cmp = Module['_macaddr_cmp'] = (a0) => (_macaddr_cmp = Module['_macaddr_cmp'] = wasmExports['macaddr_cmp'])(a0);\nvar _inet_in = Module['_inet_in'] = (a0) => (_inet_in = Module['_inet_in'] = wasmExports['inet_in'])(a0);\nvar _network_cmp = Module['_network_cmp'] = (a0) => (_network_cmp = Module['_network_cmp'] = wasmExports['network_cmp'])(a0);\nvar _be_lo_unlink = Module['_be_lo_unlink'] = (a0) => (_be_lo_unlink = Module['_be_lo_unlink'] = wasmExports['be_lo_unlink'])(a0);\nvar _bpchareq = Module['_bpchareq'] = (a0) => (_bpchareq = Module['_bpchareq'] = wasmExports['bpchareq'])(a0);\nvar _bpcharlt = Module['_bpcharlt'] = (a0) => (_bpcharlt = Module['_bpcharlt'] = wasmExports['bpcharlt'])(a0);\nvar _bpcharle = Module['_bpcharle'] = (a0) => (_bpcharle = Module['_bpcharle'] = wasmExports['bpcharle'])(a0);\nvar _bpchargt = Module['_bpchargt'] = (a0) => (_bpchargt = Module['_bpchargt'] = wasmExports['bpchargt'])(a0);\nvar _bpcharge = Module['_bpcharge'] = (a0) => (_bpcharge = Module['_bpcharge'] = wasmExports['bpcharge'])(a0);\nvar _bpcharcmp = Module['_bpcharcmp'] = (a0) => (_bpcharcmp = Module['_bpcharcmp'] = wasmExports['bpcharcmp'])(a0);\nvar _date_eq = Module['_date_eq'] = (a0) => (_date_eq = Module['_date_eq'] = wasmExports['date_eq'])(a0);\nvar _date_lt = Module['_date_lt'] = (a0) => (_date_lt = Module['_date_lt'] = wasmExports['date_lt'])(a0);\nvar _date_le = Module['_date_le'] = (a0) => (_date_le = Module['_date_le'] = wasmExports['date_le'])(a0);\nvar _date_gt = Module['_date_gt'] = (a0) => (_date_gt = Module['_date_gt'] = wasmExports['date_gt'])(a0);\nvar _date_ge = Module['_date_ge'] = (a0) => (_date_ge = Module['_date_ge'] = wasmExports['date_ge'])(a0);\nvar _date_cmp = Module['_date_cmp'] = (a0) => (_date_cmp = Module['_date_cmp'] = wasmExports['date_cmp'])(a0);\nvar _time_lt = Module['_time_lt'] = (a0) => (_time_lt = Module['_time_lt'] = wasmExports['time_lt'])(a0);\nvar _time_le = Module['_time_le'] = (a0) => (_time_le = Module['_time_le'] = wasmExports['time_le'])(a0);\nvar _time_gt = Module['_time_gt'] = (a0) => (_time_gt = Module['_time_gt'] = wasmExports['time_gt'])(a0);\nvar _time_ge = Module['_time_ge'] = (a0) => (_time_ge = Module['_time_ge'] = wasmExports['time_ge'])(a0);\nvar _time_cmp = Module['_time_cmp'] = (a0) => (_time_cmp = Module['_time_cmp'] = wasmExports['time_cmp'])(a0);\nvar _date_mi = Module['_date_mi'] = (a0) => (_date_mi = Module['_date_mi'] = wasmExports['date_mi'])(a0);\nvar _time_eq = Module['_time_eq'] = (a0) => (_time_eq = Module['_time_eq'] = wasmExports['time_eq'])(a0);\nvar _timestamp_eq = Module['_timestamp_eq'] = (a0) => (_timestamp_eq = Module['_timestamp_eq'] = wasmExports['timestamp_eq'])(a0);\nvar _timestamp_lt = Module['_timestamp_lt'] = (a0) => (_timestamp_lt = Module['_timestamp_lt'] = wasmExports['timestamp_lt'])(a0);\nvar _timestamp_le = Module['_timestamp_le'] = (a0) => (_timestamp_le = Module['_timestamp_le'] = wasmExports['timestamp_le'])(a0);\nvar _timestamp_ge = Module['_timestamp_ge'] = (a0) => (_timestamp_ge = Module['_timestamp_ge'] = wasmExports['timestamp_ge'])(a0);\nvar _timestamp_gt = Module['_timestamp_gt'] = (a0) => (_timestamp_gt = Module['_timestamp_gt'] = wasmExports['timestamp_gt'])(a0);\nvar _interval_eq = Module['_interval_eq'] = (a0) => (_interval_eq = Module['_interval_eq'] = wasmExports['interval_eq'])(a0);\nvar _interval_lt = Module['_interval_lt'] = (a0) => (_interval_lt = Module['_interval_lt'] = wasmExports['interval_lt'])(a0);\nvar _interval_le = Module['_interval_le'] = (a0) => (_interval_le = Module['_interval_le'] = wasmExports['interval_le'])(a0);\nvar _interval_ge = Module['_interval_ge'] = (a0) => (_interval_ge = Module['_interval_ge'] = wasmExports['interval_ge'])(a0);\nvar _interval_gt = Module['_interval_gt'] = (a0) => (_interval_gt = Module['_interval_gt'] = wasmExports['interval_gt'])(a0);\nvar _interval_um = Module['_interval_um'] = (a0) => (_interval_um = Module['_interval_um'] = wasmExports['interval_um'])(a0);\nvar _interval_mi = Module['_interval_mi'] = (a0) => (_interval_mi = Module['_interval_mi'] = wasmExports['interval_mi'])(a0);\nvar _timestamp_mi = Module['_timestamp_mi'] = (a0) => (_timestamp_mi = Module['_timestamp_mi'] = wasmExports['timestamp_mi'])(a0);\nvar _quote_ident = Module['_quote_ident'] = (a0) => (_quote_ident = Module['_quote_ident'] = wasmExports['quote_ident'])(a0);\nvar _timestamp_in = Module['_timestamp_in'] = (a0) => (_timestamp_in = Module['_timestamp_in'] = wasmExports['timestamp_in'])(a0);\nvar _timestamp_cmp = Module['_timestamp_cmp'] = (a0) => (_timestamp_cmp = Module['_timestamp_cmp'] = wasmExports['timestamp_cmp'])(a0);\nvar _interval_cmp = Module['_interval_cmp'] = (a0) => (_interval_cmp = Module['_interval_cmp'] = wasmExports['interval_cmp'])(a0);\nvar _timetz_cmp = Module['_timetz_cmp'] = (a0) => (_timetz_cmp = Module['_timetz_cmp'] = wasmExports['timetz_cmp'])(a0);\nvar _bit_in = Module['_bit_in'] = (a0) => (_bit_in = Module['_bit_in'] = wasmExports['bit_in'])(a0);\nvar _varbit_in = Module['_varbit_in'] = (a0) => (_varbit_in = Module['_varbit_in'] = wasmExports['varbit_in'])(a0);\nvar _biteq = Module['_biteq'] = (a0) => (_biteq = Module['_biteq'] = wasmExports['biteq'])(a0);\nvar _bitge = Module['_bitge'] = (a0) => (_bitge = Module['_bitge'] = wasmExports['bitge'])(a0);\nvar _bitgt = Module['_bitgt'] = (a0) => (_bitgt = Module['_bitgt'] = wasmExports['bitgt'])(a0);\nvar _bitle = Module['_bitle'] = (a0) => (_bitle = Module['_bitle'] = wasmExports['bitle'])(a0);\nvar _bitlt = Module['_bitlt'] = (a0) => (_bitlt = Module['_bitlt'] = wasmExports['bitlt'])(a0);\nvar _bitcmp = Module['_bitcmp'] = (a0) => (_bitcmp = Module['_bitcmp'] = wasmExports['bitcmp'])(a0);\nvar _time_mi_time = Module['_time_mi_time'] = (a0) => (_time_mi_time = Module['_time_mi_time'] = wasmExports['time_mi_time'])(a0);\nvar _numeric_eq = Module['_numeric_eq'] = (a0) => (_numeric_eq = Module['_numeric_eq'] = wasmExports['numeric_eq'])(a0);\nvar _numeric_gt = Module['_numeric_gt'] = (a0) => (_numeric_gt = Module['_numeric_gt'] = wasmExports['numeric_gt'])(a0);\nvar _numeric_ge = Module['_numeric_ge'] = (a0) => (_numeric_ge = Module['_numeric_ge'] = wasmExports['numeric_ge'])(a0);\nvar _numeric_lt = Module['_numeric_lt'] = (a0) => (_numeric_lt = Module['_numeric_lt'] = wasmExports['numeric_lt'])(a0);\nvar _numeric_le = Module['_numeric_le'] = (a0) => (_numeric_le = Module['_numeric_le'] = wasmExports['numeric_le'])(a0);\nvar _numeric_div = Module['_numeric_div'] = (a0) => (_numeric_div = Module['_numeric_div'] = wasmExports['numeric_div'])(a0);\nvar _numeric_float4 = Module['_numeric_float4'] = (a0) => (_numeric_float4 = Module['_numeric_float4'] = wasmExports['numeric_float4'])(a0);\nvar _numeric_cmp = Module['_numeric_cmp'] = (a0) => (_numeric_cmp = Module['_numeric_cmp'] = wasmExports['numeric_cmp'])(a0);\nvar _byteaeq = Module['_byteaeq'] = (a0) => (_byteaeq = Module['_byteaeq'] = wasmExports['byteaeq'])(a0);\nvar _bytealt = Module['_bytealt'] = (a0) => (_bytealt = Module['_bytealt'] = wasmExports['bytealt'])(a0);\nvar _byteale = Module['_byteale'] = (a0) => (_byteale = Module['_byteale'] = wasmExports['byteale'])(a0);\nvar _byteagt = Module['_byteagt'] = (a0) => (_byteagt = Module['_byteagt'] = wasmExports['byteagt'])(a0);\nvar _byteage = Module['_byteage'] = (a0) => (_byteage = Module['_byteage'] = wasmExports['byteage'])(a0);\nvar _byteacmp = Module['_byteacmp'] = (a0) => (_byteacmp = Module['_byteacmp'] = wasmExports['byteacmp'])(a0);\nvar _to_hex32 = Module['_to_hex32'] = (a0) => (_to_hex32 = Module['_to_hex32'] = wasmExports['to_hex32'])(a0);\nvar _uuid_in = Module['_uuid_in'] = (a0) => (_uuid_in = Module['_uuid_in'] = wasmExports['uuid_in'])(a0);\nvar _uuid_out = Module['_uuid_out'] = (a0) => (_uuid_out = Module['_uuid_out'] = wasmExports['uuid_out'])(a0);\nvar _uuid_cmp = Module['_uuid_cmp'] = (a0) => (_uuid_cmp = Module['_uuid_cmp'] = wasmExports['uuid_cmp'])(a0);\nvar _pg_lsn_in = Module['_pg_lsn_in'] = (a0) => (_pg_lsn_in = Module['_pg_lsn_in'] = wasmExports['pg_lsn_in'])(a0);\nvar _gen_random_uuid = Module['_gen_random_uuid'] = (a0) => (_gen_random_uuid = Module['_gen_random_uuid'] = wasmExports['gen_random_uuid'])(a0);\nvar _enum_lt = Module['_enum_lt'] = (a0) => (_enum_lt = Module['_enum_lt'] = wasmExports['enum_lt'])(a0);\nvar _enum_gt = Module['_enum_gt'] = (a0) => (_enum_gt = Module['_enum_gt'] = wasmExports['enum_gt'])(a0);\nvar _enum_le = Module['_enum_le'] = (a0) => (_enum_le = Module['_enum_le'] = wasmExports['enum_le'])(a0);\nvar _enum_ge = Module['_enum_ge'] = (a0) => (_enum_ge = Module['_enum_ge'] = wasmExports['enum_ge'])(a0);\nvar _enum_cmp = Module['_enum_cmp'] = (a0) => (_enum_cmp = Module['_enum_cmp'] = wasmExports['enum_cmp'])(a0);\nvar _arraycontsel = Module['_arraycontsel'] = (a0) => (_arraycontsel = Module['_arraycontsel'] = wasmExports['arraycontsel'])(a0);\nvar _arraycontjoinsel = Module['_arraycontjoinsel'] = (a0) => (_arraycontjoinsel = Module['_arraycontjoinsel'] = wasmExports['arraycontjoinsel'])(a0);\nvar _macaddr8_eq = Module['_macaddr8_eq'] = (a0) => (_macaddr8_eq = Module['_macaddr8_eq'] = wasmExports['macaddr8_eq'])(a0);\nvar _macaddr8_lt = Module['_macaddr8_lt'] = (a0) => (_macaddr8_lt = Module['_macaddr8_lt'] = wasmExports['macaddr8_lt'])(a0);\nvar _macaddr8_le = Module['_macaddr8_le'] = (a0) => (_macaddr8_le = Module['_macaddr8_le'] = wasmExports['macaddr8_le'])(a0);\nvar _macaddr8_gt = Module['_macaddr8_gt'] = (a0) => (_macaddr8_gt = Module['_macaddr8_gt'] = wasmExports['macaddr8_gt'])(a0);\nvar _macaddr8_ge = Module['_macaddr8_ge'] = (a0) => (_macaddr8_ge = Module['_macaddr8_ge'] = wasmExports['macaddr8_ge'])(a0);\nvar _macaddr8_cmp = Module['_macaddr8_cmp'] = (a0) => (_macaddr8_cmp = Module['_macaddr8_cmp'] = wasmExports['macaddr8_cmp'])(a0);\nvar _local2local = Module['_local2local'] = (a0, a1, a2, a3, a4, a5, a6) => (_local2local = Module['_local2local'] = wasmExports['local2local'])(a0, a1, a2, a3, a4, a5, a6);\nvar _report_invalid_encoding = Module['_report_invalid_encoding'] = (a0, a1, a2) => (_report_invalid_encoding = Module['_report_invalid_encoding'] = wasmExports['report_invalid_encoding'])(a0, a1, a2);\nvar _report_untranslatable_char = Module['_report_untranslatable_char'] = (a0, a1, a2, a3) => (_report_untranslatable_char = Module['_report_untranslatable_char'] = wasmExports['report_untranslatable_char'])(a0, a1, a2, a3);\nvar _latin2mic = Module['_latin2mic'] = (a0, a1, a2, a3, a4, a5) => (_latin2mic = Module['_latin2mic'] = wasmExports['latin2mic'])(a0, a1, a2, a3, a4, a5);\nvar _mic2latin = Module['_mic2latin'] = (a0, a1, a2, a3, a4, a5) => (_mic2latin = Module['_mic2latin'] = wasmExports['mic2latin'])(a0, a1, a2, a3, a4, a5);\nvar _latin2mic_with_table = Module['_latin2mic_with_table'] = (a0, a1, a2, a3, a4, a5, a6) => (_latin2mic_with_table = Module['_latin2mic_with_table'] = wasmExports['latin2mic_with_table'])(a0, a1, a2, a3, a4, a5, a6);\nvar _mic2latin_with_table = Module['_mic2latin_with_table'] = (a0, a1, a2, a3, a4, a5, a6) => (_mic2latin_with_table = Module['_mic2latin_with_table'] = wasmExports['mic2latin_with_table'])(a0, a1, a2, a3, a4, a5, a6);\nvar _pg_utf_mblen = Module['_pg_utf_mblen'] = (a0) => (_pg_utf_mblen = Module['_pg_utf_mblen'] = wasmExports['pg_utf_mblen'])(a0);\nvar _pg_encoding_verifymbchar = Module['_pg_encoding_verifymbchar'] = (a0, a1, a2) => (_pg_encoding_verifymbchar = Module['_pg_encoding_verifymbchar'] = wasmExports['pg_encoding_verifymbchar'])(a0, a1, a2);\nvar _GetDatabaseEncodingName = Module['_GetDatabaseEncodingName'] = () => (_GetDatabaseEncodingName = Module['_GetDatabaseEncodingName'] = wasmExports['GetDatabaseEncodingName'])();\nvar _pg_do_encoding_conversion = Module['_pg_do_encoding_conversion'] = (a0, a1, a2, a3) => (_pg_do_encoding_conversion = Module['_pg_do_encoding_conversion'] = wasmExports['pg_do_encoding_conversion'])(a0, a1, a2, a3);\nvar _pg_encoding_to_char_private = Module['_pg_encoding_to_char_private'] = (a0) => (_pg_encoding_to_char_private = Module['_pg_encoding_to_char_private'] = wasmExports['pg_encoding_to_char_private'])(a0);\nvar _pg_char_to_encoding_private = Module['_pg_char_to_encoding_private'] = (a0) => (_pg_char_to_encoding_private = Module['_pg_char_to_encoding_private'] = wasmExports['pg_char_to_encoding_private'])(a0);\nvar _pg_encoding_max_length = Module['_pg_encoding_max_length'] = (a0) => (_pg_encoding_max_length = Module['_pg_encoding_max_length'] = wasmExports['pg_encoding_max_length'])(a0);\nvar _pg_server_to_any = Module['_pg_server_to_any'] = (a0, a1, a2) => (_pg_server_to_any = Module['_pg_server_to_any'] = wasmExports['pg_server_to_any'])(a0, a1, a2);\nvar _pg_wchar2mb_with_len = Module['_pg_wchar2mb_with_len'] = (a0, a1, a2) => (_pg_wchar2mb_with_len = Module['_pg_wchar2mb_with_len'] = wasmExports['pg_wchar2mb_with_len'])(a0, a1, a2);\nvar _pg_encoding_mblen = Module['_pg_encoding_mblen'] = (a0, a1) => (_pg_encoding_mblen = Module['_pg_encoding_mblen'] = wasmExports['pg_encoding_mblen'])(a0, a1);\nvar _check_encoding_conversion_args = Module['_check_encoding_conversion_args'] = (a0, a1, a2, a3, a4) => (_check_encoding_conversion_args = Module['_check_encoding_conversion_args'] = wasmExports['check_encoding_conversion_args'])(a0, a1, a2, a3, a4);\nvar _set_config_option = Module['_set_config_option'] = (a0, a1, a2, a3, a4, a5, a6, a7) => (_set_config_option = Module['_set_config_option'] = wasmExports['set_config_option'])(a0, a1, a2, a3, a4, a5, a6, a7);\nvar _quote_identifier = Module['_quote_identifier'] = (a0) => (_quote_identifier = Module['_quote_identifier'] = wasmExports['quote_identifier'])(a0);\nvar _list_delete = Module['_list_delete'] = (a0, a1) => (_list_delete = Module['_list_delete'] = wasmExports['list_delete'])(a0, a1);\nvar _feof = Module['_feof'] = (a0) => (_feof = Module['_feof'] = wasmExports['feof'])(a0);\nvar _BlockSampler_Init = Module['_BlockSampler_Init'] = (a0, a1, a2, a3) => (_BlockSampler_Init = Module['_BlockSampler_Init'] = wasmExports['BlockSampler_Init'])(a0, a1, a2, a3);\nvar _pg_prng_seed = Module['_pg_prng_seed'] = (a0, a1) => (_pg_prng_seed = Module['_pg_prng_seed'] = wasmExports['pg_prng_seed'])(a0, a1);\nvar _sampler_random_init_state = Module['_sampler_random_init_state'] = (a0, a1) => (_sampler_random_init_state = Module['_sampler_random_init_state'] = wasmExports['sampler_random_init_state'])(a0, a1);\nvar _BlockSampler_HasMore = Module['_BlockSampler_HasMore'] = (a0) => (_BlockSampler_HasMore = Module['_BlockSampler_HasMore'] = wasmExports['BlockSampler_HasMore'])(a0);\nvar _BlockSampler_Next = Module['_BlockSampler_Next'] = (a0) => (_BlockSampler_Next = Module['_BlockSampler_Next'] = wasmExports['BlockSampler_Next'])(a0);\nvar _sampler_random_fract = Module['_sampler_random_fract'] = (a0) => (_sampler_random_fract = Module['_sampler_random_fract'] = wasmExports['sampler_random_fract'])(a0);\nvar _reservoir_init_selection_state = Module['_reservoir_init_selection_state'] = (a0, a1) => (_reservoir_init_selection_state = Module['_reservoir_init_selection_state'] = wasmExports['reservoir_init_selection_state'])(a0, a1);\nvar _reservoir_get_next_S = Module['_reservoir_get_next_S'] = (a0, a1, a2) => (_reservoir_get_next_S = Module['_reservoir_get_next_S'] = wasmExports['reservoir_get_next_S'])(a0, a1, a2);\nvar _GetConfigOption = Module['_GetConfigOption'] = (a0, a1, a2) => (_GetConfigOption = Module['_GetConfigOption'] = wasmExports['GetConfigOption'])(a0, a1, a2);\nvar _ProcessConfigFile = Module['_ProcessConfigFile'] = (a0) => (_ProcessConfigFile = Module['_ProcessConfigFile'] = wasmExports['ProcessConfigFile'])(a0);\nvar _strtod = Module['_strtod'] = (a0, a1) => (_strtod = Module['_strtod'] = wasmExports['strtod'])(a0, a1);\nvar _truncate_identifier = Module['_truncate_identifier'] = (a0, a1, a2) => (_truncate_identifier = Module['_truncate_identifier'] = wasmExports['truncate_identifier'])(a0, a1, a2);\nvar _DefineCustomBoolVariable = Module['_DefineCustomBoolVariable'] = (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) => (_DefineCustomBoolVariable = Module['_DefineCustomBoolVariable'] = wasmExports['DefineCustomBoolVariable'])(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);\nvar _DefineCustomIntVariable = Module['_DefineCustomIntVariable'] = (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) => (_DefineCustomIntVariable = Module['_DefineCustomIntVariable'] = wasmExports['DefineCustomIntVariable'])(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);\nvar _DefineCustomRealVariable = Module['_DefineCustomRealVariable'] = (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) => (_DefineCustomRealVariable = Module['_DefineCustomRealVariable'] = wasmExports['DefineCustomRealVariable'])(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);\nvar _DefineCustomStringVariable = Module['_DefineCustomStringVariable'] = (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) => (_DefineCustomStringVariable = Module['_DefineCustomStringVariable'] = wasmExports['DefineCustomStringVariable'])(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);\nvar _DefineCustomEnumVariable = Module['_DefineCustomEnumVariable'] = (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) => (_DefineCustomEnumVariable = Module['_DefineCustomEnumVariable'] = wasmExports['DefineCustomEnumVariable'])(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);\nvar _MarkGUCPrefixReserved = Module['_MarkGUCPrefixReserved'] = (a0) => (_MarkGUCPrefixReserved = Module['_MarkGUCPrefixReserved'] = wasmExports['MarkGUCPrefixReserved'])(a0);\nvar _strcspn = Module['_strcspn'] = (a0, a1) => (_strcspn = Module['_strcspn'] = wasmExports['strcspn'])(a0, a1);\nvar _CacheRegisterSyscacheCallback = Module['_CacheRegisterSyscacheCallback'] = (a0, a1, a2) => (_CacheRegisterSyscacheCallback = Module['_CacheRegisterSyscacheCallback'] = wasmExports['CacheRegisterSyscacheCallback'])(a0, a1, a2);\nvar _TransferExpandedObject = Module['_TransferExpandedObject'] = (a0, a1) => (_TransferExpandedObject = Module['_TransferExpandedObject'] = wasmExports['TransferExpandedObject'])(a0, a1);\nvar _errsave_start = Module['_errsave_start'] = (a0, a1) => (_errsave_start = Module['_errsave_start'] = wasmExports['errsave_start'])(a0, a1);\nvar _errsave_finish = Module['_errsave_finish'] = (a0, a1, a2, a3) => (_errsave_finish = Module['_errsave_finish'] = wasmExports['errsave_finish'])(a0, a1, a2, a3);\nvar _pq_getmsgtext = Module['_pq_getmsgtext'] = (a0, a1, a2) => (_pq_getmsgtext = Module['_pq_getmsgtext'] = wasmExports['pq_getmsgtext'])(a0, a1, a2);\nvar _pq_begintypsend = Module['_pq_begintypsend'] = (a0) => (_pq_begintypsend = Module['_pq_begintypsend'] = wasmExports['pq_begintypsend'])(a0);\nvar _pq_sendtext = Module['_pq_sendtext'] = (a0, a1, a2) => (_pq_sendtext = Module['_pq_sendtext'] = wasmExports['pq_sendtext'])(a0, a1, a2);\nvar _pq_endtypsend = Module['_pq_endtypsend'] = (a0) => (_pq_endtypsend = Module['_pq_endtypsend'] = wasmExports['pq_endtypsend'])(a0);\nvar _downcase_truncate_identifier = Module['_downcase_truncate_identifier'] = (a0, a1, a2) => (_downcase_truncate_identifier = Module['_downcase_truncate_identifier'] = wasmExports['downcase_truncate_identifier'])(a0, a1, a2);\nvar _int64_to_numeric = Module['_int64_to_numeric'] = (a0) => (_int64_to_numeric = Module['_int64_to_numeric'] = wasmExports['int64_to_numeric'])(a0);\nvar _ArrayGetIntegerTypmods = Module['_ArrayGetIntegerTypmods'] = (a0, a1) => (_ArrayGetIntegerTypmods = Module['_ArrayGetIntegerTypmods'] = wasmExports['ArrayGetIntegerTypmods'])(a0, a1);\nvar _text_to_cstring_buffer = Module['_text_to_cstring_buffer'] = (a0, a1, a2) => (_text_to_cstring_buffer = Module['_text_to_cstring_buffer'] = wasmExports['text_to_cstring_buffer'])(a0, a1, a2);\nvar _array_contains_nulls = Module['_array_contains_nulls'] = (a0) => (_array_contains_nulls = Module['_array_contains_nulls'] = wasmExports['array_contains_nulls'])(a0);\nvar _JsonbValueToJsonb = Module['_JsonbValueToJsonb'] = (a0) => (_JsonbValueToJsonb = Module['_JsonbValueToJsonb'] = wasmExports['JsonbValueToJsonb'])(a0);\nvar _pushJsonbValue = Module['_pushJsonbValue'] = (a0, a1, a2) => (_pushJsonbValue = Module['_pushJsonbValue'] = wasmExports['pushJsonbValue'])(a0, a1, a2);\nvar _float4in_internal = Module['_float4in_internal'] = (a0, a1, a2, a3, a4) => (_float4in_internal = Module['_float4in_internal'] = wasmExports['float4in_internal'])(a0, a1, a2, a3, a4);\nvar _strtof = Module['_strtof'] = (a0, a1) => (_strtof = Module['_strtof'] = wasmExports['strtof'])(a0, a1);\nvar _float_to_shortest_decimal_buf = Module['_float_to_shortest_decimal_buf'] = (a0, a1) => (_float_to_shortest_decimal_buf = Module['_float_to_shortest_decimal_buf'] = wasmExports['float_to_shortest_decimal_buf'])(a0, a1);\nvar _pq_getmsgfloat4 = Module['_pq_getmsgfloat4'] = (a0) => (_pq_getmsgfloat4 = Module['_pq_getmsgfloat4'] = wasmExports['pq_getmsgfloat4'])(a0);\nvar _pq_sendfloat4 = Module['_pq_sendfloat4'] = (a0, a1) => (_pq_sendfloat4 = Module['_pq_sendfloat4'] = wasmExports['pq_sendfloat4'])(a0, a1);\nvar _float8in_internal = Module['_float8in_internal'] = (a0, a1, a2, a3, a4) => (_float8in_internal = Module['_float8in_internal'] = wasmExports['float8in_internal'])(a0, a1, a2, a3, a4);\nvar _float8out_internal = Module['_float8out_internal'] = (a0) => (_float8out_internal = Module['_float8out_internal'] = wasmExports['float8out_internal'])(a0);\nvar _pq_getmsgfloat8 = Module['_pq_getmsgfloat8'] = (a0) => (_pq_getmsgfloat8 = Module['_pq_getmsgfloat8'] = wasmExports['pq_getmsgfloat8'])(a0);\nvar _pq_sendfloat8 = Module['_pq_sendfloat8'] = (a0, a1) => (_pq_sendfloat8 = Module['_pq_sendfloat8'] = wasmExports['pq_sendfloat8'])(a0, a1);\nvar _log10 = Module['_log10'] = (a0) => (_log10 = Module['_log10'] = wasmExports['log10'])(a0);\nvar _acos = Module['_acos'] = (a0) => (_acos = Module['_acos'] = wasmExports['acos'])(a0);\nvar _asin = Module['_asin'] = (a0) => (_asin = Module['_asin'] = wasmExports['asin'])(a0);\nvar _cos = Module['_cos'] = (a0) => (_cos = Module['_cos'] = wasmExports['cos'])(a0);\nvar _sin = Module['_sin'] = (a0) => (_sin = Module['_sin'] = wasmExports['sin'])(a0);\nvar _fmod = Module['_fmod'] = (a0, a1) => (_fmod = Module['_fmod'] = wasmExports['fmod'])(a0, a1);\nvar _pg_prng_seed_check = Module['_pg_prng_seed_check'] = (a0) => (_pg_prng_seed_check = Module['_pg_prng_seed_check'] = wasmExports['pg_prng_seed_check'])(a0);\nvar _construct_array = Module['_construct_array'] = (a0, a1, a2, a3, a4, a5) => (_construct_array = Module['_construct_array'] = wasmExports['construct_array'])(a0, a1, a2, a3, a4, a5);\nvar _quote_literal_cstr = Module['_quote_literal_cstr'] = (a0) => (_quote_literal_cstr = Module['_quote_literal_cstr'] = wasmExports['quote_literal_cstr'])(a0);\nvar _pg_inet_net_ntop = Module['_pg_inet_net_ntop'] = (a0, a1, a2, a3, a4) => (_pg_inet_net_ntop = Module['_pg_inet_net_ntop'] = wasmExports['pg_inet_net_ntop'])(a0, a1, a2, a3, a4);\nvar _convert_network_to_scalar = Module['_convert_network_to_scalar'] = (a0, a1, a2) => (_convert_network_to_scalar = Module['_convert_network_to_scalar'] = wasmExports['convert_network_to_scalar'])(a0, a1, a2);\nvar _pg_getnameinfo_all = Module['_pg_getnameinfo_all'] = (a0, a1, a2, a3, a4, a5, a6) => (_pg_getnameinfo_all = Module['_pg_getnameinfo_all'] = wasmExports['pg_getnameinfo_all'])(a0, a1, a2, a3, a4, a5, a6);\nvar _appendStringInfoSpaces = Module['_appendStringInfoSpaces'] = (a0, a1) => (_appendStringInfoSpaces = Module['_appendStringInfoSpaces'] = wasmExports['appendStringInfoSpaces'])(a0, a1);\nvar _format_type_extended = Module['_format_type_extended'] = (a0, a1, a2) => (_format_type_extended = Module['_format_type_extended'] = wasmExports['format_type_extended'])(a0, a1, a2);\nvar _get_namespace_name_or_temp = Module['_get_namespace_name_or_temp'] = (a0) => (_get_namespace_name_or_temp = Module['_get_namespace_name_or_temp'] = wasmExports['get_namespace_name_or_temp'])(a0);\nvar _quote_qualified_identifier = Module['_quote_qualified_identifier'] = (a0, a1) => (_quote_qualified_identifier = Module['_quote_qualified_identifier'] = wasmExports['quote_qualified_identifier'])(a0, a1);\nvar _make_expanded_record_from_typeid = Module['_make_expanded_record_from_typeid'] = (a0, a1, a2) => (_make_expanded_record_from_typeid = Module['_make_expanded_record_from_typeid'] = wasmExports['make_expanded_record_from_typeid'])(a0, a1, a2);\nvar _make_expanded_record_from_tupdesc = Module['_make_expanded_record_from_tupdesc'] = (a0, a1) => (_make_expanded_record_from_tupdesc = Module['_make_expanded_record_from_tupdesc'] = wasmExports['make_expanded_record_from_tupdesc'])(a0, a1);\nvar _make_expanded_record_from_exprecord = Module['_make_expanded_record_from_exprecord'] = (a0, a1) => (_make_expanded_record_from_exprecord = Module['_make_expanded_record_from_exprecord'] = wasmExports['make_expanded_record_from_exprecord'])(a0, a1);\nvar _expanded_record_set_tuple = Module['_expanded_record_set_tuple'] = (a0, a1, a2, a3) => (_expanded_record_set_tuple = Module['_expanded_record_set_tuple'] = wasmExports['expanded_record_set_tuple'])(a0, a1, a2, a3);\nvar _domain_check = Module['_domain_check'] = (a0, a1, a2, a3, a4) => (_domain_check = Module['_domain_check'] = wasmExports['domain_check'])(a0, a1, a2, a3, a4);\nvar _expanded_record_get_tuple = Module['_expanded_record_get_tuple'] = (a0) => (_expanded_record_get_tuple = Module['_expanded_record_get_tuple'] = wasmExports['expanded_record_get_tuple'])(a0);\nvar _deconstruct_expanded_record = Module['_deconstruct_expanded_record'] = (a0) => (_deconstruct_expanded_record = Module['_deconstruct_expanded_record'] = wasmExports['deconstruct_expanded_record'])(a0);\nvar _expanded_record_lookup_field = Module['_expanded_record_lookup_field'] = (a0, a1, a2) => (_expanded_record_lookup_field = Module['_expanded_record_lookup_field'] = wasmExports['expanded_record_lookup_field'])(a0, a1, a2);\nvar _expanded_record_set_field_internal = Module['_expanded_record_set_field_internal'] = (a0, a1, a2, a3, a4, a5) => (_expanded_record_set_field_internal = Module['_expanded_record_set_field_internal'] = wasmExports['expanded_record_set_field_internal'])(a0, a1, a2, a3, a4, a5);\nvar _expanded_record_set_fields = Module['_expanded_record_set_fields'] = (a0, a1, a2, a3) => (_expanded_record_set_fields = Module['_expanded_record_set_fields'] = wasmExports['expanded_record_set_fields'])(a0, a1, a2, a3);\nvar _err_generic_string = Module['_err_generic_string'] = (a0, a1) => (_err_generic_string = Module['_err_generic_string'] = wasmExports['err_generic_string'])(a0, a1);\nvar _forkname_to_number = Module['_forkname_to_number'] = (a0) => (_forkname_to_number = Module['_forkname_to_number'] = wasmExports['forkname_to_number'])(a0);\nvar _RelidByRelfilenumber = Module['_RelidByRelfilenumber'] = (a0, a1) => (_RelidByRelfilenumber = Module['_RelidByRelfilenumber'] = wasmExports['RelidByRelfilenumber'])(a0, a1);\nvar _pg_xml_init = Module['_pg_xml_init'] = (a0) => (_pg_xml_init = Module['_pg_xml_init'] = wasmExports['pg_xml_init'])(a0);\nvar _xmlInitParser = Module['_xmlInitParser'] = () => (_xmlInitParser = Module['_xmlInitParser'] = wasmExports['xmlInitParser'])();\nvar _xml_ereport = Module['_xml_ereport'] = (a0, a1, a2, a3) => (_xml_ereport = Module['_xml_ereport'] = wasmExports['xml_ereport'])(a0, a1, a2, a3);\nvar _pg_xml_done = Module['_pg_xml_done'] = (a0, a1) => (_pg_xml_done = Module['_pg_xml_done'] = wasmExports['pg_xml_done'])(a0, a1);\nvar _xmlXPathNewContext = Module['_xmlXPathNewContext'] = (a0) => (_xmlXPathNewContext = Module['_xmlXPathNewContext'] = wasmExports['xmlXPathNewContext'])(a0);\nvar _xmlXPathFreeContext = Module['_xmlXPathFreeContext'] = (a0) => (_xmlXPathFreeContext = Module['_xmlXPathFreeContext'] = wasmExports['xmlXPathFreeContext'])(a0);\nvar _xmlFreeDoc = Module['_xmlFreeDoc'] = (a0) => (_xmlFreeDoc = Module['_xmlFreeDoc'] = wasmExports['xmlFreeDoc'])(a0);\nvar _xmlXPathCompile = Module['_xmlXPathCompile'] = (a0) => (_xmlXPathCompile = Module['_xmlXPathCompile'] = wasmExports['xmlXPathCompile'])(a0);\nvar _xmlXPathCompiledEval = Module['_xmlXPathCompiledEval'] = (a0, a1) => (_xmlXPathCompiledEval = Module['_xmlXPathCompiledEval'] = wasmExports['xmlXPathCompiledEval'])(a0, a1);\nvar _xmlXPathFreeCompExpr = Module['_xmlXPathFreeCompExpr'] = (a0) => (_xmlXPathFreeCompExpr = Module['_xmlXPathFreeCompExpr'] = wasmExports['xmlXPathFreeCompExpr'])(a0);\nvar _xmlStrdup = Module['_xmlStrdup'] = (a0) => (_xmlStrdup = Module['_xmlStrdup'] = wasmExports['xmlStrdup'])(a0);\nvar _initArrayResult = Module['_initArrayResult'] = (a0, a1, a2) => (_initArrayResult = Module['_initArrayResult'] = wasmExports['initArrayResult'])(a0, a1, a2);\nvar _xmlXPathCastNodeToString = Module['_xmlXPathCastNodeToString'] = (a0) => (_xmlXPathCastNodeToString = Module['_xmlXPathCastNodeToString'] = wasmExports['xmlXPathCastNodeToString'])(a0);\nvar _str_tolower = Module['_str_tolower'] = (a0, a1, a2) => (_str_tolower = Module['_str_tolower'] = wasmExports['str_tolower'])(a0, a1, a2);\nvar _GetSysCacheHashValue = Module['_GetSysCacheHashValue'] = (a0, a1, a2, a3, a4) => (_GetSysCacheHashValue = Module['_GetSysCacheHashValue'] = wasmExports['GetSysCacheHashValue'])(a0, a1, a2, a3, a4);\nvar ___multi3 = Module['___multi3'] = (a0, a1, a2, a3, a4) => (___multi3 = Module['___multi3'] = wasmExports['__multi3'])(a0, a1, a2, a3, a4);\nvar _expand_array = Module['_expand_array'] = (a0, a1, a2) => (_expand_array = Module['_expand_array'] = wasmExports['expand_array'])(a0, a1, a2);\nvar _generic_restriction_selectivity = Module['_generic_restriction_selectivity'] = (a0, a1, a2, a3, a4, a5) => (_generic_restriction_selectivity = Module['_generic_restriction_selectivity'] = wasmExports['generic_restriction_selectivity'])(a0, a1, a2, a3, a4, a5);\nvar _bms_membership = Module['_bms_membership'] = (a0) => (_bms_membership = Module['_bms_membership'] = wasmExports['bms_membership'])(a0);\nvar _find_join_rel = Module['_find_join_rel'] = (a0, a1) => (_find_join_rel = Module['_find_join_rel'] = wasmExports['find_join_rel'])(a0, a1);\nvar _bms_is_subset = Module['_bms_is_subset'] = (a0, a1) => (_bms_is_subset = Module['_bms_is_subset'] = wasmExports['bms_is_subset'])(a0, a1);\nvar _estimate_num_groups = Module['_estimate_num_groups'] = (a0, a1, a2, a3, a4) => (_estimate_num_groups = Module['_estimate_num_groups'] = wasmExports['estimate_num_groups'])(a0, a1, a2, a3, a4);\nvar _pull_var_clause = Module['_pull_var_clause'] = (a0, a1) => (_pull_var_clause = Module['_pull_var_clause'] = wasmExports['pull_var_clause'])(a0, a1);\nvar _genericcostestimate = Module['_genericcostestimate'] = (a0, a1, a2, a3) => (_genericcostestimate = Module['_genericcostestimate'] = wasmExports['genericcostestimate'])(a0, a1, a2, a3);\nvar _clauselist_selectivity = Module['_clauselist_selectivity'] = (a0, a1, a2, a3, a4) => (_clauselist_selectivity = Module['_clauselist_selectivity'] = wasmExports['clauselist_selectivity'])(a0, a1, a2, a3, a4);\nvar _get_tablespace_page_costs = Module['_get_tablespace_page_costs'] = (a0, a1, a2) => (_get_tablespace_page_costs = Module['_get_tablespace_page_costs'] = wasmExports['get_tablespace_page_costs'])(a0, a1, a2);\nvar _numeric_float8_no_overflow = Module['_numeric_float8_no_overflow'] = (a0) => (_numeric_float8_no_overflow = Module['_numeric_float8_no_overflow'] = wasmExports['numeric_float8_no_overflow'])(a0);\nvar _array_create_iterator = Module['_array_create_iterator'] = (a0, a1, a2) => (_array_create_iterator = Module['_array_create_iterator'] = wasmExports['array_create_iterator'])(a0, a1, a2);\nvar _array_iterate = Module['_array_iterate'] = (a0, a1, a2) => (_array_iterate = Module['_array_iterate'] = wasmExports['array_iterate'])(a0, a1, a2);\nvar _transformExpr = Module['_transformExpr'] = (a0, a1, a2) => (_transformExpr = Module['_transformExpr'] = wasmExports['transformExpr'])(a0, a1, a2);\nvar _numeric_is_nan = Module['_numeric_is_nan'] = (a0) => (_numeric_is_nan = Module['_numeric_is_nan'] = wasmExports['numeric_is_nan'])(a0);\nvar _get_attname = Module['_get_attname'] = (a0, a1, a2) => (_get_attname = Module['_get_attname'] = wasmExports['get_attname'])(a0, a1, a2);\nvar _pg_get_indexdef_columns_extended = Module['_pg_get_indexdef_columns_extended'] = (a0, a1) => (_pg_get_indexdef_columns_extended = Module['_pg_get_indexdef_columns_extended'] = wasmExports['pg_get_indexdef_columns_extended'])(a0, a1);\nvar _RelationIsVisible = Module['_RelationIsVisible'] = (a0) => (_RelationIsVisible = Module['_RelationIsVisible'] = wasmExports['RelationIsVisible'])(a0);\nvar _exprIsLengthCoercion = Module['_exprIsLengthCoercion'] = (a0, a1) => (_exprIsLengthCoercion = Module['_exprIsLengthCoercion'] = wasmExports['exprIsLengthCoercion'])(a0, a1);\nvar _get_sortgroupref_tle = Module['_get_sortgroupref_tle'] = (a0, a1) => (_get_sortgroupref_tle = Module['_get_sortgroupref_tle'] = wasmExports['get_sortgroupref_tle'])(a0, a1);\nvar _strrchr = Module['_strrchr'] = (a0, a1) => (_strrchr = Module['_strrchr'] = wasmExports['strrchr'])(a0, a1);\nvar _get_rel_relispartition = Module['_get_rel_relispartition'] = (a0) => (_get_rel_relispartition = Module['_get_rel_relispartition'] = wasmExports['get_rel_relispartition'])(a0);\nvar _scanner_isspace = Module['_scanner_isspace'] = (a0) => (_scanner_isspace = Module['_scanner_isspace'] = wasmExports['scanner_isspace'])(a0);\nvar _varstr_levenshtein = Module['_varstr_levenshtein'] = (a0, a1, a2, a3, a4, a5, a6, a7) => (_varstr_levenshtein = Module['_varstr_levenshtein'] = wasmExports['varstr_levenshtein'])(a0, a1, a2, a3, a4, a5, a6, a7);\nvar _varstr_levenshtein_less_equal = Module['_varstr_levenshtein_less_equal'] = (a0, a1, a2, a3, a4, a5, a6, a7, a8) => (_varstr_levenshtein_less_equal = Module['_varstr_levenshtein_less_equal'] = wasmExports['varstr_levenshtein_less_equal'])(a0, a1, a2, a3, a4, a5, a6, a7, a8);\nvar _utf8_to_unicode = Module['_utf8_to_unicode'] = (a0) => (_utf8_to_unicode = Module['_utf8_to_unicode'] = wasmExports['utf8_to_unicode'])(a0);\nvar _unpack_sql_state = Module['_unpack_sql_state'] = (a0) => (_unpack_sql_state = Module['_unpack_sql_state'] = wasmExports['unpack_sql_state'])(a0);\nvar _get_role_oid = Module['_get_role_oid'] = (a0, a1) => (_get_role_oid = Module['_get_role_oid'] = wasmExports['get_role_oid'])(a0, a1);\nvar _NameListToString = Module['_NameListToString'] = (a0) => (_NameListToString = Module['_NameListToString'] = wasmExports['NameListToString'])(a0);\nvar _get_collation_oid = Module['_get_collation_oid'] = (a0, a1) => (_get_collation_oid = Module['_get_collation_oid'] = wasmExports['get_collation_oid'])(a0, a1);\nvar _path_is_prefix_of_path = Module['_path_is_prefix_of_path'] = (a0, a1) => (_path_is_prefix_of_path = Module['_path_is_prefix_of_path'] = wasmExports['path_is_prefix_of_path'])(a0, a1);\nvar _path_is_relative_and_below_cwd = Module['_path_is_relative_and_below_cwd'] = (a0) => (_path_is_relative_and_below_cwd = Module['_path_is_relative_and_below_cwd'] = wasmExports['path_is_relative_and_below_cwd'])(a0);\nvar _setenv = Module['_setenv'] = (a0, a1, a2) => (_setenv = Module['_setenv'] = wasmExports['setenv'])(a0, a1, a2);\nvar _pg_get_encoding_from_locale = Module['_pg_get_encoding_from_locale'] = (a0, a1) => (_pg_get_encoding_from_locale = Module['_pg_get_encoding_from_locale'] = wasmExports['pg_get_encoding_from_locale'])(a0, a1);\nvar _localtime = Module['_localtime'] = (a0) => (_localtime = Module['_localtime'] = wasmExports['localtime'])(a0);\nvar _strftime = Module['_strftime'] = (a0, a1, a2, a3) => (_strftime = Module['_strftime'] = wasmExports['strftime'])(a0, a1, a2, a3);\nvar _get_extension_oid = Module['_get_extension_oid'] = (a0, a1) => (_get_extension_oid = Module['_get_extension_oid'] = wasmExports['get_extension_oid'])(a0, a1);\nvar _IsValidJsonNumber = Module['_IsValidJsonNumber'] = (a0, a1) => (_IsValidJsonNumber = Module['_IsValidJsonNumber'] = wasmExports['IsValidJsonNumber'])(a0, a1);\nvar _strlcat = Module['_strlcat'] = (a0, a1, a2) => (_strlcat = Module['_strlcat'] = wasmExports['strlcat'])(a0, a1, a2);\nvar _pg_bindtextdomain = Module['_pg_bindtextdomain'] = (a0) => (_pg_bindtextdomain = Module['_pg_bindtextdomain'] = wasmExports['pg_bindtextdomain'])(a0);\nvar _CacheRegisterRelcacheCallback = Module['_CacheRegisterRelcacheCallback'] = (a0, a1) => (_CacheRegisterRelcacheCallback = Module['_CacheRegisterRelcacheCallback'] = wasmExports['CacheRegisterRelcacheCallback'])(a0, a1);\nvar _CachedPlanAllowsSimpleValidityCheck = Module['_CachedPlanAllowsSimpleValidityCheck'] = (a0, a1, a2) => (_CachedPlanAllowsSimpleValidityCheck = Module['_CachedPlanAllowsSimpleValidityCheck'] = wasmExports['CachedPlanAllowsSimpleValidityCheck'])(a0, a1, a2);\nvar _CachedPlanIsSimplyValid = Module['_CachedPlanIsSimplyValid'] = (a0, a1, a2) => (_CachedPlanIsSimplyValid = Module['_CachedPlanIsSimplyValid'] = wasmExports['CachedPlanIsSimplyValid'])(a0, a1, a2);\nvar _GetCachedExpression = Module['_GetCachedExpression'] = (a0) => (_GetCachedExpression = Module['_GetCachedExpression'] = wasmExports['GetCachedExpression'])(a0);\nvar _FreeCachedExpression = Module['_FreeCachedExpression'] = (a0) => (_FreeCachedExpression = Module['_FreeCachedExpression'] = wasmExports['FreeCachedExpression'])(a0);\nvar _SearchSysCacheAttName = Module['_SearchSysCacheAttName'] = (a0, a1) => (_SearchSysCacheAttName = Module['_SearchSysCacheAttName'] = wasmExports['SearchSysCacheAttName'])(a0, a1);\nvar _get_func_namespace = Module['_get_func_namespace'] = (a0) => (_get_func_namespace = Module['_get_func_namespace'] = wasmExports['get_func_namespace'])(a0);\nvar _get_rel_type_id = Module['_get_rel_type_id'] = (a0) => (_get_rel_type_id = Module['_get_rel_type_id'] = wasmExports['get_rel_type_id'])(a0);\nvar _get_typsubscript = Module['_get_typsubscript'] = (a0, a1) => (_get_typsubscript = Module['_get_typsubscript'] = wasmExports['get_typsubscript'])(a0, a1);\nvar _is_publishable_relation = Module['_is_publishable_relation'] = (a0) => (_is_publishable_relation = Module['_is_publishable_relation'] = wasmExports['is_publishable_relation'])(a0);\nvar _GetRelationPublications = Module['_GetRelationPublications'] = (a0) => (_GetRelationPublications = Module['_GetRelationPublications'] = wasmExports['GetRelationPublications'])(a0);\nvar _GetSchemaPublications = Module['_GetSchemaPublications'] = (a0) => (_GetSchemaPublications = Module['_GetSchemaPublications'] = wasmExports['GetSchemaPublications'])(a0);\nvar _in_error_recursion_trouble = Module['_in_error_recursion_trouble'] = () => (_in_error_recursion_trouble = Module['_in_error_recursion_trouble'] = wasmExports['in_error_recursion_trouble'])();\nvar _getinternalerrposition = Module['_getinternalerrposition'] = () => (_getinternalerrposition = Module['_getinternalerrposition'] = wasmExports['getinternalerrposition'])();\nvar _FreeErrorData = Module['_FreeErrorData'] = (a0) => (_FreeErrorData = Module['_FreeErrorData'] = wasmExports['FreeErrorData'])(a0);\nvar _GetErrorContextStack = Module['_GetErrorContextStack'] = () => (_GetErrorContextStack = Module['_GetErrorContextStack'] = wasmExports['GetErrorContextStack'])();\nvar _scanner_init = Module['_scanner_init'] = (a0, a1, a2, a3) => (_scanner_init = Module['_scanner_init'] = wasmExports['scanner_init'])(a0, a1, a2, a3);\nvar _scanner_finish = Module['_scanner_finish'] = (a0) => (_scanner_finish = Module['_scanner_finish'] = wasmExports['scanner_finish'])(a0);\nvar _core_yylex = Module['_core_yylex'] = (a0, a1, a2) => (_core_yylex = Module['_core_yylex'] = wasmExports['core_yylex'])(a0, a1, a2);\nvar _LookupTypeName = Module['_LookupTypeName'] = (a0, a1, a2, a3) => (_LookupTypeName = Module['_LookupTypeName'] = wasmExports['LookupTypeName'])(a0, a1, a2, a3);\nvar _typeStringToTypeName = Module['_typeStringToTypeName'] = (a0, a1) => (_typeStringToTypeName = Module['_typeStringToTypeName'] = wasmExports['typeStringToTypeName'])(a0, a1);\nvar _makeTypeNameFromNameList = Module['_makeTypeNameFromNameList'] = (a0) => (_makeTypeNameFromNameList = Module['_makeTypeNameFromNameList'] = wasmExports['makeTypeNameFromNameList'])(a0);\nvar _makeBoolean = Module['_makeBoolean'] = (a0) => (_makeBoolean = Module['_makeBoolean'] = wasmExports['makeBoolean'])(a0);\nvar _makeInteger = Module['_makeInteger'] = (a0) => (_makeInteger = Module['_makeInteger'] = wasmExports['makeInteger'])(a0);\nvar _makeTypeName = Module['_makeTypeName'] = (a0) => (_makeTypeName = Module['_makeTypeName'] = wasmExports['makeTypeName'])(a0);\nvar _list_make4_impl = Module['_list_make4_impl'] = (a0, a1, a2, a3, a4) => (_list_make4_impl = Module['_list_make4_impl'] = wasmExports['list_make4_impl'])(a0, a1, a2, a3, a4);\nvar _list_member = Module['_list_member'] = (a0, a1) => (_list_member = Module['_list_member'] = wasmExports['list_member'])(a0, a1);\nvar _SignalHandlerForConfigReload = Module['_SignalHandlerForConfigReload'] = (a0) => (_SignalHandlerForConfigReload = Module['_SignalHandlerForConfigReload'] = wasmExports['SignalHandlerForConfigReload'])(a0);\nvar _SignalHandlerForShutdownRequest = Module['_SignalHandlerForShutdownRequest'] = (a0) => (_SignalHandlerForShutdownRequest = Module['_SignalHandlerForShutdownRequest'] = wasmExports['SignalHandlerForShutdownRequest'])(a0);\nvar _send = Module['_send'] = (a0, a1, a2, a3) => (_send = Module['_send'] = wasmExports['send'])(a0, a1, a2, a3);\nvar _gai_strerror = Module['_gai_strerror'] = (a0) => (_gai_strerror = Module['_gai_strerror'] = wasmExports['gai_strerror'])(a0);\nvar _RegisterBackgroundWorker = Module['_RegisterBackgroundWorker'] = (a0) => (_RegisterBackgroundWorker = Module['_RegisterBackgroundWorker'] = wasmExports['RegisterBackgroundWorker'])(a0);\nvar _WaitForBackgroundWorkerStartup = Module['_WaitForBackgroundWorkerStartup'] = (a0, a1) => (_WaitForBackgroundWorkerStartup = Module['_WaitForBackgroundWorkerStartup'] = wasmExports['WaitForBackgroundWorkerStartup'])(a0, a1);\nvar _pg_initdb = Module['_pg_initdb'] = () => (_pg_initdb = Module['_pg_initdb'] = wasmExports['pg_initdb'])();\nvar _pg_initdb_main = Module['_pg_initdb_main'] = () => (_pg_initdb_main = Module['_pg_initdb_main'] = wasmExports['pg_initdb_main'])();\nvar ___cxa_throw = Module['___cxa_throw'] = (a0, a1, a2) => (___cxa_throw = Module['___cxa_throw'] = wasmExports['__cxa_throw'])(a0, a1, a2);\nvar _main_repl = Module['_main_repl'] = () => (_main_repl = Module['_main_repl'] = wasmExports['main_repl'])();\nvar _main = Module['_main'] = (a0, a1) => (_main = Module['_main'] = wasmExports['__main_argc_argv'])(a0, a1);\nvar _list_make5_impl = Module['_list_make5_impl'] = (a0, a1, a2, a3, a4, a5) => (_list_make5_impl = Module['_list_make5_impl'] = wasmExports['list_make5_impl'])(a0, a1, a2, a3, a4, a5);\nvar _lappend_xid = Module['_lappend_xid'] = (a0, a1) => (_lappend_xid = Module['_lappend_xid'] = wasmExports['lappend_xid'])(a0, a1);\nvar _list_member_ptr = Module['_list_member_ptr'] = (a0, a1) => (_list_member_ptr = Module['_list_member_ptr'] = wasmExports['list_member_ptr'])(a0, a1);\nvar _list_member_xid = Module['_list_member_xid'] = (a0, a1) => (_list_member_xid = Module['_list_member_xid'] = wasmExports['list_member_xid'])(a0, a1);\nvar _list_append_unique_ptr = Module['_list_append_unique_ptr'] = (a0, a1) => (_list_append_unique_ptr = Module['_list_append_unique_ptr'] = wasmExports['list_append_unique_ptr'])(a0, a1);\nvar _CleanQuerytext = Module['_CleanQuerytext'] = (a0, a1, a2) => (_CleanQuerytext = Module['_CleanQuerytext'] = wasmExports['CleanQuerytext'])(a0, a1, a2);\nvar _EnableQueryId = Module['_EnableQueryId'] = () => (_EnableQueryId = Module['_EnableQueryId'] = wasmExports['EnableQueryId'])();\nvar _make_orclause = Module['_make_orclause'] = (a0) => (_make_orclause = Module['_make_orclause'] = wasmExports['make_orclause'])(a0);\nvar _join_clause_is_movable_to = Module['_join_clause_is_movable_to'] = (a0, a1) => (_join_clause_is_movable_to = Module['_join_clause_is_movable_to'] = wasmExports['join_clause_is_movable_to'])(a0, a1);\nvar _make_restrictinfo = Module['_make_restrictinfo'] = (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) => (_make_restrictinfo = Module['_make_restrictinfo'] = wasmExports['make_restrictinfo'])(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);\nvar _get_plan_rowmark = Module['_get_plan_rowmark'] = (a0, a1) => (_get_plan_rowmark = Module['_get_plan_rowmark'] = wasmExports['get_plan_rowmark'])(a0, a1);\nvar _add_row_identity_var = Module['_add_row_identity_var'] = (a0, a1, a2, a3) => (_add_row_identity_var = Module['_add_row_identity_var'] = wasmExports['add_row_identity_var'])(a0, a1, a2, a3);\nvar _get_rel_all_updated_cols = Module['_get_rel_all_updated_cols'] = (a0, a1) => (_get_rel_all_updated_cols = Module['_get_rel_all_updated_cols'] = wasmExports['get_rel_all_updated_cols'])(a0, a1);\nvar _get_baserel_parampathinfo = Module['_get_baserel_parampathinfo'] = (a0, a1, a2) => (_get_baserel_parampathinfo = Module['_get_baserel_parampathinfo'] = wasmExports['get_baserel_parampathinfo'])(a0, a1, a2);\nvar _tlist_member = Module['_tlist_member'] = (a0, a1) => (_tlist_member = Module['_tlist_member'] = wasmExports['tlist_member'])(a0, a1);\nvar _add_to_flat_tlist = Module['_add_to_flat_tlist'] = (a0, a1) => (_add_to_flat_tlist = Module['_add_to_flat_tlist'] = wasmExports['add_to_flat_tlist'])(a0, a1);\nvar _get_sortgrouplist_exprs = Module['_get_sortgrouplist_exprs'] = (a0, a1) => (_get_sortgrouplist_exprs = Module['_get_sortgrouplist_exprs'] = wasmExports['get_sortgrouplist_exprs'])(a0, a1);\nvar _get_sortgroupref_clause_noerr = Module['_get_sortgroupref_clause_noerr'] = (a0, a1) => (_get_sortgroupref_clause_noerr = Module['_get_sortgroupref_clause_noerr'] = wasmExports['get_sortgroupref_clause_noerr'])(a0, a1);\nvar _grouping_is_sortable = Module['_grouping_is_sortable'] = (a0) => (_grouping_is_sortable = Module['_grouping_is_sortable'] = wasmExports['grouping_is_sortable'])(a0);\nvar _copy_pathtarget = Module['_copy_pathtarget'] = (a0) => (_copy_pathtarget = Module['_copy_pathtarget'] = wasmExports['copy_pathtarget'])(a0);\nvar _add_new_columns_to_pathtarget = Module['_add_new_columns_to_pathtarget'] = (a0, a1) => (_add_new_columns_to_pathtarget = Module['_add_new_columns_to_pathtarget'] = wasmExports['add_new_columns_to_pathtarget'])(a0, a1);\nvar _get_translated_update_targetlist = Module['_get_translated_update_targetlist'] = (a0, a1, a2, a3) => (_get_translated_update_targetlist = Module['_get_translated_update_targetlist'] = wasmExports['get_translated_update_targetlist'])(a0, a1, a2, a3);\nvar _contain_mutable_functions = Module['_contain_mutable_functions'] = (a0) => (_contain_mutable_functions = Module['_contain_mutable_functions'] = wasmExports['contain_mutable_functions'])(a0);\nvar _cost_qual_eval = Module['_cost_qual_eval'] = (a0, a1, a2) => (_cost_qual_eval = Module['_cost_qual_eval'] = wasmExports['cost_qual_eval'])(a0, a1, a2);\nvar _add_path = Module['_add_path'] = (a0, a1) => (_add_path = Module['_add_path'] = wasmExports['add_path'])(a0, a1);\nvar _pathkeys_contained_in = Module['_pathkeys_contained_in'] = (a0, a1) => (_pathkeys_contained_in = Module['_pathkeys_contained_in'] = wasmExports['pathkeys_contained_in'])(a0, a1);\nvar _cost_sort = Module['_cost_sort'] = (a0, a1, a2, a3, a4, a5, a6, a7, a8) => (_cost_sort = Module['_cost_sort'] = wasmExports['cost_sort'])(a0, a1, a2, a3, a4, a5, a6, a7, a8);\nvar _create_foreignscan_path = Module['_create_foreignscan_path'] = (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) => (_create_foreignscan_path = Module['_create_foreignscan_path'] = wasmExports['create_foreignscan_path'])(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);\nvar _create_foreign_join_path = Module['_create_foreign_join_path'] = (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) => (_create_foreign_join_path = Module['_create_foreign_join_path'] = wasmExports['create_foreign_join_path'])(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);\nvar _create_foreign_upper_path = Module['_create_foreign_upper_path'] = (a0, a1, a2, a3, a4, a5, a6, a7, a8) => (_create_foreign_upper_path = Module['_create_foreign_upper_path'] = wasmExports['create_foreign_upper_path'])(a0, a1, a2, a3, a4, a5, a6, a7, a8);\nvar _create_projection_path = Module['_create_projection_path'] = (a0, a1, a2, a3) => (_create_projection_path = Module['_create_projection_path'] = wasmExports['create_projection_path'])(a0, a1, a2, a3);\nvar _create_sort_path = Module['_create_sort_path'] = (a0, a1, a2, a3, a4) => (_create_sort_path = Module['_create_sort_path'] = wasmExports['create_sort_path'])(a0, a1, a2, a3, a4);\nvar _adjust_limit_rows_costs = Module['_adjust_limit_rows_costs'] = (a0, a1, a2, a3, a4) => (_adjust_limit_rows_costs = Module['_adjust_limit_rows_costs'] = wasmExports['adjust_limit_rows_costs'])(a0, a1, a2, a3, a4);\nvar _extract_actual_clauses = Module['_extract_actual_clauses'] = (a0, a1) => (_extract_actual_clauses = Module['_extract_actual_clauses'] = wasmExports['extract_actual_clauses'])(a0, a1);\nvar _get_agg_clause_costs = Module['_get_agg_clause_costs'] = (a0, a1, a2) => (_get_agg_clause_costs = Module['_get_agg_clause_costs'] = wasmExports['get_agg_clause_costs'])(a0, a1, a2);\nvar _update_mergeclause_eclasses = Module['_update_mergeclause_eclasses'] = (a0, a1) => (_update_mergeclause_eclasses = Module['_update_mergeclause_eclasses'] = wasmExports['update_mergeclause_eclasses'])(a0, a1);\nvar _set_baserel_size_estimates = Module['_set_baserel_size_estimates'] = (a0, a1) => (_set_baserel_size_estimates = Module['_set_baserel_size_estimates'] = wasmExports['set_baserel_size_estimates'])(a0, a1);\nvar _make_canonical_pathkey = Module['_make_canonical_pathkey'] = (a0, a1, a2, a3, a4) => (_make_canonical_pathkey = Module['_make_canonical_pathkey'] = wasmExports['make_canonical_pathkey'])(a0, a1, a2, a3, a4);\nvar _eclass_useful_for_merging = Module['_eclass_useful_for_merging'] = (a0, a1, a2) => (_eclass_useful_for_merging = Module['_eclass_useful_for_merging'] = wasmExports['eclass_useful_for_merging'])(a0, a1, a2);\nvar _generate_implied_equalities_for_column = Module['_generate_implied_equalities_for_column'] = (a0, a1, a2, a3, a4) => (_generate_implied_equalities_for_column = Module['_generate_implied_equalities_for_column'] = wasmExports['generate_implied_equalities_for_column'])(a0, a1, a2, a3, a4);\nvar _standard_planner = Module['_standard_planner'] = (a0, a1, a2, a3) => (_standard_planner = Module['_standard_planner'] = wasmExports['standard_planner'])(a0, a1, a2, a3);\nvar _plan_create_index_workers = Module['_plan_create_index_workers'] = (a0, a1) => (_plan_create_index_workers = Module['_plan_create_index_workers'] = wasmExports['plan_create_index_workers'])(a0, a1);\nvar _change_plan_targetlist = Module['_change_plan_targetlist'] = (a0, a1, a2) => (_change_plan_targetlist = Module['_change_plan_targetlist'] = wasmExports['change_plan_targetlist'])(a0, a1, a2);\nvar _make_foreignscan = Module['_make_foreignscan'] = (a0, a1, a2, a3, a4, a5, a6, a7) => (_make_foreignscan = Module['_make_foreignscan'] = wasmExports['make_foreignscan'])(a0, a1, a2, a3, a4, a5, a6, a7);\nvar _BeginCopyFrom = Module['_BeginCopyFrom'] = (a0, a1, a2, a3, a4, a5, a6, a7) => (_BeginCopyFrom = Module['_BeginCopyFrom'] = wasmExports['BeginCopyFrom'])(a0, a1, a2, a3, a4, a5, a6, a7);\nvar _EndCopyFrom = Module['_EndCopyFrom'] = (a0) => (_EndCopyFrom = Module['_EndCopyFrom'] = wasmExports['EndCopyFrom'])(a0);\nvar _ProcessCopyOptions = Module['_ProcessCopyOptions'] = (a0, a1, a2, a3) => (_ProcessCopyOptions = Module['_ProcessCopyOptions'] = wasmExports['ProcessCopyOptions'])(a0, a1, a2, a3);\nvar _NextCopyFrom = Module['_NextCopyFrom'] = (a0, a1, a2, a3) => (_NextCopyFrom = Module['_NextCopyFrom'] = wasmExports['NextCopyFrom'])(a0, a1, a2, a3);\nvar _defGetStreamingMode = Module['_defGetStreamingMode'] = (a0) => (_defGetStreamingMode = Module['_defGetStreamingMode'] = wasmExports['defGetStreamingMode'])(a0);\nvar _plain_crypt_verify = Module['_plain_crypt_verify'] = (a0, a1, a2, a3) => (_plain_crypt_verify = Module['_plain_crypt_verify'] = wasmExports['plain_crypt_verify'])(a0, a1, a2, a3);\nvar _getExtensionOfObject = Module['_getExtensionOfObject'] = (a0, a1) => (_getExtensionOfObject = Module['_getExtensionOfObject'] = wasmExports['getExtensionOfObject'])(a0, a1);\nvar _nextval = Module['_nextval'] = (a0) => (_nextval = Module['_nextval'] = wasmExports['nextval'])(a0);\nvar _CopyFromErrorCallback = Module['_CopyFromErrorCallback'] = (a0) => (_CopyFromErrorCallback = Module['_CopyFromErrorCallback'] = wasmExports['CopyFromErrorCallback'])(a0);\nvar _GetTopMostAncestorInPublication = Module['_GetTopMostAncestorInPublication'] = (a0, a1, a2) => (_GetTopMostAncestorInPublication = Module['_GetTopMostAncestorInPublication'] = wasmExports['GetTopMostAncestorInPublication'])(a0, a1, a2);\nvar _pub_collist_to_bitmapset = Module['_pub_collist_to_bitmapset'] = (a0, a1, a2) => (_pub_collist_to_bitmapset = Module['_pub_collist_to_bitmapset'] = wasmExports['pub_collist_to_bitmapset'])(a0, a1, a2);\nvar _ExplainBeginOutput = Module['_ExplainBeginOutput'] = (a0) => (_ExplainBeginOutput = Module['_ExplainBeginOutput'] = wasmExports['ExplainBeginOutput'])(a0);\nvar _NewExplainState = Module['_NewExplainState'] = () => (_NewExplainState = Module['_NewExplainState'] = wasmExports['NewExplainState'])();\nvar _ExplainEndOutput = Module['_ExplainEndOutput'] = (a0) => (_ExplainEndOutput = Module['_ExplainEndOutput'] = wasmExports['ExplainEndOutput'])(a0);\nvar _ExplainPrintPlan = Module['_ExplainPrintPlan'] = (a0, a1) => (_ExplainPrintPlan = Module['_ExplainPrintPlan'] = wasmExports['ExplainPrintPlan'])(a0, a1);\nvar _ExplainPrintTriggers = Module['_ExplainPrintTriggers'] = (a0, a1) => (_ExplainPrintTriggers = Module['_ExplainPrintTriggers'] = wasmExports['ExplainPrintTriggers'])(a0, a1);\nvar _ExplainPrintJITSummary = Module['_ExplainPrintJITSummary'] = (a0, a1) => (_ExplainPrintJITSummary = Module['_ExplainPrintJITSummary'] = wasmExports['ExplainPrintJITSummary'])(a0, a1);\nvar _ExplainPropertyInteger = Module['_ExplainPropertyInteger'] = (a0, a1, a2, a3) => (_ExplainPropertyInteger = Module['_ExplainPropertyInteger'] = wasmExports['ExplainPropertyInteger'])(a0, a1, a2, a3);\nvar _ExplainQueryText = Module['_ExplainQueryText'] = (a0, a1) => (_ExplainQueryText = Module['_ExplainQueryText'] = wasmExports['ExplainQueryText'])(a0, a1);\nvar _ExplainPropertyText = Module['_ExplainPropertyText'] = (a0, a1, a2) => (_ExplainPropertyText = Module['_ExplainPropertyText'] = wasmExports['ExplainPropertyText'])(a0, a1, a2);\nvar _ExplainQueryParameters = Module['_ExplainQueryParameters'] = (a0, a1, a2) => (_ExplainQueryParameters = Module['_ExplainQueryParameters'] = wasmExports['ExplainQueryParameters'])(a0, a1, a2);\nvar _pg_is_ascii = Module['_pg_is_ascii'] = (a0) => (_pg_is_ascii = Module['_pg_is_ascii'] = wasmExports['pg_is_ascii'])(a0);\nvar _pg_md5_encrypt = Module['_pg_md5_encrypt'] = (a0, a1, a2, a3, a4) => (_pg_md5_encrypt = Module['_pg_md5_encrypt'] = wasmExports['pg_md5_encrypt'])(a0, a1, a2, a3, a4);\nvar _explicit_bzero = Module['_explicit_bzero'] = (a0, a1) => (_explicit_bzero = Module['_explicit_bzero'] = wasmExports['explicit_bzero'])(a0, a1);\nvar _pg_strip_crlf = Module['_pg_strip_crlf'] = (a0) => (_pg_strip_crlf = Module['_pg_strip_crlf'] = wasmExports['pg_strip_crlf'])(a0);\nvar _recv = Module['_recv'] = (a0, a1, a2, a3) => (_recv = Module['_recv'] = wasmExports['recv'])(a0, a1, a2, a3);\nvar _pg_getaddrinfo_all = Module['_pg_getaddrinfo_all'] = (a0, a1, a2, a3) => (_pg_getaddrinfo_all = Module['_pg_getaddrinfo_all'] = wasmExports['pg_getaddrinfo_all'])(a0, a1, a2, a3);\nvar _pg_freeaddrinfo_all = Module['_pg_freeaddrinfo_all'] = (a0, a1) => (_pg_freeaddrinfo_all = Module['_pg_freeaddrinfo_all'] = wasmExports['pg_freeaddrinfo_all'])(a0, a1);\nvar _sigemptyset = Module['_sigemptyset'] = (a0) => (_sigemptyset = Module['_sigemptyset'] = wasmExports['sigemptyset'])(a0);\nvar _getpeereid = Module['_getpeereid'] = (a0, a1, a2) => (_getpeereid = Module['_getpeereid'] = wasmExports['getpeereid'])(a0, a1, a2);\nvar _socket = Module['_socket'] = (a0, a1, a2) => (_socket = Module['_socket'] = wasmExports['socket'])(a0, a1, a2);\nvar _connect = Module['_connect'] = (a0, a1, a2) => (_connect = Module['_connect'] = wasmExports['connect'])(a0, a1, a2);\nvar _setsockopt = Module['_setsockopt'] = (a0, a1, a2, a3, a4) => (_setsockopt = Module['_setsockopt'] = wasmExports['setsockopt'])(a0, a1, a2, a3, a4);\nvar _getsockname = Module['_getsockname'] = (a0, a1, a2) => (_getsockname = Module['_getsockname'] = wasmExports['getsockname'])(a0, a1, a2);\nvar _getsockopt = Module['_getsockopt'] = (a0, a1, a2, a3, a4) => (_getsockopt = Module['_getsockopt'] = wasmExports['getsockopt'])(a0, a1, a2, a3, a4);\nvar _pg_b64_enc_len = Module['_pg_b64_enc_len'] = (a0) => (_pg_b64_enc_len = Module['_pg_b64_enc_len'] = wasmExports['pg_b64_enc_len'])(a0);\nvar _pg_b64_encode = Module['_pg_b64_encode'] = (a0, a1, a2, a3) => (_pg_b64_encode = Module['_pg_b64_encode'] = wasmExports['pg_b64_encode'])(a0, a1, a2, a3);\nvar _pg_b64_dec_len = Module['_pg_b64_dec_len'] = (a0) => (_pg_b64_dec_len = Module['_pg_b64_dec_len'] = wasmExports['pg_b64_dec_len'])(a0);\nvar _pg_b64_decode = Module['_pg_b64_decode'] = (a0, a1, a2, a3) => (_pg_b64_decode = Module['_pg_b64_decode'] = wasmExports['pg_b64_decode'])(a0, a1, a2, a3);\nvar _pg_hmac_create = Module['_pg_hmac_create'] = (a0) => (_pg_hmac_create = Module['_pg_hmac_create'] = wasmExports['pg_hmac_create'])(a0);\nvar _pg_hmac_init = Module['_pg_hmac_init'] = (a0, a1, a2) => (_pg_hmac_init = Module['_pg_hmac_init'] = wasmExports['pg_hmac_init'])(a0, a1, a2);\nvar _pg_hmac_update = Module['_pg_hmac_update'] = (a0, a1, a2) => (_pg_hmac_update = Module['_pg_hmac_update'] = wasmExports['pg_hmac_update'])(a0, a1, a2);\nvar _pg_hmac_final = Module['_pg_hmac_final'] = (a0, a1, a2) => (_pg_hmac_final = Module['_pg_hmac_final'] = wasmExports['pg_hmac_final'])(a0, a1, a2);\nvar _pg_hmac_error = Module['_pg_hmac_error'] = (a0) => (_pg_hmac_error = Module['_pg_hmac_error'] = wasmExports['pg_hmac_error'])(a0);\nvar _scram_H = Module['_scram_H'] = (a0, a1, a2, a3, a4) => (_scram_H = Module['_scram_H'] = wasmExports['scram_H'])(a0, a1, a2, a3, a4);\nvar _pg_saslprep = Module['_pg_saslprep'] = (a0, a1) => (_pg_saslprep = Module['_pg_saslprep'] = wasmExports['pg_saslprep'])(a0, a1);\nvar _scram_build_secret = Module['_scram_build_secret'] = (a0, a1, a2, a3, a4, a5, a6) => (_scram_build_secret = Module['_scram_build_secret'] = wasmExports['scram_build_secret'])(a0, a1, a2, a3, a4, a5, a6);\nvar _scram_SaltedPassword = Module['_scram_SaltedPassword'] = (a0, a1, a2, a3, a4, a5, a6, a7) => (_scram_SaltedPassword = Module['_scram_SaltedPassword'] = wasmExports['scram_SaltedPassword'])(a0, a1, a2, a3, a4, a5, a6, a7);\nvar _scram_ServerKey = Module['_scram_ServerKey'] = (a0, a1, a2, a3, a4) => (_scram_ServerKey = Module['_scram_ServerKey'] = wasmExports['scram_ServerKey'])(a0, a1, a2, a3, a4);\nvar _logicalrep_write_begin = Module['_logicalrep_write_begin'] = (a0, a1) => (_logicalrep_write_begin = Module['_logicalrep_write_begin'] = wasmExports['logicalrep_write_begin'])(a0, a1);\nvar _logicalrep_write_commit = Module['_logicalrep_write_commit'] = (a0, a1, a2) => (_logicalrep_write_commit = Module['_logicalrep_write_commit'] = wasmExports['logicalrep_write_commit'])(a0, a1, a2);\nvar _logicalrep_write_begin_prepare = Module['_logicalrep_write_begin_prepare'] = (a0, a1) => (_logicalrep_write_begin_prepare = Module['_logicalrep_write_begin_prepare'] = wasmExports['logicalrep_write_begin_prepare'])(a0, a1);\nvar _logicalrep_write_prepare = Module['_logicalrep_write_prepare'] = (a0, a1, a2) => (_logicalrep_write_prepare = Module['_logicalrep_write_prepare'] = wasmExports['logicalrep_write_prepare'])(a0, a1, a2);\nvar _logicalrep_write_commit_prepared = Module['_logicalrep_write_commit_prepared'] = (a0, a1, a2) => (_logicalrep_write_commit_prepared = Module['_logicalrep_write_commit_prepared'] = wasmExports['logicalrep_write_commit_prepared'])(a0, a1, a2);\nvar _logicalrep_write_rollback_prepared = Module['_logicalrep_write_rollback_prepared'] = (a0, a1, a2, a3) => (_logicalrep_write_rollback_prepared = Module['_logicalrep_write_rollback_prepared'] = wasmExports['logicalrep_write_rollback_prepared'])(a0, a1, a2, a3);\nvar _logicalrep_write_stream_prepare = Module['_logicalrep_write_stream_prepare'] = (a0, a1, a2) => (_logicalrep_write_stream_prepare = Module['_logicalrep_write_stream_prepare'] = wasmExports['logicalrep_write_stream_prepare'])(a0, a1, a2);\nvar _logicalrep_write_origin = Module['_logicalrep_write_origin'] = (a0, a1, a2) => (_logicalrep_write_origin = Module['_logicalrep_write_origin'] = wasmExports['logicalrep_write_origin'])(a0, a1, a2);\nvar _logicalrep_write_insert = Module['_logicalrep_write_insert'] = (a0, a1, a2, a3, a4, a5) => (_logicalrep_write_insert = Module['_logicalrep_write_insert'] = wasmExports['logicalrep_write_insert'])(a0, a1, a2, a3, a4, a5);\nvar _logicalrep_write_update = Module['_logicalrep_write_update'] = (a0, a1, a2, a3, a4, a5, a6) => (_logicalrep_write_update = Module['_logicalrep_write_update'] = wasmExports['logicalrep_write_update'])(a0, a1, a2, a3, a4, a5, a6);\nvar _logicalrep_write_delete = Module['_logicalrep_write_delete'] = (a0, a1, a2, a3, a4, a5) => (_logicalrep_write_delete = Module['_logicalrep_write_delete'] = wasmExports['logicalrep_write_delete'])(a0, a1, a2, a3, a4, a5);\nvar _logicalrep_write_truncate = Module['_logicalrep_write_truncate'] = (a0, a1, a2, a3, a4, a5) => (_logicalrep_write_truncate = Module['_logicalrep_write_truncate'] = wasmExports['logicalrep_write_truncate'])(a0, a1, a2, a3, a4, a5);\nvar _logicalrep_write_message = Module['_logicalrep_write_message'] = (a0, a1, a2, a3, a4, a5, a6) => (_logicalrep_write_message = Module['_logicalrep_write_message'] = wasmExports['logicalrep_write_message'])(a0, a1, a2, a3, a4, a5, a6);\nvar _logicalrep_write_rel = Module['_logicalrep_write_rel'] = (a0, a1, a2, a3) => (_logicalrep_write_rel = Module['_logicalrep_write_rel'] = wasmExports['logicalrep_write_rel'])(a0, a1, a2, a3);\nvar _logicalrep_write_typ = Module['_logicalrep_write_typ'] = (a0, a1, a2) => (_logicalrep_write_typ = Module['_logicalrep_write_typ'] = wasmExports['logicalrep_write_typ'])(a0, a1, a2);\nvar _logicalrep_write_stream_start = Module['_logicalrep_write_stream_start'] = (a0, a1, a2) => (_logicalrep_write_stream_start = Module['_logicalrep_write_stream_start'] = wasmExports['logicalrep_write_stream_start'])(a0, a1, a2);\nvar _logicalrep_write_stream_stop = Module['_logicalrep_write_stream_stop'] = (a0) => (_logicalrep_write_stream_stop = Module['_logicalrep_write_stream_stop'] = wasmExports['logicalrep_write_stream_stop'])(a0);\nvar _logicalrep_write_stream_commit = Module['_logicalrep_write_stream_commit'] = (a0, a1, a2) => (_logicalrep_write_stream_commit = Module['_logicalrep_write_stream_commit'] = wasmExports['logicalrep_write_stream_commit'])(a0, a1, a2);\nvar _logicalrep_write_stream_abort = Module['_logicalrep_write_stream_abort'] = (a0, a1, a2, a3, a4, a5) => (_logicalrep_write_stream_abort = Module['_logicalrep_write_stream_abort'] = wasmExports['logicalrep_write_stream_abort'])(a0, a1, a2, a3, a4, a5);\nvar _OutputPluginPrepareWrite = Module['_OutputPluginPrepareWrite'] = (a0, a1) => (_OutputPluginPrepareWrite = Module['_OutputPluginPrepareWrite'] = wasmExports['OutputPluginPrepareWrite'])(a0, a1);\nvar _OutputPluginWrite = Module['_OutputPluginWrite'] = (a0, a1) => (_OutputPluginWrite = Module['_OutputPluginWrite'] = wasmExports['OutputPluginWrite'])(a0, a1);\nvar _OutputPluginUpdateProgress = Module['_OutputPluginUpdateProgress'] = (a0, a1) => (_OutputPluginUpdateProgress = Module['_OutputPluginUpdateProgress'] = wasmExports['OutputPluginUpdateProgress'])(a0, a1);\nvar _replorigin_by_oid = Module['_replorigin_by_oid'] = (a0, a1, a2) => (_replorigin_by_oid = Module['_replorigin_by_oid'] = wasmExports['replorigin_by_oid'])(a0, a1, a2);\nvar _ProcessWalRcvInterrupts = Module['_ProcessWalRcvInterrupts'] = () => (_ProcessWalRcvInterrupts = Module['_ProcessWalRcvInterrupts'] = wasmExports['ProcessWalRcvInterrupts'])();\nvar _PQconnectStartParams = Module['_PQconnectStartParams'] = (a0, a1, a2) => (_PQconnectStartParams = Module['_PQconnectStartParams'] = wasmExports['PQconnectStartParams'])(a0, a1, a2);\nvar _PQstatus = Module['_PQstatus'] = (a0) => (_PQstatus = Module['_PQstatus'] = wasmExports['PQstatus'])(a0);\nvar _PQsocket = Module['_PQsocket'] = (a0) => (_PQsocket = Module['_PQsocket'] = wasmExports['PQsocket'])(a0);\nvar _PQconnectPoll = Module['_PQconnectPoll'] = (a0) => (_PQconnectPoll = Module['_PQconnectPoll'] = wasmExports['PQconnectPoll'])(a0);\nvar _PQconnectionUsedPassword = Module['_PQconnectionUsedPassword'] = (a0) => (_PQconnectionUsedPassword = Module['_PQconnectionUsedPassword'] = wasmExports['PQconnectionUsedPassword'])(a0);\nvar _PQfinish = Module['_PQfinish'] = (a0) => (_PQfinish = Module['_PQfinish'] = wasmExports['PQfinish'])(a0);\nvar _PQresultStatus = Module['_PQresultStatus'] = (a0) => (_PQresultStatus = Module['_PQresultStatus'] = wasmExports['PQresultStatus'])(a0);\nvar _PQclear = Module['_PQclear'] = (a0) => (_PQclear = Module['_PQclear'] = wasmExports['PQclear'])(a0);\nvar _PQerrorMessage = Module['_PQerrorMessage'] = (a0) => (_PQerrorMessage = Module['_PQerrorMessage'] = wasmExports['PQerrorMessage'])(a0);\nvar _PQnfields = Module['_PQnfields'] = (a0) => (_PQnfields = Module['_PQnfields'] = wasmExports['PQnfields'])(a0);\nvar _PQntuples = Module['_PQntuples'] = (a0) => (_PQntuples = Module['_PQntuples'] = wasmExports['PQntuples'])(a0);\nvar _PQgetvalue = Module['_PQgetvalue'] = (a0, a1, a2) => (_PQgetvalue = Module['_PQgetvalue'] = wasmExports['PQgetvalue'])(a0, a1, a2);\nvar _PQconsumeInput = Module['_PQconsumeInput'] = (a0) => (_PQconsumeInput = Module['_PQconsumeInput'] = wasmExports['PQconsumeInput'])(a0);\nvar _PQgetisnull = Module['_PQgetisnull'] = (a0, a1, a2) => (_PQgetisnull = Module['_PQgetisnull'] = wasmExports['PQgetisnull'])(a0, a1, a2);\nvar _PQresultErrorField = Module['_PQresultErrorField'] = (a0, a1) => (_PQresultErrorField = Module['_PQresultErrorField'] = wasmExports['PQresultErrorField'])(a0, a1);\nvar _PQsendQuery = Module['_PQsendQuery'] = (a0, a1) => (_PQsendQuery = Module['_PQsendQuery'] = wasmExports['PQsendQuery'])(a0, a1);\nvar _PQisBusy = Module['_PQisBusy'] = (a0) => (_PQisBusy = Module['_PQisBusy'] = wasmExports['PQisBusy'])(a0);\nvar _PQgetResult = Module['_PQgetResult'] = (a0) => (_PQgetResult = Module['_PQgetResult'] = wasmExports['PQgetResult'])(a0);\nvar _RelnameGetRelid = Module['_RelnameGetRelid'] = (a0) => (_RelnameGetRelid = Module['_RelnameGetRelid'] = wasmExports['RelnameGetRelid'])(a0);\nvar _GetPublicationByName = Module['_GetPublicationByName'] = (a0, a1) => (_GetPublicationByName = Module['_GetPublicationByName'] = wasmExports['GetPublicationByName'])(a0, a1);\nvar _function_parse_error_transpose = Module['_function_parse_error_transpose'] = (a0) => (_function_parse_error_transpose = Module['_function_parse_error_transpose'] = wasmExports['function_parse_error_transpose'])(a0);\nvar _fputs = Module['_fputs'] = (a0, a1) => (_fputs = Module['_fputs'] = wasmExports['fputs'])(a0, a1);\nvar _popen = Module['_popen'] = (a0, a1) => (_popen = Module['_popen'] = wasmExports['popen'])(a0, a1);\nvar _float_to_shortest_decimal_bufn = Module['_float_to_shortest_decimal_bufn'] = (a0, a1) => (_float_to_shortest_decimal_bufn = Module['_float_to_shortest_decimal_bufn'] = wasmExports['float_to_shortest_decimal_bufn'])(a0, a1);\nvar _pg_prng_uint64 = Module['_pg_prng_uint64'] = (a0) => (_pg_prng_uint64 = Module['_pg_prng_uint64'] = wasmExports['pg_prng_uint64'])(a0);\nvar _scram_ClientKey = Module['_scram_ClientKey'] = (a0, a1, a2, a3, a4) => (_scram_ClientKey = Module['_scram_ClientKey'] = wasmExports['scram_ClientKey'])(a0, a1, a2, a3, a4);\nvar _pg_encoding_dsplen = Module['_pg_encoding_dsplen'] = (a0, a1) => (_pg_encoding_dsplen = Module['_pg_encoding_dsplen'] = wasmExports['pg_encoding_dsplen'])(a0, a1);\nvar _getcwd = Module['_getcwd'] = (a0, a1) => (_getcwd = Module['_getcwd'] = wasmExports['getcwd'])(a0, a1);\nvar _pg_get_user_home_dir = Module['_pg_get_user_home_dir'] = (a0, a1, a2) => (_pg_get_user_home_dir = Module['_pg_get_user_home_dir'] = wasmExports['pg_get_user_home_dir'])(a0, a1, a2);\nvar _nanosleep = Module['_nanosleep'] = (a0, a1) => (_nanosleep = Module['_nanosleep'] = wasmExports['nanosleep'])(a0, a1);\nvar _snprintf = Module['_snprintf'] = (a0, a1, a2, a3) => (_snprintf = Module['_snprintf'] = wasmExports['snprintf'])(a0, a1, a2, a3);\nvar _pg_strerror_r = Module['_pg_strerror_r'] = (a0, a1, a2) => (_pg_strerror_r = Module['_pg_strerror_r'] = wasmExports['pg_strerror_r'])(a0, a1, a2);\nvar _pthread_mutex_lock = Module['_pthread_mutex_lock'] = (a0) => (_pthread_mutex_lock = Module['_pthread_mutex_lock'] = wasmExports['pthread_mutex_lock'])(a0);\nvar _pthread_mutex_unlock = Module['_pthread_mutex_unlock'] = (a0) => (_pthread_mutex_unlock = Module['_pthread_mutex_unlock'] = wasmExports['pthread_mutex_unlock'])(a0);\nvar _strncat = Module['_strncat'] = (a0, a1, a2) => (_strncat = Module['_strncat'] = wasmExports['strncat'])(a0, a1, a2);\nvar _PQexec = Module['_PQexec'] = (a0, a1) => (_PQexec = Module['_PQexec'] = wasmExports['PQexec'])(a0, a1);\nvar _PQsetSingleRowMode = Module['_PQsetSingleRowMode'] = (a0) => (_PQsetSingleRowMode = Module['_PQsetSingleRowMode'] = wasmExports['PQsetSingleRowMode'])(a0);\nvar _PQcmdStatus = Module['_PQcmdStatus'] = (a0) => (_PQcmdStatus = Module['_PQcmdStatus'] = wasmExports['PQcmdStatus'])(a0);\nvar _pthread_sigmask = Module['_pthread_sigmask'] = (a0, a1, a2) => (_pthread_sigmask = Module['_pthread_sigmask'] = wasmExports['pthread_sigmask'])(a0, a1, a2);\nvar _sigismember = Module['_sigismember'] = (a0, a1) => (_sigismember = Module['_sigismember'] = wasmExports['sigismember'])(a0, a1);\nvar _sigpending = Module['_sigpending'] = (a0) => (_sigpending = Module['_sigpending'] = wasmExports['sigpending'])(a0);\nvar _sigwait = Module['_sigwait'] = (a0, a1) => (_sigwait = Module['_sigwait'] = wasmExports['sigwait'])(a0, a1);\nvar _isolat1ToUTF8 = Module['_isolat1ToUTF8'] = (a0, a1, a2, a3) => (_isolat1ToUTF8 = Module['_isolat1ToUTF8'] = wasmExports['isolat1ToUTF8'])(a0, a1, a2, a3);\nvar _UTF8Toisolat1 = Module['_UTF8Toisolat1'] = (a0, a1, a2, a3) => (_UTF8Toisolat1 = Module['_UTF8Toisolat1'] = wasmExports['UTF8Toisolat1'])(a0, a1, a2, a3);\nvar _vfprintf = Module['_vfprintf'] = (a0, a1, a2) => (_vfprintf = Module['_vfprintf'] = wasmExports['vfprintf'])(a0, a1, a2);\nvar _vsnprintf = Module['_vsnprintf'] = (a0, a1, a2, a3) => (_vsnprintf = Module['_vsnprintf'] = wasmExports['vsnprintf'])(a0, a1, a2, a3);\nvar _xmlParserValidityWarning = Module['_xmlParserValidityWarning'] = (a0, a1, a2) => (_xmlParserValidityWarning = Module['_xmlParserValidityWarning'] = wasmExports['xmlParserValidityWarning'])(a0, a1, a2);\nvar _xmlParserValidityError = Module['_xmlParserValidityError'] = (a0, a1, a2) => (_xmlParserValidityError = Module['_xmlParserValidityError'] = wasmExports['xmlParserValidityError'])(a0, a1, a2);\nvar _xmlParserError = Module['_xmlParserError'] = (a0, a1, a2) => (_xmlParserError = Module['_xmlParserError'] = wasmExports['xmlParserError'])(a0, a1, a2);\nvar _xmlParserWarning = Module['_xmlParserWarning'] = (a0, a1, a2) => (_xmlParserWarning = Module['_xmlParserWarning'] = wasmExports['xmlParserWarning'])(a0, a1, a2);\nvar _fprintf = Module['_fprintf'] = (a0, a1, a2) => (_fprintf = Module['_fprintf'] = wasmExports['fprintf'])(a0, a1, a2);\nvar ___xmlParserInputBufferCreateFilename = Module['___xmlParserInputBufferCreateFilename'] = (a0, a1) => (___xmlParserInputBufferCreateFilename = Module['___xmlParserInputBufferCreateFilename'] = wasmExports['__xmlParserInputBufferCreateFilename'])(a0, a1);\nvar ___xmlOutputBufferCreateFilename = Module['___xmlOutputBufferCreateFilename'] = (a0, a1, a2) => (___xmlOutputBufferCreateFilename = Module['___xmlOutputBufferCreateFilename'] = wasmExports['__xmlOutputBufferCreateFilename'])(a0, a1, a2);\nvar _xmlSAX2InternalSubset = Module['_xmlSAX2InternalSubset'] = (a0, a1, a2, a3) => (_xmlSAX2InternalSubset = Module['_xmlSAX2InternalSubset'] = wasmExports['xmlSAX2InternalSubset'])(a0, a1, a2, a3);\nvar _xmlSAX2IsStandalone = Module['_xmlSAX2IsStandalone'] = (a0) => (_xmlSAX2IsStandalone = Module['_xmlSAX2IsStandalone'] = wasmExports['xmlSAX2IsStandalone'])(a0);\nvar _xmlSAX2HasInternalSubset = Module['_xmlSAX2HasInternalSubset'] = (a0) => (_xmlSAX2HasInternalSubset = Module['_xmlSAX2HasInternalSubset'] = wasmExports['xmlSAX2HasInternalSubset'])(a0);\nvar _xmlSAX2HasExternalSubset = Module['_xmlSAX2HasExternalSubset'] = (a0) => (_xmlSAX2HasExternalSubset = Module['_xmlSAX2HasExternalSubset'] = wasmExports['xmlSAX2HasExternalSubset'])(a0);\nvar _xmlSAX2ResolveEntity = Module['_xmlSAX2ResolveEntity'] = (a0, a1, a2) => (_xmlSAX2ResolveEntity = Module['_xmlSAX2ResolveEntity'] = wasmExports['xmlSAX2ResolveEntity'])(a0, a1, a2);\nvar _xmlSAX2GetEntity = Module['_xmlSAX2GetEntity'] = (a0, a1) => (_xmlSAX2GetEntity = Module['_xmlSAX2GetEntity'] = wasmExports['xmlSAX2GetEntity'])(a0, a1);\nvar _xmlSAX2EntityDecl = Module['_xmlSAX2EntityDecl'] = (a0, a1, a2, a3, a4, a5) => (_xmlSAX2EntityDecl = Module['_xmlSAX2EntityDecl'] = wasmExports['xmlSAX2EntityDecl'])(a0, a1, a2, a3, a4, a5);\nvar _xmlSAX2NotationDecl = Module['_xmlSAX2NotationDecl'] = (a0, a1, a2, a3) => (_xmlSAX2NotationDecl = Module['_xmlSAX2NotationDecl'] = wasmExports['xmlSAX2NotationDecl'])(a0, a1, a2, a3);\nvar _xmlSAX2AttributeDecl = Module['_xmlSAX2AttributeDecl'] = (a0, a1, a2, a3, a4, a5, a6) => (_xmlSAX2AttributeDecl = Module['_xmlSAX2AttributeDecl'] = wasmExports['xmlSAX2AttributeDecl'])(a0, a1, a2, a3, a4, a5, a6);\nvar _xmlSAX2ElementDecl = Module['_xmlSAX2ElementDecl'] = (a0, a1, a2, a3) => (_xmlSAX2ElementDecl = Module['_xmlSAX2ElementDecl'] = wasmExports['xmlSAX2ElementDecl'])(a0, a1, a2, a3);\nvar _xmlSAX2UnparsedEntityDecl = Module['_xmlSAX2UnparsedEntityDecl'] = (a0, a1, a2, a3, a4) => (_xmlSAX2UnparsedEntityDecl = Module['_xmlSAX2UnparsedEntityDecl'] = wasmExports['xmlSAX2UnparsedEntityDecl'])(a0, a1, a2, a3, a4);\nvar _xmlSAX2SetDocumentLocator = Module['_xmlSAX2SetDocumentLocator'] = (a0, a1) => (_xmlSAX2SetDocumentLocator = Module['_xmlSAX2SetDocumentLocator'] = wasmExports['xmlSAX2SetDocumentLocator'])(a0, a1);\nvar _xmlSAX2StartDocument = Module['_xmlSAX2StartDocument'] = (a0) => (_xmlSAX2StartDocument = Module['_xmlSAX2StartDocument'] = wasmExports['xmlSAX2StartDocument'])(a0);\nvar _xmlSAX2EndDocument = Module['_xmlSAX2EndDocument'] = (a0) => (_xmlSAX2EndDocument = Module['_xmlSAX2EndDocument'] = wasmExports['xmlSAX2EndDocument'])(a0);\nvar _xmlSAX2StartElement = Module['_xmlSAX2StartElement'] = (a0, a1, a2) => (_xmlSAX2StartElement = Module['_xmlSAX2StartElement'] = wasmExports['xmlSAX2StartElement'])(a0, a1, a2);\nvar _xmlSAX2EndElement = Module['_xmlSAX2EndElement'] = (a0, a1) => (_xmlSAX2EndElement = Module['_xmlSAX2EndElement'] = wasmExports['xmlSAX2EndElement'])(a0, a1);\nvar _xmlSAX2Reference = Module['_xmlSAX2Reference'] = (a0, a1) => (_xmlSAX2Reference = Module['_xmlSAX2Reference'] = wasmExports['xmlSAX2Reference'])(a0, a1);\nvar _xmlSAX2Characters = Module['_xmlSAX2Characters'] = (a0, a1, a2) => (_xmlSAX2Characters = Module['_xmlSAX2Characters'] = wasmExports['xmlSAX2Characters'])(a0, a1, a2);\nvar _xmlSAX2ProcessingInstruction = Module['_xmlSAX2ProcessingInstruction'] = (a0, a1, a2) => (_xmlSAX2ProcessingInstruction = Module['_xmlSAX2ProcessingInstruction'] = wasmExports['xmlSAX2ProcessingInstruction'])(a0, a1, a2);\nvar _xmlSAX2Comment = Module['_xmlSAX2Comment'] = (a0, a1) => (_xmlSAX2Comment = Module['_xmlSAX2Comment'] = wasmExports['xmlSAX2Comment'])(a0, a1);\nvar _xmlSAX2GetParameterEntity = Module['_xmlSAX2GetParameterEntity'] = (a0, a1) => (_xmlSAX2GetParameterEntity = Module['_xmlSAX2GetParameterEntity'] = wasmExports['xmlSAX2GetParameterEntity'])(a0, a1);\nvar _xmlSAX2CDataBlock = Module['_xmlSAX2CDataBlock'] = (a0, a1, a2) => (_xmlSAX2CDataBlock = Module['_xmlSAX2CDataBlock'] = wasmExports['xmlSAX2CDataBlock'])(a0, a1, a2);\nvar _xmlSAX2ExternalSubset = Module['_xmlSAX2ExternalSubset'] = (a0, a1, a2, a3) => (_xmlSAX2ExternalSubset = Module['_xmlSAX2ExternalSubset'] = wasmExports['xmlSAX2ExternalSubset'])(a0, a1, a2, a3);\nvar _xmlSAX2GetPublicId = Module['_xmlSAX2GetPublicId'] = (a0) => (_xmlSAX2GetPublicId = Module['_xmlSAX2GetPublicId'] = wasmExports['xmlSAX2GetPublicId'])(a0);\nvar _xmlSAX2GetSystemId = Module['_xmlSAX2GetSystemId'] = (a0) => (_xmlSAX2GetSystemId = Module['_xmlSAX2GetSystemId'] = wasmExports['xmlSAX2GetSystemId'])(a0);\nvar _xmlSAX2GetLineNumber = Module['_xmlSAX2GetLineNumber'] = (a0) => (_xmlSAX2GetLineNumber = Module['_xmlSAX2GetLineNumber'] = wasmExports['xmlSAX2GetLineNumber'])(a0);\nvar _xmlSAX2GetColumnNumber = Module['_xmlSAX2GetColumnNumber'] = (a0) => (_xmlSAX2GetColumnNumber = Module['_xmlSAX2GetColumnNumber'] = wasmExports['xmlSAX2GetColumnNumber'])(a0);\nvar _xmlSAX2IgnorableWhitespace = Module['_xmlSAX2IgnorableWhitespace'] = (a0, a1, a2) => (_xmlSAX2IgnorableWhitespace = Module['_xmlSAX2IgnorableWhitespace'] = wasmExports['xmlSAX2IgnorableWhitespace'])(a0, a1, a2);\nvar _xmlHashDefaultDeallocator = Module['_xmlHashDefaultDeallocator'] = (a0, a1) => (_xmlHashDefaultDeallocator = Module['_xmlHashDefaultDeallocator'] = wasmExports['xmlHashDefaultDeallocator'])(a0, a1);\nvar _iconv_open = Module['_iconv_open'] = (a0, a1) => (_iconv_open = Module['_iconv_open'] = wasmExports['iconv_open'])(a0, a1);\nvar _iconv_close = Module['_iconv_close'] = (a0) => (_iconv_close = Module['_iconv_close'] = wasmExports['iconv_close'])(a0);\nvar _iconv = Module['_iconv'] = (a0, a1, a2, a3, a4) => (_iconv = Module['_iconv'] = wasmExports['iconv'])(a0, a1, a2, a3, a4);\nvar _UTF8ToHtml = Module['_UTF8ToHtml'] = (a0, a1, a2, a3) => (_UTF8ToHtml = Module['_UTF8ToHtml'] = wasmExports['UTF8ToHtml'])(a0, a1, a2, a3);\nvar _xmlReadMemory = Module['_xmlReadMemory'] = (a0, a1, a2, a3, a4) => (_xmlReadMemory = Module['_xmlReadMemory'] = wasmExports['xmlReadMemory'])(a0, a1, a2, a3, a4);\nvar _xmlSAX2StartElementNs = Module['_xmlSAX2StartElementNs'] = (a0, a1, a2, a3, a4, a5, a6, a7, a8) => (_xmlSAX2StartElementNs = Module['_xmlSAX2StartElementNs'] = wasmExports['xmlSAX2StartElementNs'])(a0, a1, a2, a3, a4, a5, a6, a7, a8);\nvar _xmlSAX2EndElementNs = Module['_xmlSAX2EndElementNs'] = (a0, a1, a2, a3) => (_xmlSAX2EndElementNs = Module['_xmlSAX2EndElementNs'] = wasmExports['xmlSAX2EndElementNs'])(a0, a1, a2, a3);\nvar ___cxa_atexit = Module['___cxa_atexit'] = (a0, a1, a2) => (___cxa_atexit = Module['___cxa_atexit'] = wasmExports['__cxa_atexit'])(a0, a1, a2);\nvar _xmlDocGetRootElement = Module['_xmlDocGetRootElement'] = (a0) => (_xmlDocGetRootElement = Module['_xmlDocGetRootElement'] = wasmExports['xmlDocGetRootElement'])(a0);\nvar _xmlFileMatch = Module['_xmlFileMatch'] = (a0) => (_xmlFileMatch = Module['_xmlFileMatch'] = wasmExports['xmlFileMatch'])(a0);\nvar _xmlFileOpen = Module['_xmlFileOpen'] = (a0) => (_xmlFileOpen = Module['_xmlFileOpen'] = wasmExports['xmlFileOpen'])(a0);\nvar _xmlFileRead = Module['_xmlFileRead'] = (a0, a1, a2) => (_xmlFileRead = Module['_xmlFileRead'] = wasmExports['xmlFileRead'])(a0, a1, a2);\nvar _xmlFileClose = Module['_xmlFileClose'] = (a0) => (_xmlFileClose = Module['_xmlFileClose'] = wasmExports['xmlFileClose'])(a0);\nvar _gzread = Module['_gzread'] = (a0, a1, a2) => (_gzread = Module['_gzread'] = wasmExports['gzread'])(a0, a1, a2);\nvar _gzclose = Module['_gzclose'] = (a0) => (_gzclose = Module['_gzclose'] = wasmExports['gzclose'])(a0);\nvar _gzdirect = Module['_gzdirect'] = (a0) => (_gzdirect = Module['_gzdirect'] = wasmExports['gzdirect'])(a0);\nvar _gzdopen = Module['_gzdopen'] = (a0, a1) => (_gzdopen = Module['_gzdopen'] = wasmExports['gzdopen'])(a0, a1);\nvar _gzopen = Module['_gzopen'] = (a0, a1) => (_gzopen = Module['_gzopen'] = wasmExports['gzopen'])(a0, a1);\nvar _gzwrite = Module['_gzwrite'] = (a0, a1, a2) => (_gzwrite = Module['_gzwrite'] = wasmExports['gzwrite'])(a0, a1, a2);\nvar _xmlUCSIsCatNd = Module['_xmlUCSIsCatNd'] = (a0) => (_xmlUCSIsCatNd = Module['_xmlUCSIsCatNd'] = wasmExports['xmlUCSIsCatNd'])(a0);\nvar _xmlUCSIsCatP = Module['_xmlUCSIsCatP'] = (a0) => (_xmlUCSIsCatP = Module['_xmlUCSIsCatP'] = wasmExports['xmlUCSIsCatP'])(a0);\nvar _xmlUCSIsCatZ = Module['_xmlUCSIsCatZ'] = (a0) => (_xmlUCSIsCatZ = Module['_xmlUCSIsCatZ'] = wasmExports['xmlUCSIsCatZ'])(a0);\nvar _xmlUCSIsCatC = Module['_xmlUCSIsCatC'] = (a0) => (_xmlUCSIsCatC = Module['_xmlUCSIsCatC'] = wasmExports['xmlUCSIsCatC'])(a0);\nvar _xmlUCSIsCatL = Module['_xmlUCSIsCatL'] = (a0) => (_xmlUCSIsCatL = Module['_xmlUCSIsCatL'] = wasmExports['xmlUCSIsCatL'])(a0);\nvar _xmlUCSIsCatLu = Module['_xmlUCSIsCatLu'] = (a0) => (_xmlUCSIsCatLu = Module['_xmlUCSIsCatLu'] = wasmExports['xmlUCSIsCatLu'])(a0);\nvar _xmlUCSIsCatLl = Module['_xmlUCSIsCatLl'] = (a0) => (_xmlUCSIsCatLl = Module['_xmlUCSIsCatLl'] = wasmExports['xmlUCSIsCatLl'])(a0);\nvar _xmlUCSIsCatLt = Module['_xmlUCSIsCatLt'] = (a0) => (_xmlUCSIsCatLt = Module['_xmlUCSIsCatLt'] = wasmExports['xmlUCSIsCatLt'])(a0);\nvar _xmlUCSIsCatLm = Module['_xmlUCSIsCatLm'] = (a0) => (_xmlUCSIsCatLm = Module['_xmlUCSIsCatLm'] = wasmExports['xmlUCSIsCatLm'])(a0);\nvar _xmlUCSIsCatLo = Module['_xmlUCSIsCatLo'] = (a0) => (_xmlUCSIsCatLo = Module['_xmlUCSIsCatLo'] = wasmExports['xmlUCSIsCatLo'])(a0);\nvar _xmlUCSIsCatM = Module['_xmlUCSIsCatM'] = (a0) => (_xmlUCSIsCatM = Module['_xmlUCSIsCatM'] = wasmExports['xmlUCSIsCatM'])(a0);\nvar _xmlUCSIsCatMn = Module['_xmlUCSIsCatMn'] = (a0) => (_xmlUCSIsCatMn = Module['_xmlUCSIsCatMn'] = wasmExports['xmlUCSIsCatMn'])(a0);\nvar _xmlUCSIsCatMc = Module['_xmlUCSIsCatMc'] = (a0) => (_xmlUCSIsCatMc = Module['_xmlUCSIsCatMc'] = wasmExports['xmlUCSIsCatMc'])(a0);\nvar _xmlUCSIsCatMe = Module['_xmlUCSIsCatMe'] = (a0) => (_xmlUCSIsCatMe = Module['_xmlUCSIsCatMe'] = wasmExports['xmlUCSIsCatMe'])(a0);\nvar _xmlUCSIsCatN = Module['_xmlUCSIsCatN'] = (a0) => (_xmlUCSIsCatN = Module['_xmlUCSIsCatN'] = wasmExports['xmlUCSIsCatN'])(a0);\nvar _xmlUCSIsCatNl = Module['_xmlUCSIsCatNl'] = (a0) => (_xmlUCSIsCatNl = Module['_xmlUCSIsCatNl'] = wasmExports['xmlUCSIsCatNl'])(a0);\nvar _xmlUCSIsCatNo = Module['_xmlUCSIsCatNo'] = (a0) => (_xmlUCSIsCatNo = Module['_xmlUCSIsCatNo'] = wasmExports['xmlUCSIsCatNo'])(a0);\nvar _xmlUCSIsCatPc = Module['_xmlUCSIsCatPc'] = (a0) => (_xmlUCSIsCatPc = Module['_xmlUCSIsCatPc'] = wasmExports['xmlUCSIsCatPc'])(a0);\nvar _xmlUCSIsCatPd = Module['_xmlUCSIsCatPd'] = (a0) => (_xmlUCSIsCatPd = Module['_xmlUCSIsCatPd'] = wasmExports['xmlUCSIsCatPd'])(a0);\nvar _xmlUCSIsCatPs = Module['_xmlUCSIsCatPs'] = (a0) => (_xmlUCSIsCatPs = Module['_xmlUCSIsCatPs'] = wasmExports['xmlUCSIsCatPs'])(a0);\nvar _xmlUCSIsCatPe = Module['_xmlUCSIsCatPe'] = (a0) => (_xmlUCSIsCatPe = Module['_xmlUCSIsCatPe'] = wasmExports['xmlUCSIsCatPe'])(a0);\nvar _xmlUCSIsCatPi = Module['_xmlUCSIsCatPi'] = (a0) => (_xmlUCSIsCatPi = Module['_xmlUCSIsCatPi'] = wasmExports['xmlUCSIsCatPi'])(a0);\nvar _xmlUCSIsCatPf = Module['_xmlUCSIsCatPf'] = (a0) => (_xmlUCSIsCatPf = Module['_xmlUCSIsCatPf'] = wasmExports['xmlUCSIsCatPf'])(a0);\nvar _xmlUCSIsCatPo = Module['_xmlUCSIsCatPo'] = (a0) => (_xmlUCSIsCatPo = Module['_xmlUCSIsCatPo'] = wasmExports['xmlUCSIsCatPo'])(a0);\nvar _xmlUCSIsCatZs = Module['_xmlUCSIsCatZs'] = (a0) => (_xmlUCSIsCatZs = Module['_xmlUCSIsCatZs'] = wasmExports['xmlUCSIsCatZs'])(a0);\nvar _xmlUCSIsCatZl = Module['_xmlUCSIsCatZl'] = (a0) => (_xmlUCSIsCatZl = Module['_xmlUCSIsCatZl'] = wasmExports['xmlUCSIsCatZl'])(a0);\nvar _xmlUCSIsCatZp = Module['_xmlUCSIsCatZp'] = (a0) => (_xmlUCSIsCatZp = Module['_xmlUCSIsCatZp'] = wasmExports['xmlUCSIsCatZp'])(a0);\nvar _xmlUCSIsCatS = Module['_xmlUCSIsCatS'] = (a0) => (_xmlUCSIsCatS = Module['_xmlUCSIsCatS'] = wasmExports['xmlUCSIsCatS'])(a0);\nvar _xmlUCSIsCatSm = Module['_xmlUCSIsCatSm'] = (a0) => (_xmlUCSIsCatSm = Module['_xmlUCSIsCatSm'] = wasmExports['xmlUCSIsCatSm'])(a0);\nvar _xmlUCSIsCatSc = Module['_xmlUCSIsCatSc'] = (a0) => (_xmlUCSIsCatSc = Module['_xmlUCSIsCatSc'] = wasmExports['xmlUCSIsCatSc'])(a0);\nvar _xmlUCSIsCatSk = Module['_xmlUCSIsCatSk'] = (a0) => (_xmlUCSIsCatSk = Module['_xmlUCSIsCatSk'] = wasmExports['xmlUCSIsCatSk'])(a0);\nvar _xmlUCSIsCatSo = Module['_xmlUCSIsCatSo'] = (a0) => (_xmlUCSIsCatSo = Module['_xmlUCSIsCatSo'] = wasmExports['xmlUCSIsCatSo'])(a0);\nvar _xmlUCSIsCatCc = Module['_xmlUCSIsCatCc'] = (a0) => (_xmlUCSIsCatCc = Module['_xmlUCSIsCatCc'] = wasmExports['xmlUCSIsCatCc'])(a0);\nvar _xmlUCSIsCatCf = Module['_xmlUCSIsCatCf'] = (a0) => (_xmlUCSIsCatCf = Module['_xmlUCSIsCatCf'] = wasmExports['xmlUCSIsCatCf'])(a0);\nvar _xmlUCSIsCatCo = Module['_xmlUCSIsCatCo'] = (a0) => (_xmlUCSIsCatCo = Module['_xmlUCSIsCatCo'] = wasmExports['xmlUCSIsCatCo'])(a0);\nvar _xmlUCSIsAegeanNumbers = Module['_xmlUCSIsAegeanNumbers'] = (a0) => (_xmlUCSIsAegeanNumbers = Module['_xmlUCSIsAegeanNumbers'] = wasmExports['xmlUCSIsAegeanNumbers'])(a0);\nvar _xmlUCSIsAlphabeticPresentationForms = Module['_xmlUCSIsAlphabeticPresentationForms'] = (a0) => (_xmlUCSIsAlphabeticPresentationForms = Module['_xmlUCSIsAlphabeticPresentationForms'] = wasmExports['xmlUCSIsAlphabeticPresentationForms'])(a0);\nvar _xmlUCSIsArabic = Module['_xmlUCSIsArabic'] = (a0) => (_xmlUCSIsArabic = Module['_xmlUCSIsArabic'] = wasmExports['xmlUCSIsArabic'])(a0);\nvar _xmlUCSIsArabicPresentationFormsA = Module['_xmlUCSIsArabicPresentationFormsA'] = (a0) => (_xmlUCSIsArabicPresentationFormsA = Module['_xmlUCSIsArabicPresentationFormsA'] = wasmExports['xmlUCSIsArabicPresentationFormsA'])(a0);\nvar _xmlUCSIsArabicPresentationFormsB = Module['_xmlUCSIsArabicPresentationFormsB'] = (a0) => (_xmlUCSIsArabicPresentationFormsB = Module['_xmlUCSIsArabicPresentationFormsB'] = wasmExports['xmlUCSIsArabicPresentationFormsB'])(a0);\nvar _xmlUCSIsArmenian = Module['_xmlUCSIsArmenian'] = (a0) => (_xmlUCSIsArmenian = Module['_xmlUCSIsArmenian'] = wasmExports['xmlUCSIsArmenian'])(a0);\nvar _xmlUCSIsArrows = Module['_xmlUCSIsArrows'] = (a0) => (_xmlUCSIsArrows = Module['_xmlUCSIsArrows'] = wasmExports['xmlUCSIsArrows'])(a0);\nvar _xmlUCSIsBasicLatin = Module['_xmlUCSIsBasicLatin'] = (a0) => (_xmlUCSIsBasicLatin = Module['_xmlUCSIsBasicLatin'] = wasmExports['xmlUCSIsBasicLatin'])(a0);\nvar _xmlUCSIsBengali = Module['_xmlUCSIsBengali'] = (a0) => (_xmlUCSIsBengali = Module['_xmlUCSIsBengali'] = wasmExports['xmlUCSIsBengali'])(a0);\nvar _xmlUCSIsBlockElements = Module['_xmlUCSIsBlockElements'] = (a0) => (_xmlUCSIsBlockElements = Module['_xmlUCSIsBlockElements'] = wasmExports['xmlUCSIsBlockElements'])(a0);\nvar _xmlUCSIsBopomofo = Module['_xmlUCSIsBopomofo'] = (a0) => (_xmlUCSIsBopomofo = Module['_xmlUCSIsBopomofo'] = wasmExports['xmlUCSIsBopomofo'])(a0);\nvar _xmlUCSIsBopomofoExtended = Module['_xmlUCSIsBopomofoExtended'] = (a0) => (_xmlUCSIsBopomofoExtended = Module['_xmlUCSIsBopomofoExtended'] = wasmExports['xmlUCSIsBopomofoExtended'])(a0);\nvar _xmlUCSIsBoxDrawing = Module['_xmlUCSIsBoxDrawing'] = (a0) => (_xmlUCSIsBoxDrawing = Module['_xmlUCSIsBoxDrawing'] = wasmExports['xmlUCSIsBoxDrawing'])(a0);\nvar _xmlUCSIsBraillePatterns = Module['_xmlUCSIsBraillePatterns'] = (a0) => (_xmlUCSIsBraillePatterns = Module['_xmlUCSIsBraillePatterns'] = wasmExports['xmlUCSIsBraillePatterns'])(a0);\nvar _xmlUCSIsBuhid = Module['_xmlUCSIsBuhid'] = (a0) => (_xmlUCSIsBuhid = Module['_xmlUCSIsBuhid'] = wasmExports['xmlUCSIsBuhid'])(a0);\nvar _xmlUCSIsByzantineMusicalSymbols = Module['_xmlUCSIsByzantineMusicalSymbols'] = (a0) => (_xmlUCSIsByzantineMusicalSymbols = Module['_xmlUCSIsByzantineMusicalSymbols'] = wasmExports['xmlUCSIsByzantineMusicalSymbols'])(a0);\nvar _xmlUCSIsCJKCompatibility = Module['_xmlUCSIsCJKCompatibility'] = (a0) => (_xmlUCSIsCJKCompatibility = Module['_xmlUCSIsCJKCompatibility'] = wasmExports['xmlUCSIsCJKCompatibility'])(a0);\nvar _xmlUCSIsCJKCompatibilityForms = Module['_xmlUCSIsCJKCompatibilityForms'] = (a0) => (_xmlUCSIsCJKCompatibilityForms = Module['_xmlUCSIsCJKCompatibilityForms'] = wasmExports['xmlUCSIsCJKCompatibilityForms'])(a0);\nvar _xmlUCSIsCJKCompatibilityIdeographs = Module['_xmlUCSIsCJKCompatibilityIdeographs'] = (a0) => (_xmlUCSIsCJKCompatibilityIdeographs = Module['_xmlUCSIsCJKCompatibilityIdeographs'] = wasmExports['xmlUCSIsCJKCompatibilityIdeographs'])(a0);\nvar _xmlUCSIsCJKCompatibilityIdeographsSupplement = Module['_xmlUCSIsCJKCompatibilityIdeographsSupplement'] = (a0) => (_xmlUCSIsCJKCompatibilityIdeographsSupplement = Module['_xmlUCSIsCJKCompatibilityIdeographsSupplement'] = wasmExports['xmlUCSIsCJKCompatibilityIdeographsSupplement'])(a0);\nvar _xmlUCSIsCJKRadicalsSupplement = Module['_xmlUCSIsCJKRadicalsSupplement'] = (a0) => (_xmlUCSIsCJKRadicalsSupplement = Module['_xmlUCSIsCJKRadicalsSupplement'] = wasmExports['xmlUCSIsCJKRadicalsSupplement'])(a0);\nvar _xmlUCSIsCJKSymbolsandPunctuation = Module['_xmlUCSIsCJKSymbolsandPunctuation'] = (a0) => (_xmlUCSIsCJKSymbolsandPunctuation = Module['_xmlUCSIsCJKSymbolsandPunctuation'] = wasmExports['xmlUCSIsCJKSymbolsandPunctuation'])(a0);\nvar _xmlUCSIsCJKUnifiedIdeographs = Module['_xmlUCSIsCJKUnifiedIdeographs'] = (a0) => (_xmlUCSIsCJKUnifiedIdeographs = Module['_xmlUCSIsCJKUnifiedIdeographs'] = wasmExports['xmlUCSIsCJKUnifiedIdeographs'])(a0);\nvar _xmlUCSIsCJKUnifiedIdeographsExtensionA = Module['_xmlUCSIsCJKUnifiedIdeographsExtensionA'] = (a0) => (_xmlUCSIsCJKUnifiedIdeographsExtensionA = Module['_xmlUCSIsCJKUnifiedIdeographsExtensionA'] = wasmExports['xmlUCSIsCJKUnifiedIdeographsExtensionA'])(a0);\nvar _xmlUCSIsCJKUnifiedIdeographsExtensionB = Module['_xmlUCSIsCJKUnifiedIdeographsExtensionB'] = (a0) => (_xmlUCSIsCJKUnifiedIdeographsExtensionB = Module['_xmlUCSIsCJKUnifiedIdeographsExtensionB'] = wasmExports['xmlUCSIsCJKUnifiedIdeographsExtensionB'])(a0);\nvar _xmlUCSIsCherokee = Module['_xmlUCSIsCherokee'] = (a0) => (_xmlUCSIsCherokee = Module['_xmlUCSIsCherokee'] = wasmExports['xmlUCSIsCherokee'])(a0);\nvar _xmlUCSIsCombiningDiacriticalMarks = Module['_xmlUCSIsCombiningDiacriticalMarks'] = (a0) => (_xmlUCSIsCombiningDiacriticalMarks = Module['_xmlUCSIsCombiningDiacriticalMarks'] = wasmExports['xmlUCSIsCombiningDiacriticalMarks'])(a0);\nvar _xmlUCSIsCombiningDiacriticalMarksforSymbols = Module['_xmlUCSIsCombiningDiacriticalMarksforSymbols'] = (a0) => (_xmlUCSIsCombiningDiacriticalMarksforSymbols = Module['_xmlUCSIsCombiningDiacriticalMarksforSymbols'] = wasmExports['xmlUCSIsCombiningDiacriticalMarksforSymbols'])(a0);\nvar _xmlUCSIsCombiningHalfMarks = Module['_xmlUCSIsCombiningHalfMarks'] = (a0) => (_xmlUCSIsCombiningHalfMarks = Module['_xmlUCSIsCombiningHalfMarks'] = wasmExports['xmlUCSIsCombiningHalfMarks'])(a0);\nvar _xmlUCSIsCombiningMarksforSymbols = Module['_xmlUCSIsCombiningMarksforSymbols'] = (a0) => (_xmlUCSIsCombiningMarksforSymbols = Module['_xmlUCSIsCombiningMarksforSymbols'] = wasmExports['xmlUCSIsCombiningMarksforSymbols'])(a0);\nvar _xmlUCSIsControlPictures = Module['_xmlUCSIsControlPictures'] = (a0) => (_xmlUCSIsControlPictures = Module['_xmlUCSIsControlPictures'] = wasmExports['xmlUCSIsControlPictures'])(a0);\nvar _xmlUCSIsCurrencySymbols = Module['_xmlUCSIsCurrencySymbols'] = (a0) => (_xmlUCSIsCurrencySymbols = Module['_xmlUCSIsCurrencySymbols'] = wasmExports['xmlUCSIsCurrencySymbols'])(a0);\nvar _xmlUCSIsCypriotSyllabary = Module['_xmlUCSIsCypriotSyllabary'] = (a0) => (_xmlUCSIsCypriotSyllabary = Module['_xmlUCSIsCypriotSyllabary'] = wasmExports['xmlUCSIsCypriotSyllabary'])(a0);\nvar _xmlUCSIsCyrillic = Module['_xmlUCSIsCyrillic'] = (a0) => (_xmlUCSIsCyrillic = Module['_xmlUCSIsCyrillic'] = wasmExports['xmlUCSIsCyrillic'])(a0);\nvar _xmlUCSIsCyrillicSupplement = Module['_xmlUCSIsCyrillicSupplement'] = (a0) => (_xmlUCSIsCyrillicSupplement = Module['_xmlUCSIsCyrillicSupplement'] = wasmExports['xmlUCSIsCyrillicSupplement'])(a0);\nvar _xmlUCSIsDeseret = Module['_xmlUCSIsDeseret'] = (a0) => (_xmlUCSIsDeseret = Module['_xmlUCSIsDeseret'] = wasmExports['xmlUCSIsDeseret'])(a0);\nvar _xmlUCSIsDevanagari = Module['_xmlUCSIsDevanagari'] = (a0) => (_xmlUCSIsDevanagari = Module['_xmlUCSIsDevanagari'] = wasmExports['xmlUCSIsDevanagari'])(a0);\nvar _xmlUCSIsDingbats = Module['_xmlUCSIsDingbats'] = (a0) => (_xmlUCSIsDingbats = Module['_xmlUCSIsDingbats'] = wasmExports['xmlUCSIsDingbats'])(a0);\nvar _xmlUCSIsEnclosedAlphanumerics = Module['_xmlUCSIsEnclosedAlphanumerics'] = (a0) => (_xmlUCSIsEnclosedAlphanumerics = Module['_xmlUCSIsEnclosedAlphanumerics'] = wasmExports['xmlUCSIsEnclosedAlphanumerics'])(a0);\nvar _xmlUCSIsEnclosedCJKLettersandMonths = Module['_xmlUCSIsEnclosedCJKLettersandMonths'] = (a0) => (_xmlUCSIsEnclosedCJKLettersandMonths = Module['_xmlUCSIsEnclosedCJKLettersandMonths'] = wasmExports['xmlUCSIsEnclosedCJKLettersandMonths'])(a0);\nvar _xmlUCSIsEthiopic = Module['_xmlUCSIsEthiopic'] = (a0) => (_xmlUCSIsEthiopic = Module['_xmlUCSIsEthiopic'] = wasmExports['xmlUCSIsEthiopic'])(a0);\nvar _xmlUCSIsGeneralPunctuation = Module['_xmlUCSIsGeneralPunctuation'] = (a0) => (_xmlUCSIsGeneralPunctuation = Module['_xmlUCSIsGeneralPunctuation'] = wasmExports['xmlUCSIsGeneralPunctuation'])(a0);\nvar _xmlUCSIsGeometricShapes = Module['_xmlUCSIsGeometricShapes'] = (a0) => (_xmlUCSIsGeometricShapes = Module['_xmlUCSIsGeometricShapes'] = wasmExports['xmlUCSIsGeometricShapes'])(a0);\nvar _xmlUCSIsGeorgian = Module['_xmlUCSIsGeorgian'] = (a0) => (_xmlUCSIsGeorgian = Module['_xmlUCSIsGeorgian'] = wasmExports['xmlUCSIsGeorgian'])(a0);\nvar _xmlUCSIsGothic = Module['_xmlUCSIsGothic'] = (a0) => (_xmlUCSIsGothic = Module['_xmlUCSIsGothic'] = wasmExports['xmlUCSIsGothic'])(a0);\nvar _xmlUCSIsGreek = Module['_xmlUCSIsGreek'] = (a0) => (_xmlUCSIsGreek = Module['_xmlUCSIsGreek'] = wasmExports['xmlUCSIsGreek'])(a0);\nvar _xmlUCSIsGreekExtended = Module['_xmlUCSIsGreekExtended'] = (a0) => (_xmlUCSIsGreekExtended = Module['_xmlUCSIsGreekExtended'] = wasmExports['xmlUCSIsGreekExtended'])(a0);\nvar _xmlUCSIsGreekandCoptic = Module['_xmlUCSIsGreekandCoptic'] = (a0) => (_xmlUCSIsGreekandCoptic = Module['_xmlUCSIsGreekandCoptic'] = wasmExports['xmlUCSIsGreekandCoptic'])(a0);\nvar _xmlUCSIsGujarati = Module['_xmlUCSIsGujarati'] = (a0) => (_xmlUCSIsGujarati = Module['_xmlUCSIsGujarati'] = wasmExports['xmlUCSIsGujarati'])(a0);\nvar _xmlUCSIsGurmukhi = Module['_xmlUCSIsGurmukhi'] = (a0) => (_xmlUCSIsGurmukhi = Module['_xmlUCSIsGurmukhi'] = wasmExports['xmlUCSIsGurmukhi'])(a0);\nvar _xmlUCSIsHalfwidthandFullwidthForms = Module['_xmlUCSIsHalfwidthandFullwidthForms'] = (a0) => (_xmlUCSIsHalfwidthandFullwidthForms = Module['_xmlUCSIsHalfwidthandFullwidthForms'] = wasmExports['xmlUCSIsHalfwidthandFullwidthForms'])(a0);\nvar _xmlUCSIsHangulCompatibilityJamo = Module['_xmlUCSIsHangulCompatibilityJamo'] = (a0) => (_xmlUCSIsHangulCompatibilityJamo = Module['_xmlUCSIsHangulCompatibilityJamo'] = wasmExports['xmlUCSIsHangulCompatibilityJamo'])(a0);\nvar _xmlUCSIsHangulJamo = Module['_xmlUCSIsHangulJamo'] = (a0) => (_xmlUCSIsHangulJamo = Module['_xmlUCSIsHangulJamo'] = wasmExports['xmlUCSIsHangulJamo'])(a0);\nvar _xmlUCSIsHangulSyllables = Module['_xmlUCSIsHangulSyllables'] = (a0) => (_xmlUCSIsHangulSyllables = Module['_xmlUCSIsHangulSyllables'] = wasmExports['xmlUCSIsHangulSyllables'])(a0);\nvar _xmlUCSIsHanunoo = Module['_xmlUCSIsHanunoo'] = (a0) => (_xmlUCSIsHanunoo = Module['_xmlUCSIsHanunoo'] = wasmExports['xmlUCSIsHanunoo'])(a0);\nvar _xmlUCSIsHebrew = Module['_xmlUCSIsHebrew'] = (a0) => (_xmlUCSIsHebrew = Module['_xmlUCSIsHebrew'] = wasmExports['xmlUCSIsHebrew'])(a0);\nvar _xmlUCSIsHighPrivateUseSurrogates = Module['_xmlUCSIsHighPrivateUseSurrogates'] = (a0) => (_xmlUCSIsHighPrivateUseSurrogates = Module['_xmlUCSIsHighPrivateUseSurrogates'] = wasmExports['xmlUCSIsHighPrivateUseSurrogates'])(a0);\nvar _xmlUCSIsHighSurrogates = Module['_xmlUCSIsHighSurrogates'] = (a0) => (_xmlUCSIsHighSurrogates = Module['_xmlUCSIsHighSurrogates'] = wasmExports['xmlUCSIsHighSurrogates'])(a0);\nvar _xmlUCSIsHiragana = Module['_xmlUCSIsHiragana'] = (a0) => (_xmlUCSIsHiragana = Module['_xmlUCSIsHiragana'] = wasmExports['xmlUCSIsHiragana'])(a0);\nvar _xmlUCSIsIPAExtensions = Module['_xmlUCSIsIPAExtensions'] = (a0) => (_xmlUCSIsIPAExtensions = Module['_xmlUCSIsIPAExtensions'] = wasmExports['xmlUCSIsIPAExtensions'])(a0);\nvar _xmlUCSIsIdeographicDescriptionCharacters = Module['_xmlUCSIsIdeographicDescriptionCharacters'] = (a0) => (_xmlUCSIsIdeographicDescriptionCharacters = Module['_xmlUCSIsIdeographicDescriptionCharacters'] = wasmExports['xmlUCSIsIdeographicDescriptionCharacters'])(a0);\nvar _xmlUCSIsKanbun = Module['_xmlUCSIsKanbun'] = (a0) => (_xmlUCSIsKanbun = Module['_xmlUCSIsKanbun'] = wasmExports['xmlUCSIsKanbun'])(a0);\nvar _xmlUCSIsKangxiRadicals = Module['_xmlUCSIsKangxiRadicals'] = (a0) => (_xmlUCSIsKangxiRadicals = Module['_xmlUCSIsKangxiRadicals'] = wasmExports['xmlUCSIsKangxiRadicals'])(a0);\nvar _xmlUCSIsKannada = Module['_xmlUCSIsKannada'] = (a0) => (_xmlUCSIsKannada = Module['_xmlUCSIsKannada'] = wasmExports['xmlUCSIsKannada'])(a0);\nvar _xmlUCSIsKatakana = Module['_xmlUCSIsKatakana'] = (a0) => (_xmlUCSIsKatakana = Module['_xmlUCSIsKatakana'] = wasmExports['xmlUCSIsKatakana'])(a0);\nvar _xmlUCSIsKatakanaPhoneticExtensions = Module['_xmlUCSIsKatakanaPhoneticExtensions'] = (a0) => (_xmlUCSIsKatakanaPhoneticExtensions = Module['_xmlUCSIsKatakanaPhoneticExtensions'] = wasmExports['xmlUCSIsKatakanaPhoneticExtensions'])(a0);\nvar _xmlUCSIsKhmer = Module['_xmlUCSIsKhmer'] = (a0) => (_xmlUCSIsKhmer = Module['_xmlUCSIsKhmer'] = wasmExports['xmlUCSIsKhmer'])(a0);\nvar _xmlUCSIsKhmerSymbols = Module['_xmlUCSIsKhmerSymbols'] = (a0) => (_xmlUCSIsKhmerSymbols = Module['_xmlUCSIsKhmerSymbols'] = wasmExports['xmlUCSIsKhmerSymbols'])(a0);\nvar _xmlUCSIsLao = Module['_xmlUCSIsLao'] = (a0) => (_xmlUCSIsLao = Module['_xmlUCSIsLao'] = wasmExports['xmlUCSIsLao'])(a0);\nvar _xmlUCSIsLatin1Supplement = Module['_xmlUCSIsLatin1Supplement'] = (a0) => (_xmlUCSIsLatin1Supplement = Module['_xmlUCSIsLatin1Supplement'] = wasmExports['xmlUCSIsLatin1Supplement'])(a0);\nvar _xmlUCSIsLatinExtendedA = Module['_xmlUCSIsLatinExtendedA'] = (a0) => (_xmlUCSIsLatinExtendedA = Module['_xmlUCSIsLatinExtendedA'] = wasmExports['xmlUCSIsLatinExtendedA'])(a0);\nvar _xmlUCSIsLatinExtendedB = Module['_xmlUCSIsLatinExtendedB'] = (a0) => (_xmlUCSIsLatinExtendedB = Module['_xmlUCSIsLatinExtendedB'] = wasmExports['xmlUCSIsLatinExtendedB'])(a0);\nvar _xmlUCSIsLatinExtendedAdditional = Module['_xmlUCSIsLatinExtendedAdditional'] = (a0) => (_xmlUCSIsLatinExtendedAdditional = Module['_xmlUCSIsLatinExtendedAdditional'] = wasmExports['xmlUCSIsLatinExtendedAdditional'])(a0);\nvar _xmlUCSIsLetterlikeSymbols = Module['_xmlUCSIsLetterlikeSymbols'] = (a0) => (_xmlUCSIsLetterlikeSymbols = Module['_xmlUCSIsLetterlikeSymbols'] = wasmExports['xmlUCSIsLetterlikeSymbols'])(a0);\nvar _xmlUCSIsLimbu = Module['_xmlUCSIsLimbu'] = (a0) => (_xmlUCSIsLimbu = Module['_xmlUCSIsLimbu'] = wasmExports['xmlUCSIsLimbu'])(a0);\nvar _xmlUCSIsLinearBIdeograms = Module['_xmlUCSIsLinearBIdeograms'] = (a0) => (_xmlUCSIsLinearBIdeograms = Module['_xmlUCSIsLinearBIdeograms'] = wasmExports['xmlUCSIsLinearBIdeograms'])(a0);\nvar _xmlUCSIsLinearBSyllabary = Module['_xmlUCSIsLinearBSyllabary'] = (a0) => (_xmlUCSIsLinearBSyllabary = Module['_xmlUCSIsLinearBSyllabary'] = wasmExports['xmlUCSIsLinearBSyllabary'])(a0);\nvar _xmlUCSIsLowSurrogates = Module['_xmlUCSIsLowSurrogates'] = (a0) => (_xmlUCSIsLowSurrogates = Module['_xmlUCSIsLowSurrogates'] = wasmExports['xmlUCSIsLowSurrogates'])(a0);\nvar _xmlUCSIsMalayalam = Module['_xmlUCSIsMalayalam'] = (a0) => (_xmlUCSIsMalayalam = Module['_xmlUCSIsMalayalam'] = wasmExports['xmlUCSIsMalayalam'])(a0);\nvar _xmlUCSIsMathematicalAlphanumericSymbols = Module['_xmlUCSIsMathematicalAlphanumericSymbols'] = (a0) => (_xmlUCSIsMathematicalAlphanumericSymbols = Module['_xmlUCSIsMathematicalAlphanumericSymbols'] = wasmExports['xmlUCSIsMathematicalAlphanumericSymbols'])(a0);\nvar _xmlUCSIsMathematicalOperators = Module['_xmlUCSIsMathematicalOperators'] = (a0) => (_xmlUCSIsMathematicalOperators = Module['_xmlUCSIsMathematicalOperators'] = wasmExports['xmlUCSIsMathematicalOperators'])(a0);\nvar _xmlUCSIsMiscellaneousMathematicalSymbolsA = Module['_xmlUCSIsMiscellaneousMathematicalSymbolsA'] = (a0) => (_xmlUCSIsMiscellaneousMathematicalSymbolsA = Module['_xmlUCSIsMiscellaneousMathematicalSymbolsA'] = wasmExports['xmlUCSIsMiscellaneousMathematicalSymbolsA'])(a0);\nvar _xmlUCSIsMiscellaneousMathematicalSymbolsB = Module['_xmlUCSIsMiscellaneousMathematicalSymbolsB'] = (a0) => (_xmlUCSIsMiscellaneousMathematicalSymbolsB = Module['_xmlUCSIsMiscellaneousMathematicalSymbolsB'] = wasmExports['xmlUCSIsMiscellaneousMathematicalSymbolsB'])(a0);\nvar _xmlUCSIsMiscellaneousSymbols = Module['_xmlUCSIsMiscellaneousSymbols'] = (a0) => (_xmlUCSIsMiscellaneousSymbols = Module['_xmlUCSIsMiscellaneousSymbols'] = wasmExports['xmlUCSIsMiscellaneousSymbols'])(a0);\nvar _xmlUCSIsMiscellaneousSymbolsandArrows = Module['_xmlUCSIsMiscellaneousSymbolsandArrows'] = (a0) => (_xmlUCSIsMiscellaneousSymbolsandArrows = Module['_xmlUCSIsMiscellaneousSymbolsandArrows'] = wasmExports['xmlUCSIsMiscellaneousSymbolsandArrows'])(a0);\nvar _xmlUCSIsMiscellaneousTechnical = Module['_xmlUCSIsMiscellaneousTechnical'] = (a0) => (_xmlUCSIsMiscellaneousTechnical = Module['_xmlUCSIsMiscellaneousTechnical'] = wasmExports['xmlUCSIsMiscellaneousTechnical'])(a0);\nvar _xmlUCSIsMongolian = Module['_xmlUCSIsMongolian'] = (a0) => (_xmlUCSIsMongolian = Module['_xmlUCSIsMongolian'] = wasmExports['xmlUCSIsMongolian'])(a0);\nvar _xmlUCSIsMusicalSymbols = Module['_xmlUCSIsMusicalSymbols'] = (a0) => (_xmlUCSIsMusicalSymbols = Module['_xmlUCSIsMusicalSymbols'] = wasmExports['xmlUCSIsMusicalSymbols'])(a0);\nvar _xmlUCSIsMyanmar = Module['_xmlUCSIsMyanmar'] = (a0) => (_xmlUCSIsMyanmar = Module['_xmlUCSIsMyanmar'] = wasmExports['xmlUCSIsMyanmar'])(a0);\nvar _xmlUCSIsNumberForms = Module['_xmlUCSIsNumberForms'] = (a0) => (_xmlUCSIsNumberForms = Module['_xmlUCSIsNumberForms'] = wasmExports['xmlUCSIsNumberForms'])(a0);\nvar _xmlUCSIsOgham = Module['_xmlUCSIsOgham'] = (a0) => (_xmlUCSIsOgham = Module['_xmlUCSIsOgham'] = wasmExports['xmlUCSIsOgham'])(a0);\nvar _xmlUCSIsOldItalic = Module['_xmlUCSIsOldItalic'] = (a0) => (_xmlUCSIsOldItalic = Module['_xmlUCSIsOldItalic'] = wasmExports['xmlUCSIsOldItalic'])(a0);\nvar _xmlUCSIsOpticalCharacterRecognition = Module['_xmlUCSIsOpticalCharacterRecognition'] = (a0) => (_xmlUCSIsOpticalCharacterRecognition = Module['_xmlUCSIsOpticalCharacterRecognition'] = wasmExports['xmlUCSIsOpticalCharacterRecognition'])(a0);\nvar _xmlUCSIsOriya = Module['_xmlUCSIsOriya'] = (a0) => (_xmlUCSIsOriya = Module['_xmlUCSIsOriya'] = wasmExports['xmlUCSIsOriya'])(a0);\nvar _xmlUCSIsOsmanya = Module['_xmlUCSIsOsmanya'] = (a0) => (_xmlUCSIsOsmanya = Module['_xmlUCSIsOsmanya'] = wasmExports['xmlUCSIsOsmanya'])(a0);\nvar _xmlUCSIsPhoneticExtensions = Module['_xmlUCSIsPhoneticExtensions'] = (a0) => (_xmlUCSIsPhoneticExtensions = Module['_xmlUCSIsPhoneticExtensions'] = wasmExports['xmlUCSIsPhoneticExtensions'])(a0);\nvar _xmlUCSIsPrivateUse = Module['_xmlUCSIsPrivateUse'] = (a0) => (_xmlUCSIsPrivateUse = Module['_xmlUCSIsPrivateUse'] = wasmExports['xmlUCSIsPrivateUse'])(a0);\nvar _xmlUCSIsPrivateUseArea = Module['_xmlUCSIsPrivateUseArea'] = (a0) => (_xmlUCSIsPrivateUseArea = Module['_xmlUCSIsPrivateUseArea'] = wasmExports['xmlUCSIsPrivateUseArea'])(a0);\nvar _xmlUCSIsRunic = Module['_xmlUCSIsRunic'] = (a0) => (_xmlUCSIsRunic = Module['_xmlUCSIsRunic'] = wasmExports['xmlUCSIsRunic'])(a0);\nvar _xmlUCSIsShavian = Module['_xmlUCSIsShavian'] = (a0) => (_xmlUCSIsShavian = Module['_xmlUCSIsShavian'] = wasmExports['xmlUCSIsShavian'])(a0);\nvar _xmlUCSIsSinhala = Module['_xmlUCSIsSinhala'] = (a0) => (_xmlUCSIsSinhala = Module['_xmlUCSIsSinhala'] = wasmExports['xmlUCSIsSinhala'])(a0);\nvar _xmlUCSIsSmallFormVariants = Module['_xmlUCSIsSmallFormVariants'] = (a0) => (_xmlUCSIsSmallFormVariants = Module['_xmlUCSIsSmallFormVariants'] = wasmExports['xmlUCSIsSmallFormVariants'])(a0);\nvar _xmlUCSIsSpacingModifierLetters = Module['_xmlUCSIsSpacingModifierLetters'] = (a0) => (_xmlUCSIsSpacingModifierLetters = Module['_xmlUCSIsSpacingModifierLetters'] = wasmExports['xmlUCSIsSpacingModifierLetters'])(a0);\nvar _xmlUCSIsSpecials = Module['_xmlUCSIsSpecials'] = (a0) => (_xmlUCSIsSpecials = Module['_xmlUCSIsSpecials'] = wasmExports['xmlUCSIsSpecials'])(a0);\nvar _xmlUCSIsSuperscriptsandSubscripts = Module['_xmlUCSIsSuperscriptsandSubscripts'] = (a0) => (_xmlUCSIsSuperscriptsandSubscripts = Module['_xmlUCSIsSuperscriptsandSubscripts'] = wasmExports['xmlUCSIsSuperscriptsandSubscripts'])(a0);\nvar _xmlUCSIsSupplementalArrowsA = Module['_xmlUCSIsSupplementalArrowsA'] = (a0) => (_xmlUCSIsSupplementalArrowsA = Module['_xmlUCSIsSupplementalArrowsA'] = wasmExports['xmlUCSIsSupplementalArrowsA'])(a0);\nvar _xmlUCSIsSupplementalArrowsB = Module['_xmlUCSIsSupplementalArrowsB'] = (a0) => (_xmlUCSIsSupplementalArrowsB = Module['_xmlUCSIsSupplementalArrowsB'] = wasmExports['xmlUCSIsSupplementalArrowsB'])(a0);\nvar _xmlUCSIsSupplementalMathematicalOperators = Module['_xmlUCSIsSupplementalMathematicalOperators'] = (a0) => (_xmlUCSIsSupplementalMathematicalOperators = Module['_xmlUCSIsSupplementalMathematicalOperators'] = wasmExports['xmlUCSIsSupplementalMathematicalOperators'])(a0);\nvar _xmlUCSIsSupplementaryPrivateUseAreaA = Module['_xmlUCSIsSupplementaryPrivateUseAreaA'] = (a0) => (_xmlUCSIsSupplementaryPrivateUseAreaA = Module['_xmlUCSIsSupplementaryPrivateUseAreaA'] = wasmExports['xmlUCSIsSupplementaryPrivateUseAreaA'])(a0);\nvar _xmlUCSIsSupplementaryPrivateUseAreaB = Module['_xmlUCSIsSupplementaryPrivateUseAreaB'] = (a0) => (_xmlUCSIsSupplementaryPrivateUseAreaB = Module['_xmlUCSIsSupplementaryPrivateUseAreaB'] = wasmExports['xmlUCSIsSupplementaryPrivateUseAreaB'])(a0);\nvar _xmlUCSIsSyriac = Module['_xmlUCSIsSyriac'] = (a0) => (_xmlUCSIsSyriac = Module['_xmlUCSIsSyriac'] = wasmExports['xmlUCSIsSyriac'])(a0);\nvar _xmlUCSIsTagalog = Module['_xmlUCSIsTagalog'] = (a0) => (_xmlUCSIsTagalog = Module['_xmlUCSIsTagalog'] = wasmExports['xmlUCSIsTagalog'])(a0);\nvar _xmlUCSIsTagbanwa = Module['_xmlUCSIsTagbanwa'] = (a0) => (_xmlUCSIsTagbanwa = Module['_xmlUCSIsTagbanwa'] = wasmExports['xmlUCSIsTagbanwa'])(a0);\nvar _xmlUCSIsTags = Module['_xmlUCSIsTags'] = (a0) => (_xmlUCSIsTags = Module['_xmlUCSIsTags'] = wasmExports['xmlUCSIsTags'])(a0);\nvar _xmlUCSIsTaiLe = Module['_xmlUCSIsTaiLe'] = (a0) => (_xmlUCSIsTaiLe = Module['_xmlUCSIsTaiLe'] = wasmExports['xmlUCSIsTaiLe'])(a0);\nvar _xmlUCSIsTaiXuanJingSymbols = Module['_xmlUCSIsTaiXuanJingSymbols'] = (a0) => (_xmlUCSIsTaiXuanJingSymbols = Module['_xmlUCSIsTaiXuanJingSymbols'] = wasmExports['xmlUCSIsTaiXuanJingSymbols'])(a0);\nvar _xmlUCSIsTamil = Module['_xmlUCSIsTamil'] = (a0) => (_xmlUCSIsTamil = Module['_xmlUCSIsTamil'] = wasmExports['xmlUCSIsTamil'])(a0);\nvar _xmlUCSIsTelugu = Module['_xmlUCSIsTelugu'] = (a0) => (_xmlUCSIsTelugu = Module['_xmlUCSIsTelugu'] = wasmExports['xmlUCSIsTelugu'])(a0);\nvar _xmlUCSIsThaana = Module['_xmlUCSIsThaana'] = (a0) => (_xmlUCSIsThaana = Module['_xmlUCSIsThaana'] = wasmExports['xmlUCSIsThaana'])(a0);\nvar _xmlUCSIsThai = Module['_xmlUCSIsThai'] = (a0) => (_xmlUCSIsThai = Module['_xmlUCSIsThai'] = wasmExports['xmlUCSIsThai'])(a0);\nvar _xmlUCSIsTibetan = Module['_xmlUCSIsTibetan'] = (a0) => (_xmlUCSIsTibetan = Module['_xmlUCSIsTibetan'] = wasmExports['xmlUCSIsTibetan'])(a0);\nvar _xmlUCSIsUgaritic = Module['_xmlUCSIsUgaritic'] = (a0) => (_xmlUCSIsUgaritic = Module['_xmlUCSIsUgaritic'] = wasmExports['xmlUCSIsUgaritic'])(a0);\nvar _xmlUCSIsUnifiedCanadianAboriginalSyllabics = Module['_xmlUCSIsUnifiedCanadianAboriginalSyllabics'] = (a0) => (_xmlUCSIsUnifiedCanadianAboriginalSyllabics = Module['_xmlUCSIsUnifiedCanadianAboriginalSyllabics'] = wasmExports['xmlUCSIsUnifiedCanadianAboriginalSyllabics'])(a0);\nvar _xmlUCSIsVariationSelectors = Module['_xmlUCSIsVariationSelectors'] = (a0) => (_xmlUCSIsVariationSelectors = Module['_xmlUCSIsVariationSelectors'] = wasmExports['xmlUCSIsVariationSelectors'])(a0);\nvar _xmlUCSIsVariationSelectorsSupplement = Module['_xmlUCSIsVariationSelectorsSupplement'] = (a0) => (_xmlUCSIsVariationSelectorsSupplement = Module['_xmlUCSIsVariationSelectorsSupplement'] = wasmExports['xmlUCSIsVariationSelectorsSupplement'])(a0);\nvar _xmlUCSIsYiRadicals = Module['_xmlUCSIsYiRadicals'] = (a0) => (_xmlUCSIsYiRadicals = Module['_xmlUCSIsYiRadicals'] = wasmExports['xmlUCSIsYiRadicals'])(a0);\nvar _xmlUCSIsYiSyllables = Module['_xmlUCSIsYiSyllables'] = (a0) => (_xmlUCSIsYiSyllables = Module['_xmlUCSIsYiSyllables'] = wasmExports['xmlUCSIsYiSyllables'])(a0);\nvar _xmlUCSIsYijingHexagramSymbols = Module['_xmlUCSIsYijingHexagramSymbols'] = (a0) => (_xmlUCSIsYijingHexagramSymbols = Module['_xmlUCSIsYijingHexagramSymbols'] = wasmExports['xmlUCSIsYijingHexagramSymbols'])(a0);\nvar _xmlUCSIsCatCs = Module['_xmlUCSIsCatCs'] = (a0) => (_xmlUCSIsCatCs = Module['_xmlUCSIsCatCs'] = wasmExports['xmlUCSIsCatCs'])(a0);\nvar ___small_fprintf = Module['___small_fprintf'] = (a0, a1, a2) => (___small_fprintf = Module['___small_fprintf'] = wasmExports['__small_fprintf'])(a0, a1, a2);\nvar _xmlXPathBooleanFunction = Module['_xmlXPathBooleanFunction'] = (a0, a1) => (_xmlXPathBooleanFunction = Module['_xmlXPathBooleanFunction'] = wasmExports['xmlXPathBooleanFunction'])(a0, a1);\nvar _xmlXPathCeilingFunction = Module['_xmlXPathCeilingFunction'] = (a0, a1) => (_xmlXPathCeilingFunction = Module['_xmlXPathCeilingFunction'] = wasmExports['xmlXPathCeilingFunction'])(a0, a1);\nvar _xmlXPathCountFunction = Module['_xmlXPathCountFunction'] = (a0, a1) => (_xmlXPathCountFunction = Module['_xmlXPathCountFunction'] = wasmExports['xmlXPathCountFunction'])(a0, a1);\nvar _xmlXPathConcatFunction = Module['_xmlXPathConcatFunction'] = (a0, a1) => (_xmlXPathConcatFunction = Module['_xmlXPathConcatFunction'] = wasmExports['xmlXPathConcatFunction'])(a0, a1);\nvar _xmlXPathContainsFunction = Module['_xmlXPathContainsFunction'] = (a0, a1) => (_xmlXPathContainsFunction = Module['_xmlXPathContainsFunction'] = wasmExports['xmlXPathContainsFunction'])(a0, a1);\nvar _xmlXPathIdFunction = Module['_xmlXPathIdFunction'] = (a0, a1) => (_xmlXPathIdFunction = Module['_xmlXPathIdFunction'] = wasmExports['xmlXPathIdFunction'])(a0, a1);\nvar _xmlXPathFalseFunction = Module['_xmlXPathFalseFunction'] = (a0, a1) => (_xmlXPathFalseFunction = Module['_xmlXPathFalseFunction'] = wasmExports['xmlXPathFalseFunction'])(a0, a1);\nvar _xmlXPathFloorFunction = Module['_xmlXPathFloorFunction'] = (a0, a1) => (_xmlXPathFloorFunction = Module['_xmlXPathFloorFunction'] = wasmExports['xmlXPathFloorFunction'])(a0, a1);\nvar _xmlXPathLastFunction = Module['_xmlXPathLastFunction'] = (a0, a1) => (_xmlXPathLastFunction = Module['_xmlXPathLastFunction'] = wasmExports['xmlXPathLastFunction'])(a0, a1);\nvar _xmlXPathLangFunction = Module['_xmlXPathLangFunction'] = (a0, a1) => (_xmlXPathLangFunction = Module['_xmlXPathLangFunction'] = wasmExports['xmlXPathLangFunction'])(a0, a1);\nvar _xmlXPathLocalNameFunction = Module['_xmlXPathLocalNameFunction'] = (a0, a1) => (_xmlXPathLocalNameFunction = Module['_xmlXPathLocalNameFunction'] = wasmExports['xmlXPathLocalNameFunction'])(a0, a1);\nvar _xmlXPathNotFunction = Module['_xmlXPathNotFunction'] = (a0, a1) => (_xmlXPathNotFunction = Module['_xmlXPathNotFunction'] = wasmExports['xmlXPathNotFunction'])(a0, a1);\nvar _xmlXPathNamespaceURIFunction = Module['_xmlXPathNamespaceURIFunction'] = (a0, a1) => (_xmlXPathNamespaceURIFunction = Module['_xmlXPathNamespaceURIFunction'] = wasmExports['xmlXPathNamespaceURIFunction'])(a0, a1);\nvar _xmlXPathNormalizeFunction = Module['_xmlXPathNormalizeFunction'] = (a0, a1) => (_xmlXPathNormalizeFunction = Module['_xmlXPathNormalizeFunction'] = wasmExports['xmlXPathNormalizeFunction'])(a0, a1);\nvar _xmlXPathNumberFunction = Module['_xmlXPathNumberFunction'] = (a0, a1) => (_xmlXPathNumberFunction = Module['_xmlXPathNumberFunction'] = wasmExports['xmlXPathNumberFunction'])(a0, a1);\nvar _xmlXPathPositionFunction = Module['_xmlXPathPositionFunction'] = (a0, a1) => (_xmlXPathPositionFunction = Module['_xmlXPathPositionFunction'] = wasmExports['xmlXPathPositionFunction'])(a0, a1);\nvar _xmlXPathRoundFunction = Module['_xmlXPathRoundFunction'] = (a0, a1) => (_xmlXPathRoundFunction = Module['_xmlXPathRoundFunction'] = wasmExports['xmlXPathRoundFunction'])(a0, a1);\nvar _xmlXPathStringFunction = Module['_xmlXPathStringFunction'] = (a0, a1) => (_xmlXPathStringFunction = Module['_xmlXPathStringFunction'] = wasmExports['xmlXPathStringFunction'])(a0, a1);\nvar _xmlXPathStringLengthFunction = Module['_xmlXPathStringLengthFunction'] = (a0, a1) => (_xmlXPathStringLengthFunction = Module['_xmlXPathStringLengthFunction'] = wasmExports['xmlXPathStringLengthFunction'])(a0, a1);\nvar _xmlXPathStartsWithFunction = Module['_xmlXPathStartsWithFunction'] = (a0, a1) => (_xmlXPathStartsWithFunction = Module['_xmlXPathStartsWithFunction'] = wasmExports['xmlXPathStartsWithFunction'])(a0, a1);\nvar _xmlXPathSubstringFunction = Module['_xmlXPathSubstringFunction'] = (a0, a1) => (_xmlXPathSubstringFunction = Module['_xmlXPathSubstringFunction'] = wasmExports['xmlXPathSubstringFunction'])(a0, a1);\nvar _xmlXPathSubstringBeforeFunction = Module['_xmlXPathSubstringBeforeFunction'] = (a0, a1) => (_xmlXPathSubstringBeforeFunction = Module['_xmlXPathSubstringBeforeFunction'] = wasmExports['xmlXPathSubstringBeforeFunction'])(a0, a1);\nvar _xmlXPathSubstringAfterFunction = Module['_xmlXPathSubstringAfterFunction'] = (a0, a1) => (_xmlXPathSubstringAfterFunction = Module['_xmlXPathSubstringAfterFunction'] = wasmExports['xmlXPathSubstringAfterFunction'])(a0, a1);\nvar _xmlXPathSumFunction = Module['_xmlXPathSumFunction'] = (a0, a1) => (_xmlXPathSumFunction = Module['_xmlXPathSumFunction'] = wasmExports['xmlXPathSumFunction'])(a0, a1);\nvar _xmlXPathTrueFunction = Module['_xmlXPathTrueFunction'] = (a0, a1) => (_xmlXPathTrueFunction = Module['_xmlXPathTrueFunction'] = wasmExports['xmlXPathTrueFunction'])(a0, a1);\nvar _xmlXPathTranslateFunction = Module['_xmlXPathTranslateFunction'] = (a0, a1) => (_xmlXPathTranslateFunction = Module['_xmlXPathTranslateFunction'] = wasmExports['xmlXPathTranslateFunction'])(a0, a1);\nvar _xmlXPathNextSelf = Module['_xmlXPathNextSelf'] = (a0, a1) => (_xmlXPathNextSelf = Module['_xmlXPathNextSelf'] = wasmExports['xmlXPathNextSelf'])(a0, a1);\nvar _xmlXPathNextChild = Module['_xmlXPathNextChild'] = (a0, a1) => (_xmlXPathNextChild = Module['_xmlXPathNextChild'] = wasmExports['xmlXPathNextChild'])(a0, a1);\nvar _xmlXPathNextDescendant = Module['_xmlXPathNextDescendant'] = (a0, a1) => (_xmlXPathNextDescendant = Module['_xmlXPathNextDescendant'] = wasmExports['xmlXPathNextDescendant'])(a0, a1);\nvar _xmlXPathNextDescendantOrSelf = Module['_xmlXPathNextDescendantOrSelf'] = (a0, a1) => (_xmlXPathNextDescendantOrSelf = Module['_xmlXPathNextDescendantOrSelf'] = wasmExports['xmlXPathNextDescendantOrSelf'])(a0, a1);\nvar _xmlXPathNextParent = Module['_xmlXPathNextParent'] = (a0, a1) => (_xmlXPathNextParent = Module['_xmlXPathNextParent'] = wasmExports['xmlXPathNextParent'])(a0, a1);\nvar _xmlXPathNextAncestor = Module['_xmlXPathNextAncestor'] = (a0, a1) => (_xmlXPathNextAncestor = Module['_xmlXPathNextAncestor'] = wasmExports['xmlXPathNextAncestor'])(a0, a1);\nvar _xmlXPathNextAncestorOrSelf = Module['_xmlXPathNextAncestorOrSelf'] = (a0, a1) => (_xmlXPathNextAncestorOrSelf = Module['_xmlXPathNextAncestorOrSelf'] = wasmExports['xmlXPathNextAncestorOrSelf'])(a0, a1);\nvar _xmlXPathNextFollowingSibling = Module['_xmlXPathNextFollowingSibling'] = (a0, a1) => (_xmlXPathNextFollowingSibling = Module['_xmlXPathNextFollowingSibling'] = wasmExports['xmlXPathNextFollowingSibling'])(a0, a1);\nvar _xmlXPathNextPrecedingSibling = Module['_xmlXPathNextPrecedingSibling'] = (a0, a1) => (_xmlXPathNextPrecedingSibling = Module['_xmlXPathNextPrecedingSibling'] = wasmExports['xmlXPathNextPrecedingSibling'])(a0, a1);\nvar _xmlXPathNextFollowing = Module['_xmlXPathNextFollowing'] = (a0, a1) => (_xmlXPathNextFollowing = Module['_xmlXPathNextFollowing'] = wasmExports['xmlXPathNextFollowing'])(a0, a1);\nvar _xmlXPathNextNamespace = Module['_xmlXPathNextNamespace'] = (a0, a1) => (_xmlXPathNextNamespace = Module['_xmlXPathNextNamespace'] = wasmExports['xmlXPathNextNamespace'])(a0, a1);\nvar _xmlXPathNextAttribute = Module['_xmlXPathNextAttribute'] = (a0, a1) => (_xmlXPathNextAttribute = Module['_xmlXPathNextAttribute'] = wasmExports['xmlXPathNextAttribute'])(a0, a1);\nvar _zcalloc = Module['_zcalloc'] = (a0, a1, a2) => (_zcalloc = Module['_zcalloc'] = wasmExports['zcalloc'])(a0, a1, a2);\nvar _zcfree = Module['_zcfree'] = (a0, a1) => (_zcfree = Module['_zcfree'] = wasmExports['zcfree'])(a0, a1);\nvar _strerror = Module['_strerror'] = (a0) => (_strerror = Module['_strerror'] = wasmExports['strerror'])(a0);\nvar ___dl_seterr = (a0, a1) => (___dl_seterr = wasmExports['__dl_seterr'])(a0, a1);\nvar _putc = Module['_putc'] = (a0, a1) => (_putc = Module['_putc'] = wasmExports['putc'])(a0, a1);\nvar _gmtime = Module['_gmtime'] = (a0) => (_gmtime = Module['_gmtime'] = wasmExports['gmtime'])(a0);\nvar _htonl = (a0) => (_htonl = wasmExports['htonl'])(a0);\nvar _htons = (a0) => (_htons = wasmExports['htons'])(a0);\nvar _ioctl = Module['_ioctl'] = (a0, a1, a2) => (_ioctl = Module['_ioctl'] = wasmExports['ioctl'])(a0, a1, a2);\nvar _emscripten_builtin_memalign = (a0, a1) => (_emscripten_builtin_memalign = wasmExports['emscripten_builtin_memalign'])(a0, a1);\nvar _ntohs = (a0) => (_ntohs = wasmExports['ntohs'])(a0);\nvar _srand = Module['_srand'] = (a0) => (_srand = Module['_srand'] = wasmExports['srand'])(a0);\nvar _rand = Module['_rand'] = () => (_rand = Module['_rand'] = wasmExports['rand'])();\nvar __emscripten_timeout = (a0, a1) => (__emscripten_timeout = wasmExports['_emscripten_timeout'])(a0, a1);\nvar ___floatsitf = Module['___floatsitf'] = (a0, a1) => (___floatsitf = Module['___floatsitf'] = wasmExports['__floatsitf'])(a0, a1);\nvar ___multf3 = Module['___multf3'] = (a0, a1, a2, a3, a4) => (___multf3 = Module['___multf3'] = wasmExports['__multf3'])(a0, a1, a2, a3, a4);\nvar ___extenddftf2 = Module['___extenddftf2'] = (a0, a1) => (___extenddftf2 = Module['___extenddftf2'] = wasmExports['__extenddftf2'])(a0, a1);\nvar ___getf2 = Module['___getf2'] = (a0, a1, a2, a3) => (___getf2 = Module['___getf2'] = wasmExports['__getf2'])(a0, a1, a2, a3);\nvar ___subtf3 = Module['___subtf3'] = (a0, a1, a2, a3, a4) => (___subtf3 = Module['___subtf3'] = wasmExports['__subtf3'])(a0, a1, a2, a3, a4);\nvar ___letf2 = Module['___letf2'] = (a0, a1, a2, a3) => (___letf2 = Module['___letf2'] = wasmExports['__letf2'])(a0, a1, a2, a3);\nvar ___lttf2 = Module['___lttf2'] = (a0, a1, a2, a3) => (___lttf2 = Module['___lttf2'] = wasmExports['__lttf2'])(a0, a1, a2, a3);\nvar _setThrew = (a0, a1) => (_setThrew = wasmExports['setThrew'])(a0, a1);\nvar __emscripten_tempret_set = (a0) => (__emscripten_tempret_set = wasmExports['_emscripten_tempret_set'])(a0);\nvar __emscripten_tempret_get = () => (__emscripten_tempret_get = wasmExports['_emscripten_tempret_get'])();\nvar ___fixtfsi = Module['___fixtfsi'] = (a0, a1) => (___fixtfsi = Module['___fixtfsi'] = wasmExports['__fixtfsi'])(a0, a1);\nvar __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0);\nvar __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0);\nvar _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])();\nvar _ScanKeywords = Module['_ScanKeywords'] = 69101716;\nvar _stderr = Module['_stderr'] = 69124144;\nvar _stdout = Module['_stdout'] = 69124448;\nvar _CurrentMemoryContext = Module['_CurrentMemoryContext'] = 69156188;\nvar _TopMemoryContext = Module['_TopMemoryContext'] = 69156192;\nvar _TTSOpsVirtual = Module['_TTSOpsVirtual'] = 68962840;\nvar ___THREW__ = Module['___THREW__'] = 69281700;\nvar ___threwValue = Module['___threwValue'] = 69281704;\nvar _error_context_stack = Module['_error_context_stack'] = 69171244;\nvar _PG_exception_stack = Module['_PG_exception_stack'] = 69171248;\nvar _CurrentResourceOwner = Module['_CurrentResourceOwner'] = 69156268;\nvar _wal_segment_size = Module['_wal_segment_size'] = 68972040;\nvar _InterruptPending = Module['_InterruptPending'] = 69162052;\nvar _MyLatch = Module['_MyLatch'] = 69162220;\nvar _InterruptHoldoffCount = Module['_InterruptHoldoffCount'] = 69162092;\nvar _CritSectionCount = Module['_CritSectionCount'] = 69162100;\nvar _pg_global_prng_state = Module['_pg_global_prng_state'] = 69267952;\nvar _MyProc = Module['_MyProc'] = 69129772;\nvar _GUC_check_errdetail_string = Module['_GUC_check_errdetail_string'] = 69157224;\nvar _IsUnderPostmaster = Module['_IsUnderPostmaster'] = 69162125;\nvar _progname = Module['_progname'] = 69125572;\nvar _MyDatabaseId = Module['_MyDatabaseId'] = 69162108;\nvar _MyProcPid = Module['_MyProcPid'] = 69162188;\nvar _MyProcPort = Module['_MyProcPort'] = 69162208;\nvar _single_mode_feed = Module['_single_mode_feed'] = 69125588;\nvar _stdin = Module['_stdin'] = 69124296;\nvar _SOCKET_DATA = Module['_SOCKET_DATA'] = 69185960;\nvar _SOCKET_FILE = Module['_SOCKET_FILE'] = 69185956;\nvar _cma_rsize = Module['_cma_rsize'] = 69125620;\nvar _debug_query_string = Module['_debug_query_string'] = 69125804;\nvar _cma_wsize = Module['_cma_wsize'] = 69125628;\nvar _quote_all_identifiers = Module['_quote_all_identifiers'] = 69125577;\nvar _TopTransactionContext = Module['_TopTransactionContext'] = 69156212;\nvar _TopTransactionResourceOwner = Module['_TopTransactionResourceOwner'] = 69156276;\nvar _TTSOpsMinimalTuple = Module['_TTSOpsMinimalTuple'] = 68962936;\nvar _ProcessUtility_hook = Module['_ProcessUtility_hook'] = 69125992;\nvar _work_mem = Module['_work_mem'] = 69095552;\nvar _ParallelWorkerNumber = Module['_ParallelWorkerNumber'] = 68963384;\nvar _XactIsoLevel = Module['_XactIsoLevel'] = 68971796;\nvar _SnapshotAnyData = Module['_SnapshotAnyData'] = 69034440;\nvar _SPI_processed = Module['_SPI_processed'] = 69126504;\nvar _SPI_tuptable = Module['_SPI_tuptable'] = 69126512;\nvar _SPI_result = Module['_SPI_result'] = 69126516;\nvar _CacheMemoryContext = Module['_CacheMemoryContext'] = 69156204;\nvar _pgBufferUsage = Module['_pgBufferUsage'] = 69127376;\nvar _pgWalUsage = Module['_pgWalUsage'] = 69127488;\nvar _TTSOpsHeapTuple = Module['_TTSOpsHeapTuple'] = 68962888;\nvar _ExecutorStart_hook = Module['_ExecutorStart_hook'] = 69127512;\nvar _ExecutorRun_hook = Module['_ExecutorRun_hook'] = 69127516;\nvar _ExecutorFinish_hook = Module['_ExecutorFinish_hook'] = 69127520;\nvar _ExecutorEnd_hook = Module['_ExecutorEnd_hook'] = 69127524;\nvar _LocalBufferBlockPointers = Module['_LocalBufferBlockPointers'] = 69138204;\nvar _BufferBlocks = Module['_BufferBlocks'] = 69132952;\nvar _maintenance_work_mem = Module['_maintenance_work_mem'] = 69095568;\nvar _wal_level = Module['_wal_level'] = 68972020;\nvar _NBuffers = Module['_NBuffers'] = 69095576;\nvar _old_snapshot_threshold = Module['_old_snapshot_threshold'] = 69156404;\nvar _MainLWLockArray = Module['_MainLWLockArray'] = 69129804;\nvar _ShmemVariableCache = Module['_ShmemVariableCache'] = 69128588;\nvar _RmgrTable = Module['_RmgrTable'] = 68963600;\nvar _process_shared_preload_libraries_in_progress = Module['_process_shared_preload_libraries_in_progress'] = 69162040;\nvar _DataDir = Module['_DataDir'] = 69162104;\nvar _shmem_startup_hook = Module['_shmem_startup_hook'] = 69132724;\nvar _BufferDescriptors = Module['_BufferDescriptors'] = 69132948;\nvar _application_name = Module['_application_name'] = 69158428;\nvar _pg_crc32_table = Module['_pg_crc32_table'] = 67826528;\nvar _oldSnapshotControl = Module['_oldSnapshotControl'] = 69156408;\nvar _check_function_bodies = Module['_check_function_bodies'] = 69034614;\nvar _cluster_name = Module['_cluster_name'] = 69034668;\nvar _extra_float_digits = Module['_extra_float_digits'] = 69084196;\nvar _max_parallel_maintenance_workers = Module['_max_parallel_maintenance_workers'] = 69095572;\nvar _seq_page_cost = Module['_seq_page_cost'] = 69096440;\nvar _cpu_tuple_cost = Module['_cpu_tuple_cost'] = 69096456;\nvar _cpu_operator_cost = Module['_cpu_operator_cost'] = 69096472;\nvar _Log_directory = Module['_Log_directory'] = 69172148;\nvar _Log_filename = Module['_Log_filename'] = 69172152;\nvar _IntervalStyle = Module['_IntervalStyle'] = 69162132;\nvar _DateStyle = Module['_DateStyle'] = 69095540;\nvar _xmlStructuredError = Module['_xmlStructuredError'] = 69268316;\nvar _xmlStructuredErrorContext = Module['_xmlStructuredErrorContext'] = 69268324;\nvar _xmlGenericErrorContext = Module['_xmlGenericErrorContext'] = 69268320;\nvar _xmlGenericError = Module['_xmlGenericError'] = 69106020;\nvar _xmlIsBaseCharGroup = Module['_xmlIsBaseCharGroup'] = 69105784;\nvar _xmlIsDigitGroup = Module['_xmlIsDigitGroup'] = 69105816;\nvar _xmlIsCombiningGroup = Module['_xmlIsCombiningGroup'] = 69105800;\nvar _xmlIsExtenderGroup = Module['_xmlIsExtenderGroup'] = 69105832;\nvar _xmlFree = Module['_xmlFree'] = 69105984;\nvar _pg_number_of_ones = Module['_pg_number_of_ones'] = 68765008;\nvar _MyStartTime = Module['_MyStartTime'] = 69162192;\nvar _shmem_request_hook = Module['_shmem_request_hook'] = 69162044;\nvar _ScanKeywordTokens = Module['_ScanKeywordTokens'] = 68450864;\nvar _post_parse_analyze_hook = Module['_post_parse_analyze_hook'] = 69172140;\nvar _ConfigReloadPending = Module['_ConfigReloadPending'] = 69172172;\nvar _ShutdownRequestPending = Module['_ShutdownRequestPending'] = 69172176;\nvar _planner_hook = Module['_planner_hook'] = 69172616;\nvar _WalReceiverFunctions = Module['_WalReceiverFunctions'] = 69182296;\nvar _check_password_hook = Module['_check_password_hook'] = 69172724;\nvar _ClientAuthentication_hook = Module['_ClientAuthentication_hook'] = 69173480;\nvar _IDB_STAGE = Module['_IDB_STAGE'] = 69185968;\nvar _IDB_PIPE_FP = Module['_IDB_PIPE_FP'] = 69185964;\nvar _pg_scram_mech = Module['_pg_scram_mech'] = 69105728;\nvar _pg_g_threadlock = Module['_pg_g_threadlock'] = 69103832;\nvar _pgresStatus = Module['_pgresStatus'] = 69105520;\nvar _xmlIsPubidChar_tab = Module['_xmlIsPubidChar_tab'] = 68765296;\nvar _xmlGetWarningsDefaultValue = Module['_xmlGetWarningsDefaultValue'] = 69106012;\nvar _xmlMalloc = Module['_xmlMalloc'] = 69105988;\nvar _xmlRealloc = Module['_xmlRealloc'] = 69105996;\nvar _xmlLastError = Module['_xmlLastError'] = 69268336;\nvar _xmlMallocAtomic = Module['_xmlMallocAtomic'] = 69105992;\nvar _xmlMemStrdup = Module['_xmlMemStrdup'] = 69106000;\nvar _xmlBufferAllocScheme = Module['_xmlBufferAllocScheme'] = 69106004;\nvar _xmlDefaultBufferSize = Module['_xmlDefaultBufferSize'] = 69106008;\nvar _xmlParserDebugEntities = Module['_xmlParserDebugEntities'] = 69268276;\nvar _xmlDoValidityCheckingDefaultValue = Module['_xmlDoValidityCheckingDefaultValue'] = 69268280;\nvar _xmlLoadExtDtdDefaultValue = Module['_xmlLoadExtDtdDefaultValue'] = 69268284;\nvar _xmlPedanticParserDefaultValue = Module['_xmlPedanticParserDefaultValue'] = 69268288;\nvar _xmlLineNumbersDefaultValue = Module['_xmlLineNumbersDefaultValue'] = 69268292;\nvar _xmlKeepBlanksDefaultValue = Module['_xmlKeepBlanksDefaultValue'] = 69106016;\nvar _xmlSubstituteEntitiesDefaultValue = Module['_xmlSubstituteEntitiesDefaultValue'] = 69268296;\nvar _xmlRegisterNodeDefaultValue = Module['_xmlRegisterNodeDefaultValue'] = 69268300;\nvar _xmlDeregisterNodeDefaultValue = Module['_xmlDeregisterNodeDefaultValue'] = 69268304;\nvar _xmlParserInputBufferCreateFilenameValue = Module['_xmlParserInputBufferCreateFilenameValue'] = 69268308;\nvar _xmlOutputBufferCreateFilenameValue = Module['_xmlOutputBufferCreateFilenameValue'] = 69268312;\nvar _xmlIndentTreeOutput = Module['_xmlIndentTreeOutput'] = 69106024;\nvar _xmlTreeIndentString = Module['_xmlTreeIndentString'] = 69106028;\nvar _xmlSaveNoEmptyTags = Module['_xmlSaveNoEmptyTags'] = 69268328;\nvar _xmlDefaultSAXHandler = Module['_xmlDefaultSAXHandler'] = 69106032;\nvar _xmlDefaultSAXLocator = Module['_xmlDefaultSAXLocator'] = 69106144;\nvar _xmlParserMaxDepth = Module['_xmlParserMaxDepth'] = 69106804;\nvar _xmlStringText = Module['_xmlStringText'] = 68767104;\nvar _xmlStringComment = Module['_xmlStringComment'] = 68767119;\nvar _xmlStringTextNoenc = Module['_xmlStringTextNoenc'] = 68767109;\nvar _xmlXPathNAN = Module['_xmlXPathNAN'] = 69269000;\nvar _xmlXPathNINF = Module['_xmlXPathNINF'] = 69269016;\nvar _xmlXPathPINF = Module['_xmlXPathPINF'] = 69269008;\nvar _z_errmsg = Module['_z_errmsg'] = 69123360;\nvar __length_code = Module['__length_code'] = 68786768;\nvar __dist_code = Module['__dist_code'] = 68786256;\nfunction invoke_i(index) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)();\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_iii(index,a1,a2) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_ii(index,a1) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_viii(index,a1,a2,a3) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1,a2,a3);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_ji(index,a1) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\n\nfunction invoke_vi(index,a1) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_iiiii(index,a1,a2,a3,a4) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2,a3,a4);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_vii(index,a1,a2) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1,a2);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_v(index) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)();\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_viiiii(index,a1,a2,a3,a4,a5) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1,a2,a3,a4,a5);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_jiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\n\nfunction invoke_jiiiii(index,a1,a2,a3,a4,a5) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2,a3,a4,a5);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\n\nfunction invoke_viiii(index,a1,a2,a3,a4) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1,a2,a3,a4);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_iiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_vji(index,a1,a2) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1,a2);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_iiii(index,a1,a2,a3) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2,a3);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_iiiijii(index,a1,a2,a3,a4,a5,a6) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_vijiji(index,a1,a2,a3,a4,a5) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1,a2,a3,a4,a5);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_viji(index,a1,a2,a3) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1,a2,a3);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_jiiii(index,a1,a2,a3,a4) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2,a3,a4);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\n\nfunction invoke_viiiiii(index,a1,a2,a3,a4,a5,a6) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_viiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_iiiiii(index,a1,a2,a3,a4,a5) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2,a3,a4,a5);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_viiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_jii(index,a1,a2) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\n\nfunction invoke_iiij(index,a1,a2,a3) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2,a3);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_iiiiiiii(index,a1,a2,a3,a4,a5,a6,a7) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_di(index,a1) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_id(index,a1) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_ijiiiii(index,a1,a2,a3,a4,a5,a6) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_ij(index,a1) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_iiiij(index,a1,a2,a3,a4) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2,a3,a4);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_viiij(index,a1,a2,a3,a4) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1,a2,a3,a4);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_viiji(index,a1,a2,a3,a4) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1,a2,a3,a4);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_iiji(index,a1,a2,a3) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2,a3);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_viiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_vij(index,a1,a2) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1,a2);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_iiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_vid(index,a1,a2) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1,a2);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_iiiiiiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_vj(index,a1) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_ijiiiiii(index,a1,a2,a3,a4,a5,a6,a7) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_viijii(index,a1,a2,a3,a4,a5) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1,a2,a3,a4,a5);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_iiiiiji(index,a1,a2,a3,a4,a5,a6) {\n var sp = stackSave();\n try {\n return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_viijiiii(index,a1,a2,a3,a4,a5,a6,a7) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\nfunction invoke_viij(index,a1,a2,a3) {\n var sp = stackSave();\n try {\n getWasmTableEntry(index)(a1,a2,a3);\n } catch(e) {\n stackRestore(sp);\n if (e !== e+0) throw e;\n _setThrew(1, 0);\n }\n}\n\n\n// include: postamble.js\n// === Auto-generated postamble setup entry stuff ===\n\nModule['addRunDependency'] = addRunDependency;\nModule['removeRunDependency'] = removeRunDependency;\nModule['callMain'] = callMain;\nModule['ccall'] = ccall;\nModule['cwrap'] = cwrap;\nModule['setValue'] = setValue;\nModule['getValue'] = getValue;\nModule['UTF8ToString'] = UTF8ToString;\nModule['stringToNewUTF8'] = stringToNewUTF8;\nModule['stringToUTF8OnStack'] = stringToUTF8OnStack;\nModule['FS_createPreloadedFile'] = FS_createPreloadedFile;\nModule['FS_unlink'] = FS_unlink;\nModule['FS_createPath'] = FS_createPath;\nModule['FS_createDevice'] = FS_createDevice;\nModule['FS'] = FS;\nModule['FS_createDataFile'] = FS_createDataFile;\nModule['FS_createLazyFile'] = FS_createLazyFile;\n\n\nvar calledRun;\n\ndependenciesFulfilled = function runCaller() {\n // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)\n if (!calledRun) run();\n if (!calledRun) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled\n};\n\nfunction callMain(args = []) {\n\n var entryFunction = resolveGlobalSymbol('main').sym;;\n\n // Main modules can't tell if they have main() at compile time, since it may\n // arrive from a dynamic library.\n if (!entryFunction) return;\n\n args.unshift(thisProgram);\n\n var argc = args.length;\n var argv = stackAlloc((argc + 1) * 4);\n var argv_ptr = argv;\n args.forEach((arg) => {\n HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg);\n argv_ptr += 4;\n });\n HEAPU32[((argv_ptr)>>2)] = 0;\n\n try {\n\n var ret = entryFunction(argc, argv);\n\n // if we're not running an evented main loop, it's time to exit\n exitJS(ret, /* implicit = */ true);\n return ret;\n }\n catch (e) {\n return handleException(e);\n }\n}\n\nfunction run(args = arguments_) {\n\n if (runDependencies > 0) {\n return;\n }\n\n preRun();\n\n // a preRun added a dependency, run will be called later\n if (runDependencies > 0) {\n return;\n }\n\n function doRun() {\n // run may have just been called through dependencies being fulfilled just in this very frame,\n // or while the async setStatus time below was happening\n if (calledRun) return;\n calledRun = true;\n Module['calledRun'] = true;\n\n if (ABORT) return;\n\n initRuntime();\n\n preMain();\n\n readyPromiseResolve(Module);\n Module['onRuntimeInitialized']?.();\n\n if (shouldRunNow) callMain(args);\n\n postRun();\n }\n\n if (Module['setStatus']) {\n Module['setStatus']('Running...');\n setTimeout(() => {\n setTimeout(() => Module['setStatus'](''), 1);\n doRun();\n }, 1);\n } else\n {\n doRun();\n }\n}\n\nif (Module['preInit']) {\n if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];\n while (Module['preInit'].length > 0) {\n Module['preInit'].pop()();\n }\n}\n\n// shouldRunNow refers to calling main(), not run().\nvar shouldRunNow = true;\n\nif (Module['noInitialRun']) shouldRunNow = false;\n\nrun();\n\n// end include: postamble.js\n\n// include: postamble_modularize.js\n// In MODULARIZE mode we wrap the generated code in a factory function\n// and return either the Module itself, or a promise of the module.\n//\n// We assign to the `moduleRtn` global here and configure closure to see\n// this as and extern so it won't get minified.\n\nmoduleRtn = readyPromise;\n\n// end include: postamble_modularize.js\n\n\n\n return moduleRtn;\n}\n);\n})();\nexport default Module;\n","\nvar PHP = (() => {\n const importMeta = import.meta;var _scriptName = importMeta.url;\n \n return (\nfunction(moduleArg = {}) {\n var moduleRtn;\n\nvar Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;Module.preRun=Module.preRun||[];if(typeof Module.preRun==\"function\")Module.preRun=[Module.preRun];Module.preRun.push(()=>Object.assign(ENV,Module.ENV||{}));Module.preRun=Module.preRun||[];if(typeof Module.preRun==\"function\")Module.preRun=[Module.preRun];Module.preRun.push(()=>ENV.ICU_DATA=ENV.ICU_DATA||\"/preload\");var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram=\"./this.program\";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory=\"\";function locateFile(path,defaultPath=null){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)??defaultPath??scriptDirectory+path}return defaultPath??scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=\"undefined\"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptName){scriptDirectory=_scriptName}if(scriptDirectory.startsWith(\"blob:\")){scriptDirectory=\"\"}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1)}{readAsync=url=>fetch(url,{credentials:\"same-origin\"}).then(response=>{if(response.ok){return response.arrayBuffer()}return Promise.reject(new Error(response.status+\" : \"+response.url))})}}else{}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];var dynamicLibraries=Module[\"dynamicLibraries\"]||[];var wasmBinary=Module[\"wasmBinary\"];function intArrayFromBase64(s){var decoded=atob(s);var bytes=new Uint8Array(decoded.length);for(var i=0;ifilename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith(\"file://\");function findWasmBinary(){if(Module[\"locateFile\"]){var f=\"php-web.mjs.wasm\";if(!isDataURI(f)){return locateFile(f,new URL(\"php-web.mjs.wasm\",import.meta.url).href)}return f}return new URL(\"php-web.mjs.wasm\",import.meta.url).href}var wasmBinaryFile;function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw\"both async and sync fetching of the wasm failed\"}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==\"function\"){return fetch(binaryFile,{credentials:\"same-origin\"}).then(response=>{if(!response[\"ok\"]){throw`failed to load wasm binary file at '${binaryFile}'`}return response[\"arrayBuffer\"]()}).catch(()=>getBinarySync(binaryFile))}return readAsync(binaryFile).then(response=>new Uint8Array(response),()=>getBinarySync(binaryFile))}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming==\"function\"&&!isDataURI(binaryFile)&&typeof fetch==\"function\"){return fetch(binaryFile,{credentials:\"same-origin\"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err(`wasm streaming compile failed: ${reason}`);err(\"falling back to ArrayBuffer instantiation\");return instantiateArrayBuffer(binaryFile,imports,callback)})})}return instantiateArrayBuffer(binaryFile,imports,callback)}function getWasmImports(){return{env:wasmImports,wasi_snapshot_preview1:wasmImports,\"GOT.mem\":new Proxy(wasmImports,GOTHandler),\"GOT.func\":new Proxy(wasmImports,GOTHandler)}}function createWasm(){var info=getWasmImports();function receiveInstance(instance,module){wasmExports=instance.exports;wasmExports=relocateExports(wasmExports,1024);wasmExports=Asyncify.instrumentWasmExports(wasmExports);var metadata=getDylinkMetadata(module);if(metadata.neededDynlibs){dynamicLibraries=metadata.neededDynlibs.concat(dynamicLibraries)}mergeLibSymbols(wasmExports,\"main\");LDSO.init();loadDylibs();wasmExports=applySignatureConversions(wasmExports);addOnInit(wasmExports[\"__wasm_call_ctors\"]);__RELOC_FUNCS__.push(wasmExports[\"__wasm_apply_data_relocs\"]);removeRunDependency(\"wasm-instantiate\");return wasmExports}addRunDependency(\"wasm-instantiate\");function receiveInstantiationResult(result){receiveInstance(result[\"instance\"],result[\"module\"])}if(Module[\"instantiateWasm\"]){try{return Module[\"instantiateWasm\"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);readyPromiseReject(e)}}wasmBinaryFile??=findWasmBinary();instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}var tempDouble;var tempI64;var asyncifyStubs={};var ASM_CONSTS={1514539:()=>!!Module.PGlite,1514566:$0=>{const statement=Module.targets.get($0);Module.PdoParams.delete(statement)},1514648:$0=>{const results=Module.targets.get($0);if(results)return results.length;return 0},1514737:$0=>{const results=Module.targets.get($0);if(results.length)return Object.keys(results[0]).length;return 0},1514849:($0,$1)=>{const targetId=$0;const target=Module.targets.get(targetId);const current=$1;if(current>=target.length){return false}return true},1514999:($0,$1)=>{const results=Module.targets.get($0);if(results.length){const str=Object.keys(results[0])[$1];const len=lengthBytesUTF8(str)+1;const loc=_malloc(len);stringToUTF8(str,loc,len);return loc}return 0},1515222:($0,$1,$2,$3)=>{const results=Module.targets.get($0);const current=-1+$1;const colno=$2;const rv=$3;if(current>=results.length){return null}const result=results[current];const key=Object.keys(result)[$2];Module.jsToZval(result[key],rv)},1515475:($0,$1,$2,$3)=>{const statement=Module.targets.get($0);const start=$1;const length=$2;const paramPos=$3;const buffer=new Uint8Array(Module.HEAPU8.buffer.slice(start,start+length));if(!Module.PdoParams.has(statement)){Module.PdoParams.set(statement,[])}const paramList=Module.PdoParams.get(statement);paramList[paramPos]=buffer},1515820:($0,$1,$2)=>{const statement=Module.targets.get($0);const paramVal=Module.zvalToJS($1);const paramPos=$2;if(!Module.PdoParams.has(statement)){Module.PdoParams.set(statement,[])}const paramList=Module.PdoParams.get(statement);paramList[paramPos]=paramVal},1516086:($0,$1,$2)=>{console.log(\"pdo_pglite_stmt_get_attribute\",$0,$1,$2)},1516148:($0,$1,$2)=>{console.log(\"pdo_pglite_stmt_col_meta\",$0,$1,$2)},1516205:$0=>{console.log(\"pdo_pglite_stmt_cursor_closer\",$0)},1516259:$0=>{if(!Module.PGlite){throw new Error(\"The PGlite class must be provided as a constructor arg to PHP to use PGlite.\")}const data_source=UTF8ToString($0);const pglite=new Module.PGlite(data_source?\"idb://\"+data_source:undefined);Module.tacked.add(pglite);return Module.targets.add(pglite)},1516568:$0=>{const db=Module.targets.get($0);Module.tacked.delete(db)},1516633:($0,$1,$2)=>{const db=Module.targets.get($0);const query=UTF8ToString($1);const zv=$2;const prepared=(...params)=>db.query(query,params);prepared.query=query;Module.tacked.add(prepared);return Module.targets.add(prepared)},1516866:($0,$1,$2)=>{console.log(\"pdo_pglite_set_attr\",$0,$1,$2);return true},1516931:($0,$1)=>{console.log(\"pdo_pglite_get_attr\",$0,$1);return 1},1516989:$0=>{if(Module.persist){const persist=Array.isArray(Module.persist)?Module.persist:[Module.persist];const useNodeRawFS=$0;persist.forEach(p=>{const mountPath=p.mountPath||\"/persist\";const localPath=p.localPath||\"./persist\";FS.mkdir(mountPath);if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){FS.mount(IDBFS,{autoPersist:false},mountPath)}else if(ENVIRONMENT_IS_NODE){if(!useNodeRawFS){const fs=(globalThis.__non_webpack_require__||require)(\"fs\");if(!fs.existsSync(localPath)){fs.mkdirSync(localPath,{recursive:true})}FS.mount(NODEFS,{root:localPath},mountPath)}}})}},1517613:($0,$1,$2)=>{const target=Module.targets.get($0);const property=UTF8ToString($1);const rv=$2;if(!(property in target)){return Module.jsToZval(undefined,rv)}Module.jsToZval(target[property],rv)},1517814:($0,$1,$2,$3,$4)=>{(()=>{const target=Module.targets.get($0);const property=UTF8ToString($1);const funcPtr=$2;const zvalPtr=$3;const paramCount=$4;target[property]=Module.callableToJs(funcPtr);const gc=Module.ccall(\"vrzno_expose_closure\",\"number\",[\"number\"],[funcPtr]);Module.fRegistry.register(target[property],gc,target[property])})()},1518171:($0,$1,$2)=>{(()=>{const target=Module.targets.get($0);const property=UTF8ToString($1);const zvalPtr=$2;const zo=Module.ccall(\"vrzno_expose_object\",\"number\",[\"number\"],[zvalPtr]);target[property]=Module.marshalZObject(zo)})()},1518414:($0,$1,$2)=>{(()=>{const target=Module.targets.get($0);const property=UTF8ToString($1);const zvalPtr=$2;const za=Module.ccall(\"vrzno_expose_array\",\"number\",[\"number\"],[zvalPtr]);target[property]=Module.marshalZArray(za)})()},1518655:($0,$1)=>{(()=>{const target=Module.targets.get($0);const property=UTF8ToString($1);delete target[property]})()},1518771:($0,$1)=>{(()=>{const target=Module.targets.get($0);const property=UTF8ToString($1);target[property]=null})()},1518887:($0,$1)=>{(()=>{const target=Module.targets.get($0);const property=UTF8ToString($1);target[property]=false})()},1519004:($0,$1)=>{(()=>{const target=Module.targets.get($0);const property=UTF8ToString($1);target[property]=true})()},1519120:($0,$1,$2)=>{(()=>{const target=Module.targets.get($0);const property=UTF8ToString($1);target[property]=$2})()},1519234:($0,$1,$2)=>{(()=>{const target=Module.targets.get($0);const property=UTF8ToString($1);target[property]=$2})()},1519348:($0,$1,$2)=>{(()=>{const target=Module.targets.get($0);const property=UTF8ToString($1);const newValue=UTF8ToString($2);target[property]=newValue})()},1519503:($0,$1,$2)=>{let target=Module.targets.get($0);const property=$1;const rv=$2;if(target instanceof ArrayBuffer){if(!Module.bufferMaps.has(target)){Module.bufferMaps.set(target,new Uint8Array(target))}target=Module.bufferMaps.get(target)}if(!(property in target)){return Module.jsToZval(undefined,rv)}Module.jsToZval(target[property],rv)},1519860:($0,$1,$2,$3)=>{(()=>{const target=Module.targets.get($0);const property=$1;const funcPtr=$2;const zvalPtr=$3;target[property]=Module.callableToJs(funcPtr);const gc=Module.ccall(\"vrzno_expose_closure\",\"number\",[\"number\"],[funcPtr]);Module.fRegistry.register(target[property],gc,target[property])})()},1520181:($0,$1,$2)=>{(()=>{const target=Module.targets.get($0);const property=$1;const zvalPtr=$2;const zo=Module.ccall(\"vrzno_expose_object\",\"number\",[\"number\"],[zvalPtr]);target[property]=Module.marshalZObject(zo)})()},1520410:($0,$1,$2)=>{(()=>{const target=Module.targets.get($0);const property=$1;const zvalPtr=$2;const za=Module.ccall(\"vrzno_expose_array\",\"number\",[\"number\"],[zvalPtr]);target[property]=Module.marshalZArray(za)})()},1520637:($0,$1)=>{(()=>{const target=Module.targets.get($0);const property=$1;delete target[property]})()},1520739:($0,$1)=>{(()=>{const target=Module.targets.get($0);const property=$1;target[property]=null})()},1520841:($0,$1)=>{(()=>{const target=Module.targets.get($0);const property=$1;target[property]=false})()},1520944:($0,$1)=>{(()=>{const target=Module.targets.get($0);const property=$1;target[property]=true})()},1521046:($0,$1,$2)=>{(()=>{const target=Module.targets.get($0);const property=$1;target[property]=$2})()},1521146:($0,$1,$2)=>{(()=>{const target=Module.targets.get($0);const property=$1;target[property]=$2})()},1521246:($0,$1,$2)=>{(()=>{const target=Module.targets.get($0);const property=$1;const newValue=UTF8ToString($2);target[property]=newValue})()},1521387:($0,$1,$2)=>{const target=Module.targets.get($0);const property=$1;const check_empty=$2;if(Array.isArray(target)){return typeof target[property]!==\"undefined\"}if(target instanceof ArrayBuffer){if(!Module.bufferMaps.has(target)){Module.bufferMaps.set(target,new Uint8Array(target))}const targetBytes=Module.bufferMaps.get(target);return targetBytes[property]!==\"undefined\"}if(!check_empty){return property in target}else{return!!target[property]}},1521866:($0,$1)=>{(()=>{const target=Module.targets.get($0);const property=UTF8ToString($1);delete target[property]})()},1521982:($0,$1)=>{(()=>{const target=Module.targets.get($0);const property=$1;delete target[property]})()},1522084:$0=>{const target=Module.targets.get($0);let json;if(typeof target===\"function\"){json=JSON.stringify({})}else{try{json=JSON.stringify({...target})}catch{json=JSON.stringify({})}}const str=String(json);const len=1+lengthBytesUTF8(str);const loc=_malloc(len);stringToUTF8(str,loc,len);return loc},1522421:($0,$1)=>{const target=Module.targets.get($0);const property=UTF8ToString($1);return property in target},1522526:($0,$1,$2)=>{const target=Module.targets.get($0);const property_name=UTF8ToString($1);const rv=$2;return Module.jsToZval(target[property_name],rv)},1522675:($0,$1,$2,$3,$4,$5)=>{const target=Module.targets.get($0);const method_name=UTF8ToString($1);const argp=$2;const argc=$3;const size=$4;const rv=$5;const args=[];for(let i=0;i{const target=Module.targets.get($0);const argv=$1;const argc=$2;const size=$3;const rv=$4;const args=[];for(let i=0;i{const _class=Module._classes.get($0);const argv=$1;const argc=$2;const size=$3;const args=[];for(let i=0;i{const target=Module.targets.get($0);Module.tacked.delete(target);Module.targets.remove(target)},1523709:$0=>{const target=Module.targets.get($0);const str=String(target);const len=1+lengthBytesUTF8(str);const loc=_malloc(len);stringToUTF8(str,loc,len);return loc},1523885:()=>{const context={};Module.tacked.add(context);return Module.targets.add(context)},1523973:($0,$1)=>{const context=Module.targets.get($0);const method=UTF8ToString($1);context.method=method},1524079:($0,$1)=>{(()=>{const context=Module.targets.get($0);const headerLine=UTF8ToString($1);const colon=headerLine.indexOf(\":\");const key=headerLine.substr(0,colon).trim();const val=headerLine.substr(1+colon).trim();context.headers=context.headers??{};context.headers[key]=val})()},1524379:($0,$1)=>{(()=>{const context=Module.targets.get($0);const headerLines=UTF8ToString($1);headerLines.split(\"\\n\").forEach(headerLine=>{const context=Module.targets.get($0);const colon=headerLine.indexOf(\":\");const key=headerLine.substr(0,colon).trim();const val=headerLine.substr(1+colon).trim();context.headers=context.headers??{};context.headers[key]=val})})()},1524772:($0,$1,$2)=>{(()=>{const context=Module.targets.get($0);context.body=Module.HEAPU8.slice($1,$1+$2)})()},1524879:($0,$1)=>{const context=Module.targets.get($0);context.ignoreErrors=$1},1524954:$0=>{const{status}=Module.targets.get($0);return status},1525018:$0=>{const str=String(eval(UTF8ToString($0)));const len=lengthBytesUTF8(str)+1;const loc=_malloc(len);stringToUTF8(str,loc,len);return loc},1525171:($0,$1)=>{const funcName=UTF8ToString($0);const argJson=UTF8ToString($1);const func=globalThis[funcName];const args=JSON.parse(argJson||\"[]\")||[];const str=String(func(...args));const len=lengthBytesUTF8(str)+1;const loc=_malloc(len);stringToUTF8(str,loc,len);return loc},1525467:($0,$1)=>{const timeout=Number(UTF8ToString($0));const funcPtr=$1;setTimeout(()=>{Module.ccall(\"vrzno_exec_callback\",\"number\",[\"number\",\"number\",\"number\",\"number\"],[funcPtr,null,0,0]);Module.ccall(\"vrzno_del_callback\",\"number\",[\"number\"],[funcPtr])},timeout)},1525751:($0,$1)=>{const name=UTF8ToString($0);const rv=$1;Module.jsToZval(Module[name],rv)},1525836:($0,$1)=>{const name=UTF8ToString($0);const rv=$1;Module.jsToZval(Module.shared[name],rv)},1525928:($0,$1)=>{const name=UTF8ToString($0);const rv=$1;Module.jsToZval(import(/* webpackIgnore: true */ name),rv)},1526013:()=>{Module.tacked.clear();Module.classes=new WeakMap;Module._classes=new Module.WeakerMap;Module.callables=new WeakMap;Module._callables=new Module.WeakerMap;[...Module.registered.entries()].forEach(([gc,unregisterToken])=>{Module.fRegistry.unregister(unregisterToken);Module.registered.delete(gc)})},1526340:()=>{Module.hasVrzno=true;const IS_UNDEF=0;const IS_NULL=1;const IS_FALSE=2;const IS_TRUE=3;const IS_LONG=4;const IS_DOUBLE=5;const IS_STRING=6;const IS_ARRAY=7;const IS_OBJECT=8;Module.tacked=new Set;const _FinalizationRegistry=globalThis.FinalizationRegistry||class{register(){}unregister(){}};const FinalizationRegistryWrapper=class{constructor(callback){this.registry=new _FinalizationRegistry(gc=>{Module.ccall(\"vrzno_expose_dec_refcount\",\"number\",[\"number\"],[gc])})}register(target,gc,unregisterToken){if(Module.unregisterTokens.has(unregisterToken)){return}Module.ccall(\"vrzno_expose_inc_refcount\",\"number\",[\"number\"],[gc]);this.registry.register(target,gc,unregisterToken);Module.unregisterTokens.set(unregisterToken,gc);Module.registered.set(gc,unregisterToken)}unregister(unregisterToken){this.registry.unregister(unregisterToken);if(Module.unregisterTokens.has(unregisterToken)){const gc=Module.unregisterTokens.get(unregisterToken);Module.unregisterTokens.delete(unregisterToken);Module.registered.delete(gc)}}};const wRef=globalThis.WeakRef||class{constructor(val){this.val=val}deref(){return this.val}};Module.fRegistry=new FinalizationRegistryWrapper;Module.bufferMaps=new WeakMap;const getRegistry=weakerMap=>{const registry=new _FinalizationRegistry(key=>{if(weakerMap.registry!==registry){return}if(weakerMap.map.has(key)&&weakerMap.map.get(key).deref()){return}weakerMap.delete(key)});return registry};Module.WeakerMap=Module.WeakerMap||class WeakerMap{constructor(entries){this.map=new Map;this.registry=getRegistry(this);entries&&entries.forEach(([key,value])=>this.set(key,value))}get size(){return this.map.size}clear(){this.registry=getRegistry(this);this.map.clear()}delete(key){if(!this.has(key)){return}this.registry.unregister(this.get(key));this.map.delete(key)}[Symbol.iterator](){const mapIterator=this.map[Symbol.iterator]();return{next:()=>{do{const entry=mapIterator.next();if(entry.done){return{done:true}}const[key,ref]=entry.value;const value=ref.deref();if(!value){this.map.delete(key);continue}return{done:false,value:[key,value]}}while(true)}}}entries(){return{[Symbol.iterator]:()=>this[Symbol.iterator]()}}forEach(callback){for(const[k,v]of this){callback(v,k,this)}}get(key){if(!this.has(key)){return}const value=this.map.get(key).deref();if(!value){this.map.delete(key)}return value}has(key){if(!this.map.has(key)){return false}const result=this.map.get(key).deref();if(!result){this.map.delete(key)}return Boolean(result)}keys(){return[...this].map(v=>v[0])}set(key,value){if(typeof value!==\"function\"&&typeof value!==\"object\"){throw new Error(\"WeakerMap values must be objects.\")}if(this.has(key)){this.registry.unregister(this.get(key))}this.registry.register(value,key,value);return this.map.set(key,new wRef(value))}values(){return[...this].map(v=>v[1])}};Module.unregisterTokens=new WeakMap;Module.registered=new Module.WeakerMap;Module.marshalZObject=(zo,type)=>{const nativeTargetId=Module.ccall(\"vrzno_expose_target\",\"number\",[\"number\"],[zo]);if(nativeTargetId){return Module.targets.get(nativeTargetId)}const proxy=new Proxy({},{ownKeys:target=>{const keysLoc=Module.ccall(\"vrzno_expose_object_keys\",\"number\",[\"number\"],[zo]);if(keysLoc){const keyJson=UTF8ToString(keysLoc);const keys=JSON.parse(keyJson);_free(keysLoc);keys.push(...Reflect.ownKeys(target));return keys}return[]},has:(target,prop)=>{const len=lengthBytesUTF8(prop)+1;const namePtr=_malloc(len);stringToUTF8(prop,namePtr,len);const propPtr=Module.ccall(\"vrzno_expose_property_pointer\",\"number\",[\"number\",\"number\"],[zo,namePtr]);_free(namePtr);return propPtr},get:(target,prop)=>{let retPtr;if(prop===Symbol.iterator){const keysLoc=Module.ccall(\"vrzno_expose_object_keys\",\"number\",[\"number\"],[zo]);const keyJson=UTF8ToString(keysLoc);const keys=JSON.parse(keyJson);_free(keysLoc);const iterator=()=>{let current=-1;return{next(){const done=++current>=keys.length;return{done,value:[keys[current],Module.zvalToJS(Module.ccall(\"vrzno_expose_property_pointer\",\"number\",[\"number\",\"string\"],[zo,keys[current]]))]}}}};Module.fRegistry.register(iterator,zo,iterator);return iterator}if(prop===Symbol.toPrimitive){const method=\"__toString\";const len=lengthBytesUTF8(method)+1;const loc=_malloc(len);stringToUTF8(method,loc,len);const methodPtr=Module.ccall(\"vrzno_expose_method_pointer\",\"number\",[\"number\",\"number\"],[zo,loc]);_free(loc);return()=>Module.callableToJs(methodPtr,zo)()}prop=String(prop);const len=lengthBytesUTF8(prop)+1;const loc=_malloc(len);stringToUTF8(prop,loc,len);const methodPtr=Module.ccall(\"vrzno_expose_method_pointer\",\"number\",[\"number\",\"number\"],[zo,loc]);if(methodPtr){const wrapped=Module.callableToJs(methodPtr,zo);const gc=Module.ccall(\"vrzno_expose_closure\",\"number\",[\"number\"],[methodPtr]);Module.fRegistry.register(wrapped,gc,wrapped);return wrapped}retPtr=Module.ccall(\"vrzno_expose_property_pointer\",\"number\",[\"number\",\"number\"],[zo,loc]);_free(loc);if(!retPtr){return}return Module.zvalToJS(retPtr)??Reflect.get(target,prop)},getOwnPropertyDescriptor:(target,prop)=>{prop=String(prop);const len=lengthBytesUTF8(prop)+1;const namePtr=_malloc(len);stringToUTF8(prop,namePtr,len);const retPtr=Module.ccall(\"vrzno_expose_property_pointer\",\"number\",[\"number\",\"number\"],[zo,namePtr]);_free(namePtr);const proxy=Module.zvalToJS(retPtr);return{configurable:true,enumerable:true,value:target[prop]}}});Module.fRegistry.register(proxy,zo,proxy);return proxy};Module.marshalZArray=(za,type)=>{const proxy=new Proxy({},{ownKeys:target=>{const keysLoc=Module.ccall(\"vrzno_expose_array_keys\",\"number\",[\"number\"],[za]);if(keysLoc){const keyJson=UTF8ToString(keysLoc);const keys=JSON.parse(keyJson);_free(keysLoc);keys.push(...Reflect.ownKeys(target));return keys}return[]},has:(target,prop)=>{switch(typeof prop){case\"number\":return!!Module.ccall(\"vrzno_expose_dimension_pointer\",\"number\",[\"number\",\"number\"],[za,prop]);case\"string\":const len=lengthBytesUTF8(prop)+1;const namePtr=_malloc(len);stringToUTF8(prop,namePtr,len);const propPtr=Module.ccall(\"vrzno_expose_key_pointer\",\"number\",[\"number\",\"number\"],[za,namePtr]);_free(namePtr);return propPtr;default:return false}},get:(target,prop)=>{let retPtr;if(prop===Symbol.iterator){const max=Module.ccall(\"vrzno_expose_array_length\",\"number\",[\"number\"],[za]);const iterator=()=>{let current=-1;return{next(){const done=++current>=max;return{done,value:Module.zvalToJS(Module.ccall(\"vrzno_expose_dimension_pointer\",\"number\",[\"number\",\"number\"],[za,current]))}}}};Module.fRegistry.register(iterator,za,iterator);return iterator}if(prop===Symbol.toPrimitive){}switch(typeof prop){case\"number\":retPtr=Module.ccall(\"vrzno_expose_dimension_pointer\",\"number\",[\"number\",\"number\"],[za,prop]);break;case\"string\":prop=String(prop);const len=lengthBytesUTF8(prop)+1;const loc=_malloc(len);stringToUTF8(prop,loc,len);retPtr=Module.ccall(\"vrzno_expose_key_pointer\",\"number\",[\"number\",\"number\"],[za,loc]);_free(loc);break;default:return false}if(!retPtr){return}const proxy=Module.zvalToJS(retPtr);return proxy??Reflect.get(target,prop)},getOwnPropertyDescriptor:(target,prop)=>{let retPtr;switch(typeof prop){case\"number\":retPtr=Module.ccall(\"vrzno_expose_dimension_pointer\",\"number\",[\"number\",\"number\"],[za,prop]);break;case\"string\":const len=lengthBytesUTF8(prop)+1;const namePtr=_malloc(len);stringToUTF8(prop,namePtr,len);retPtr=Module.ccall(\"vrzno_expose_key_pointer\",\"number\",[\"number\",\"number\"],[za,namePtr]);_free(namePtr);break;default:return false}const proxy=Module.zvalToJS(retPtr);return{configurable:true,enumerable:true,value:target[prop]}}});Module.fRegistry.register(proxy,za,proxy);return proxy};Module.callableToJs=(funcPtr,zo=null)=>{if(Module._callables.has(funcPtr)){return Module._callables.get(funcPtr)}const wrapped=(...args)=>{if(!Module.callables.has(wrapped)){console.warn(`Tried to call ${wrapped.name}, but PHPs memory has been refreshed.`);return}let paramsPtr=null;if(args.length){paramsPtr=Module.ccall(\"vrzno_expose_create_params\",\"number\",[\"number\"],[args.length]);for(let i=0;i{if(!zv){return}zv=Module.ccall(\"vrzno_expose_zval_deref\",\"number\",[\"number\"],[zv]);const nativeTargetId=Module.ccall(\"vrzno_expose_zval_target\",\"number\",[\"number\"],[zv]);if(nativeTargetId){return Module.targets.get(nativeTargetId)}const type=Module.ccall(\"vrzno_expose_type\",\"number\",[\"number\"],[zv]);const zf=Module.ccall(\"vrzno_expose_callable\",\"number\",[\"number\"],[zv]);if(zf&&type!==IS_STRING){const wrapped=Module.callableToJs(zf);const gc=Module.ccall(\"vrzno_expose_closure\",\"number\",[\"number\"],[zf]);Module.fRegistry.register(wrapped,gc,wrapped);return wrapped}let valPtr;switch(type){case IS_UNDEF:return undefined;break;case IS_NULL:return null;break;case IS_TRUE:return true;break;case IS_FALSE:return false;break;case IS_LONG:return Module.ccall(\"vrzno_expose_long\",\"number\",[\"number\"],[zv]);break;case IS_DOUBLE:valPtr=Module.ccall(\"vrzno_expose_double\",\"number\",[\"number\"],[zv]);if(!valPtr){return null}return getValue(valPtr,\"double\");break;case IS_STRING:valPtr=Module.ccall(\"vrzno_expose_string\",\"number\",[\"number\"],[zv]);if(!valPtr){return null}return UTF8ToString(valPtr);break;case IS_ARRAY:const za=Module.ccall(\"vrzno_expose_array\",\"number\",[\"number\"],[zv]);return Module.marshalZArray(za,type);break;case IS_OBJECT:const zo=Module.ccall(\"vrzno_expose_object\",\"number\",[\"number\"],[zv]);return Module.marshalZObject(zo,type);break;default:return null;break}});Module.jsToZval=Module.jsToZval||((value,rv)=>{if(typeof value===\"undefined\"){Module.ccall(\"vrzno_expose_create_undef\",\"number\",[\"number\"],[rv])}else if(value===null){Module.ccall(\"vrzno_expose_create_null\",\"number\",[\"number\"],[rv])}else if([true,false].includes(value)){Module.ccall(\"vrzno_expose_create_bool\",\"number\",[\"number\",\"number\"],[value,rv])}else if(value&&[\"function\",\"object\"].includes(typeof value)){const index=Module.targets.add(value);const isFunction=typeof value===\"function\"?index:0;const isConstructor=isFunction&&!!(value.prototype&&value.prototype.constructor);Module.tacked.add(value);Module.ccall(\"vrzno_expose_create_object_for_target\",\"number\",[\"number\",\"number\",\"number\",\"number\"],[index,isFunction,isConstructor,rv])}else if(typeof value===\"number\"){if(Number.isInteger(value)){Module.ccall(\"vrzno_expose_create_long\",\"number\",[\"number\",\"number\"],[value,rv])}else if(Number.isFinite(value)){Module.ccall(\"vrzno_expose_create_double\",\"number\",[\"number\",\"number\"],[value,rv])}}else if(typeof value===\"string\"){const len=lengthBytesUTF8(value)+1;const loc=_malloc(len);stringToUTF8(value,loc,len);Module.ccall(\"vrzno_expose_create_string\",\"number\",[\"number\",\"number\"],[loc,rv]);_free(loc)}});Module.UniqueIndex=Module.UniqueIndex||class UniqueIndex{constructor(){this.byObject=new WeakMap;this.byInteger=new Module.WeakerMap;this.id=0;Object.defineProperty(this,\"add\",{configurable:false,writable:false,value:callback=>{if(this.byObject.has(callback)){const id=this.byObject.get(callback);return id}const newid=++this.id;this.byObject.set(callback,newid);this.byInteger.set(newid,callback);return newid}});Object.defineProperty(this,\"has\",{configurable:false,writable:false,value:obj=>{if(this.byObject.has(obj)){return this.byObject.get(obj)}}});Object.defineProperty(this,\"hasId\",{configurable:false,writable:false,value:address=>{if(this.byInteger.has(address)){return this.byInteger.get(address)}}});Object.defineProperty(this,\"get\",{configurable:false,writable:false,value:address=>{if(this.byInteger.has(address)){return this.byInteger.get(address)}}});Object.defineProperty(this,\"getId\",{configurable:false,writable:false,value:obj=>{if(this.byObject.has(obj)){return this.byObject.get(obj)}}});Object.defineProperty(this,\"remove\",{configurable:false,writable:false,value:address=>{const obj=this.byInteger.get(address);if(obj){this.byObject.delete(obj);this.byInteger.delete(address)}}})}};Module.classes=new WeakMap;Module._classes=new Module.WeakerMap;Module.targets=new Module.UniqueIndex;Module.callables=new WeakMap;Module._callables=new Module.WeakerMap;Module.targets.add(globalThis);Module.PdoParams=new WeakMap},1540549:$0=>{const target=Module.targets.get($0);return Module.classes.get(target)},1540627:($0,$1)=>{const target=Module.targets.get($0);Module.classes.set(target,$1);Module._classes.set($1,target)},1540735:($0,$1,$2,$3)=>{const target=Module.targets.get($0);const dest=$1;const fpos=$2;let count=$3;if(target.status>=400&&!target.context.ignoreErrors){return 0}if(fpos>=target.buffer.length){count=0}else if(fpos+count>target.buffer.length){count=target.buffer.length-fpos}if(count){Module.HEAPU8.set(target.buffer.slice(fpos,fpos+count),dest)}return count},1541127:$0=>{const parsed=Module.targets.get($0);Module.tacked.delete(parsed)},1541200:$0=>{const _class=Module._classes.get($0);if(_class){return Module.targets.getId(_class)}return Module.targets.add(globalThis)},1541335:($0,$1)=>{let target=Module.targets.get($0);const property=$1;if(target instanceof ArrayBuffer){if(!Module.bufferMaps.has(target)){Module.bufferMaps.set(target,new Uint8Array(target))}target=Module.bufferMaps.get(target)}if(Array.isArray(target)||ArrayBuffer.isView(target)){if(property>=0&&property{let target=Module.targets.get($0);const property=$1;const rv=$2;if(target instanceof ArrayBuffer){if(!Module.bufferMaps.has(target)){Module.bufferMaps.set(target,new Uint8Array(target))}target=Module.bufferMaps.get(target)}return Module.jsToZval(target[property],rv)},1541993:$0=>{const target=Module.targets.get($0);if(target){Module.tacked.delete(target)}}};function __asyncjs__pdo_pglite_real_stmt_execute(targetId,error){return Asyncify.handleAsync(async()=>{const statement=Module.targets.get(targetId);if(!Module.PdoParams.has(statement)){Module.PdoParams.set(statement,[])}const params=Module.PdoParams.get(statement);try{const result=await statement(...params);const rows=result.rows??[];const _fields=result.fields??[];const fields=new Map;_fields.forEach(field=>{fields.set(field.name,field)});const utf8decoder=new TextDecoder;const mapped=rows.map(row=>{const _row={};for(const[key,val]of Object.entries(row)){if(fields.has(key)&&fields.get(key).dataTypeID===17){_row[key]=val?utf8decoder.decode(val):null;continue}_row[key]=val}return _row});Module.tacked.add(mapped);return Module.targets.add(mapped)}catch(exception){const message=String(exception.message);const len=lengthBytesUTF8(message)+1;const loc=_malloc(len);console.error(message,statement.query,exception);stringToUTF8(message,loc,len);setValue(error,loc,\"*\");return 0}})}__asyncjs__pdo_pglite_real_stmt_execute.sig=\"iii\";function __asyncjs__pdo_pglite_real_doer(dbId,sql){return Asyncify.handleAsync(async()=>{console.log(\"pdo_pglite_handle_doer\",dbId,UTF8ToString(sql));const db=Module.targets.get(dbId);await db.query(UTF8ToString(sql))})}__asyncjs__pdo_pglite_real_doer.sig=\"vii\";function __asyncjs__pdo_pglite_real_handle_begin(dbId){return Asyncify.handleAsync(async()=>{const db=Module.targets.get(dbId);await db.query(\"BEGIN\")})}__asyncjs__pdo_pglite_real_handle_begin.sig=\"vi\";function __asyncjs__pdo_pglite_real_handle_commit(dbId){return Asyncify.handleAsync(async()=>{const db=Module.targets.get(dbId);await db.query(\"COMMIT\")})}__asyncjs__pdo_pglite_real_handle_commit.sig=\"vi\";function __asyncjs__pdo_pglite_real_handle_rollback(dbId){return Asyncify.handleAsync(async()=>{const db=Module.targets.get(dbId);await db.query(\"ROLLBACK\")})}__asyncjs__pdo_pglite_real_handle_rollback.sig=\"vi\";function __asyncjs__pdo_pglite_real_last_insert_id(dbId,namePtr,errorPtr){return Asyncify.handleAsync(async()=>{try{const db=Module.targets.get(dbId);if(namePtr){const name=UTF8ToString(namePtr);console.log(\"SELECT CURRVAL($1)\",name);const result=await db.query(\"SELECT CURRVAL($1)\",name);console.log(result)}else{console.log(\"SELECT LASTVAL()\");const result=await db.query(\"SELECT LASTVAL()\");console.log(result)}}catch(error){console.error(error);const str=String(error);const len=lengthBytesUTF8(str);const loc=_malloc(len);stringToUTF8(str,loc,len);setValue(errorPtr,loc,\"*\")}return 0})}__asyncjs__pdo_pglite_real_last_insert_id.sig=\"iiii\";function __asyncjs__php_stream_fetch_real_open(path,_context,ptrsize,headersv,headersc){return Asyncify.handleAsync(async()=>{const pathString=UTF8ToString(path);const context=Module.targets.get(_context)||{};const response=await fetch(pathString,context);const buffer=new Uint8Array(await response.arrayBuffer());const status=response.status;const headerLines=[...response.headers.entries()].map(([key,val])=>`${key}: ${val}`);headerLines.unshift(`HTTP/1.1 ${response.status} ${response.statusText}`);const headersloc=_malloc(ptrsize*headerLines.length);setValue(headersv,headersloc,\"*\");setValue(headersc,headerLines.length,\"i32\");let i=0;for(const line of headerLines){const len=lengthBytesUTF8(line);const loc=_malloc(len);stringToUTF8(line,loc,len);setValue(headersloc+i*ptrsize,loc,\"i\"+8*ptrsize);i++}const parsed={status,buffer,context};Module.tacked.add(parsed);Module.tacked.delete(context);return Module.targets.add(parsed)})}__asyncjs__php_stream_fetch_real_open.sig=\"iiiiii\";function __asyncjs__vrzno_await_internal(targetId,rv){return Asyncify.handleAsync(async()=>{const target=Module.targets.get(targetId);const result=await target;Module.jsToZval(result,rv)})}__asyncjs__vrzno_await_internal.sig=\"vii\";function ExitStatus(status){this.name=\"ExitStatus\";this.message=`Program terminated with exit(${status})`;this.status=status}var GOT={};var currentModuleWeakSymbols=new Set([]);var GOTHandler={get(obj,symName){var rtn=GOT[symName];if(!rtn){rtn=GOT[symName]=new WebAssembly.Global({value:\"i32\",mutable:true})}if(!currentModuleWeakSymbols.has(symName)){rtn.required=true}return rtn}};var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var UTF8Decoder=typeof TextDecoder!=\"undefined\"?new TextDecoder:undefined;var UTF8ArrayToString=(heapOrArray,idx,maxBytesToRead)=>{idx>>>=0;var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str=\"\";while(idx>10,56320|ch&1023)}}return str};var getDylinkMetadata=binary=>{var offset=0;var end=0;function getU8(){return binary[offset++]}function getLEB(){var ret=0;var mul=1;while(1){var byte=binary[offset++];ret+=(byte&127)*mul;mul*=128;if(!(byte&128))break}return ret}function getString(){var len=getLEB();offset+=len;return UTF8ArrayToString(binary,offset-len,len)}function failIf(condition,message){if(condition)throw new Error(message)}var name=\"dylink.0\";if(binary instanceof WebAssembly.Module){var dylinkSection=WebAssembly.Module.customSections(binary,name);if(dylinkSection.length===0){name=\"dylink\";dylinkSection=WebAssembly.Module.customSections(binary,name)}failIf(dylinkSection.length===0,\"need dylink section\");binary=new Uint8Array(dylinkSection[0]);end=binary.length}else{var int32View=new Uint32Array(new Uint8Array(binary.subarray(0,24)).buffer);var magicNumberFound=int32View[0]==1836278016;failIf(!magicNumberFound,\"need to see wasm magic number\");failIf(binary[8]!==0,\"need the dylink section to be first\");offset=9;var section_size=getLEB();end=offset+section_size;name=getString()}var customSection={neededDynlibs:[],tlsExports:new Set,weakImports:new Set};if(name==\"dylink\"){customSection.memorySize=getLEB();customSection.memoryAlign=getLEB();customSection.tableSize=getLEB();customSection.tableAlign=getLEB();var neededDynlibsCount=getLEB();for(var i=0;i>>0];case\"i8\":return HEAP8[ptr>>>0];case\"i16\":return HEAP16[ptr>>>1>>>0];case\"i32\":return HEAP32[ptr>>>2>>>0];case\"i64\":abort(\"to do getValue(i64) use WASM_BIGINT\");case\"float\":return HEAPF32[ptr>>>2>>>0];case\"double\":return HEAPF64[ptr>>>3>>>0];case\"*\":return HEAPU32[ptr>>>2>>>0];default:abort(`invalid type for getValue: ${type}`)}}var newDSO=(name,handle,syms)=>{var dso={refcount:Infinity,name,exports:syms,global:true};LDSO.loadedLibsByName[name]=dso;if(handle!=undefined){LDSO.loadedLibsByHandle[handle]=dso}return dso};var LDSO={loadedLibsByName:{},loadedLibsByHandle:{},init(){newDSO(\"__main__\",0,wasmImports)}};var ___heap_base=35240736;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var getMemory=size=>{if(runtimeInitialized){return _calloc(size,1)}var ret=___heap_base;var end=ret+alignMemory(size,16);___heap_base=end;GOT[\"__heap_base\"].value=end;return ret};var isInternalSym=symName=>[\"__cpp_exception\",\"__c_longjmp\",\"__wasm_apply_data_relocs\",\"__dso_handle\",\"__tls_size\",\"__tls_align\",\"__set_stack_limits\",\"_emscripten_tls_init\",\"__wasm_init_tls\",\"__wasm_call_ctors\",\"__start_em_asm\",\"__stop_em_asm\",\"__start_em_js\",\"__stop_em_js\"].includes(symName)||symName.startsWith(\"__em_js__\");var uleb128Encode=(n,target)=>{if(n<128){target.push(n)}else{target.push(n%128|128,n>>7)}};var sigToWasmTypes=sig=>{var typeNames={i:\"i32\",j:\"i64\",f:\"f32\",d:\"f64\",e:\"externref\",p:\"i32\"};var type={parameters:[],results:sig[0]==\"v\"?[]:[typeNames[sig[0]]]};for(var i=1;i{var sigRet=sig.slice(0,1);var sigParam=sig.slice(1);var typeCodes={i:127,p:127,j:126,f:125,d:124,e:111};target.push(96);uleb128Encode(sigParam.length,target);for(var i=0;i{if(typeof WebAssembly.Function==\"function\"){return new WebAssembly.Function(sigToWasmTypes(sig),func)}var typeSectionBody=[1];generateFuncType(sig,typeSectionBody);var bytes=[0,97,115,109,1,0,0,0,1];uleb128Encode(typeSectionBody.length,bytes);bytes.push(...typeSectionBody);bytes.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0);var module=new WebAssembly.Module(new Uint8Array(bytes));var instance=new WebAssembly.Instance(module,{e:{f:func}});var wrappedFunc=instance.exports[\"f\"];return wrappedFunc};var wasmTableMirror=[];var wasmTable=new WebAssembly.Table({initial:4984,element:\"anyfunc\"});var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var updateTableMap=(offset,count)=>{if(functionsInTableMap){for(var i=offset;i{if(!functionsInTableMap){functionsInTableMap=new WeakMap;updateTableMap(0,wasmTable.length)}return functionsInTableMap.get(func)||0};var freeTableIndexes=[];var getEmptyTableSlot=()=>{if(freeTableIndexes.length){return freeTableIndexes.pop()}try{wasmTable.grow(1)}catch(err){if(!(err instanceof RangeError)){throw err}throw\"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.\"}return wasmTable.length-1};var setWasmTableEntry=(idx,func)=>{wasmTable.set(idx,func);wasmTableMirror[idx]=wasmTable.get(idx)};var addFunction=(func,sig)=>{var rtn=getFunctionAddress(func);if(rtn){return rtn}var ret=getEmptyTableSlot();try{setWasmTableEntry(ret,func)}catch(err){if(!(err instanceof TypeError)){throw err}var wrapped=convertJsFunctionToWasm(func,sig);setWasmTableEntry(ret,wrapped)}functionsInTableMap.set(func,ret);return ret};var updateGOT=(exports,replace)=>{for(var symName in exports){if(isInternalSym(symName)){continue}var value=exports[symName];if(symName.startsWith(\"orig$\")){symName=symName.split(\"$\")[1];replace=true}GOT[symName]||=new WebAssembly.Global({value:\"i32\",mutable:true});if(replace||GOT[symName].value==0){if(typeof value==\"function\"){GOT[symName].value=addFunction(value)}else if(typeof value==\"number\"){GOT[symName].value=value}else{err(`unhandled export type for '${symName}': ${typeof value}`)}}}};var relocateExports=(exports,memoryBase,replace)=>{var relocated={};for(var e in exports){var value=exports[e];if(typeof value==\"object\"){value=value.value}if(typeof value==\"number\"){value+=memoryBase}relocated[e]=value}updateGOT(relocated,replace);return relocated};var isSymbolDefined=symName=>{var existing=wasmImports[symName];if(!existing||existing.stub){return false}if(symName in asyncifyStubs&&!asyncifyStubs[symName]){return false}return true};var setTempRet0=val=>__emscripten_tempret_set(val);var setTempRet0=setTempRet0;Module[\"setTempRet0\"]=setTempRet0;var createDyncallWrapper=sig=>{var sections=[];var prelude=[0,97,115,109,1,0,0,0];sections.push(prelude);var wrappersig=[sig[0].replace(\"j\",\"i\"),\"i\",sig.slice(1).replace(/j/g,\"ii\")].join(\"\");var typeSectionBody=[3];generateFuncType(wrappersig,typeSectionBody);generateFuncType(sig,typeSectionBody);generateFuncType(\"vi\",typeSectionBody);var typeSection=[1];uleb128Encode(typeSectionBody.length,typeSection);typeSection.push(...typeSectionBody);sections.push(typeSection);var importSection=[2,15,2,1,101,1,116,1,112,0,0,1,101,1,114,0,2];sections.push(importSection);var functionSection=[3,2,1,0];sections.push(functionSection);var exportSection=[7,5,1,1,102,0,1];sections.push(exportSection);var convert_code=[];if(sig[0]===\"j\"){convert_code=[1,1,126]}else{convert_code.push(0)}function localGet(j){convert_code.push(32);uleb128Encode(j,convert_code)}var j=1;for(var i=1;i{sig=sig.replace(/p/g,\"i\");if(!(\"dynCall_\"+sig in Module)){Module[\"dynCall_\"+sig]=createDyncallWrapper(sig)}var f=Module[\"dynCall_\"+sig];return f(ptr,...args)};var dynCall=(sig,ptr,args=[])=>{var rtn=dynCallLegacy(sig,ptr,args);return sig[0]==\"p\"?rtn>>>0:rtn};var stackSave=()=>_emscripten_stack_get_current();var stackRestore=val=>__emscripten_stack_restore(val);var createInvokeFunction=sig=>(ptr,...args)=>{var sp=stackSave();try{return dynCall(sig,ptr,args)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}};var resolveGlobalSymbol=(symName,direct=false)=>{var sym;if(direct&&\"orig$\"+symName in wasmImports){symName=\"orig$\"+symName}if(isSymbolDefined(symName)){sym=wasmImports[symName]}else if(symName.startsWith(\"invoke_\")){sym=wasmImports[symName]=createInvokeFunction(symName.split(\"_\")[1])}return{sym,name:symName}};var UTF8ToString=(ptr,maxBytesToRead)=>{ptr>>>=0;return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):\"\"};var loadWebAssemblyModule=(binary,flags,libName,localScope,handle)=>{var metadata=getDylinkMetadata(binary);currentModuleWeakSymbols=metadata.weakImports;function loadModule(){var firstLoad=!handle||!HEAP8[handle+8>>>0];if(firstLoad){var memAlign=Math.pow(2,metadata.memoryAlign);var memoryBase=metadata.memorySize?alignMemory(getMemory(metadata.memorySize+memAlign),memAlign):0;var tableBase=metadata.tableSize?wasmTable.length:0;if(handle){HEAP8[handle+8>>>0]=1;HEAPU32[handle+12>>>2>>>0]=memoryBase;HEAP32[handle+16>>>2>>>0]=metadata.memorySize;HEAPU32[handle+20>>>2>>>0]=tableBase;HEAP32[handle+24>>>2>>>0]=metadata.tableSize}}else{memoryBase=HEAPU32[handle+12>>>2>>>0];tableBase=HEAPU32[handle+20>>>2>>>0]}var tableGrowthNeeded=tableBase+metadata.tableSize-wasmTable.length;if(tableGrowthNeeded>0){wasmTable.grow(tableGrowthNeeded)}var moduleExports;function resolveSymbol(sym){var resolved=resolveGlobalSymbol(sym).sym;if(!resolved&&localScope){resolved=localScope[sym]}if(!resolved){resolved=moduleExports[sym]}return resolved}var proxyHandler={get(stubs,prop){switch(prop){case\"__memory_base\":return memoryBase;case\"__table_base\":return tableBase}if(prop in wasmImports&&!wasmImports[prop].stub){return wasmImports[prop]}if(!(prop in stubs)){var resolved;stubs[prop]=(...args)=>{resolved||=resolveSymbol(prop);return resolved(...args)}}return stubs[prop]}};var proxy=new Proxy({},proxyHandler);var info={\"GOT.mem\":new Proxy({},GOTHandler),\"GOT.func\":new Proxy({},GOTHandler),env:proxy,wasi_snapshot_preview1:proxy};function postInstantiation(module,instance){updateTableMap(tableBase,metadata.tableSize);moduleExports=relocateExports(instance.exports,memoryBase);moduleExports=Asyncify.instrumentWasmExports(moduleExports);if(!flags.allowUndefined){reportUndefinedSymbols()}function addEmAsm(addr,body){var args=[];var arity=0;for(;arity<16;arity++){if(body.indexOf(\"$\"+arity)!=-1){args.push(\"$\"+arity)}else{break}}args=args.join(\",\");var func=`(${args}) => { ${body} };`;ASM_CONSTS[start]=eval(func)}if(\"__start_em_asm\"in moduleExports){var start=moduleExports[\"__start_em_asm\"];var stop=moduleExports[\"__stop_em_asm\"];while(start ${body};`;moduleExports[name]=eval(func)}for(var name in moduleExports){if(name.startsWith(\"__em_js__\")){var start=moduleExports[name];var jsString=UTF8ToString(start);var parts=jsString.split(\"<::>\");addEmJs(name.replace(\"__em_js__\",\"\"),parts[0],parts[1]);delete moduleExports[name]}}var applyRelocs=moduleExports[\"__wasm_apply_data_relocs\"];if(applyRelocs){if(runtimeInitialized){applyRelocs()}else{__RELOC_FUNCS__.push(applyRelocs)}}var init=moduleExports[\"__wasm_call_ctors\"];if(init){if(runtimeInitialized){init()}else{__ATINIT__.push(init)}}return moduleExports}if(flags.loadAsync){if(binary instanceof WebAssembly.Module){var instance=new WebAssembly.Instance(binary,info);return Promise.resolve(postInstantiation(binary,instance))}return WebAssembly.instantiate(binary,info).then(result=>postInstantiation(result.module,result.instance))}var module=binary instanceof WebAssembly.Module?binary:new WebAssembly.Module(binary);var instance=new WebAssembly.Instance(module,info);return postInstantiation(module,instance)}if(flags.loadAsync){return metadata.neededDynlibs.reduce((chain,dynNeeded)=>chain.then(()=>loadDynamicLibrary(dynNeeded,flags,localScope)),Promise.resolve()).then(loadModule)}metadata.neededDynlibs.forEach(needed=>loadDynamicLibrary(needed,flags,localScope));return loadModule()};var mergeLibSymbols=(exports,libName)=>{for(var[sym,exp]of Object.entries(exports)){const setImport=target=>{if(target in asyncifyStubs){asyncifyStubs[target]=exp}if(!isSymbolDefined(target)){wasmImports[target]=exp}};setImport(sym);if(sym.startsWith(\"dynCall_\")&&!Module.hasOwnProperty(sym)){Module[sym]=exp}}};var asyncLoad=(url,onload,onerror,noRunDep)=>{var dep=!noRunDep?getUniqueRunDependency(`al ${url}`):\"\";readAsync(url).then(arrayBuffer=>{onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},err=>{if(onerror){onerror()}else{throw`Loading data file \"${url}\" failed.`}});if(dep)addRunDependency(dep)};var preloadPlugins=Module[\"preloadPlugins\"]||[];var registerWasmPlugin=()=>{var wasmPlugin={promiseChainEnd:Promise.resolve(),canHandle:name=>!Module[\"noWasmDecoding\"]&&name.endsWith(\".so\"),handle:(byteArray,name,onload,onerror)=>{wasmPlugin[\"promiseChainEnd\"]=wasmPlugin[\"promiseChainEnd\"].then(()=>loadWebAssemblyModule(byteArray,{loadAsync:true,nodelete:true},name,{})).then(exports=>{preloadedWasm[name]=exports;onload(byteArray)},error=>{err(`failed to instantiate wasm: ${name}: ${error}`);onerror()})}};preloadPlugins.push(wasmPlugin)};var preloadedWasm={};function loadDynamicLibrary(libName,flags={global:true,nodelete:true},localScope,handle){var dso=LDSO.loadedLibsByName[libName];if(dso){if(!flags.global){if(localScope){Object.assign(localScope,dso.exports)}}else if(!dso.global){dso.global=true;mergeLibSymbols(dso.exports,libName)}if(flags.nodelete&&dso.refcount!==Infinity){dso.refcount=Infinity}dso.refcount++;if(handle){LDSO.loadedLibsByHandle[handle]=dso}return flags.loadAsync?Promise.resolve(true):true}dso=newDSO(libName,handle,\"loading\");dso.refcount=flags.nodelete?Infinity:1;dso.global=flags.global;function loadLibData(){if(handle){var data=HEAPU32[handle+28>>>2>>>0];var dataSize=HEAPU32[handle+32>>>2>>>0];if(data&&dataSize){var libData=HEAP8.slice(data,data+dataSize);return flags.loadAsync?Promise.resolve(libData):libData}}var libFile=locateFile(libName);if(flags.loadAsync){return new Promise((resolve,reject)=>asyncLoad(libFile,resolve,reject))}if(!readBinary){throw new Error(`${libFile}: file not found, and synchronous loading of external files is not available`)}return readBinary(libFile)}function getExports(){var preloaded=preloadedWasm[libName];if(preloaded){return flags.loadAsync?Promise.resolve(preloaded):preloaded}if(flags.loadAsync){return loadLibData().then(libData=>loadWebAssemblyModule(libData,flags,libName,localScope,handle))}return loadWebAssemblyModule(loadLibData(),flags,libName,localScope,handle)}function moduleLoaded(exports){if(dso.global){mergeLibSymbols(exports,libName)}else if(localScope){Object.assign(localScope,exports)}dso.exports=exports}if(flags.loadAsync){return getExports().then(exports=>{moduleLoaded(exports);return true})}moduleLoaded(getExports());return true}var reportUndefinedSymbols=()=>{for(var[symName,entry]of Object.entries(GOT)){if(entry.value==0){var value=resolveGlobalSymbol(symName,true).sym;if(!value&&!entry.required){continue}if(typeof value==\"function\"){entry.value=addFunction(value,value.sig)}else if(typeof value==\"number\"){entry.value=value}else{throw new Error(`bad export type for '${symName}': ${typeof value}`)}}}};var loadDylibs=()=>{if(!dynamicLibraries.length){reportUndefinedSymbols();return}addRunDependency(\"loadDylibs\");dynamicLibraries.reduce((chain,lib)=>chain.then(()=>loadDynamicLibrary(lib,{loadAsync:true,global:true,nodelete:true,allowUndefined:true})),Promise.resolve()).then(()=>{reportUndefinedSymbols();removeRunDependency(\"loadDylibs\")})};var noExitRuntime=Module[\"noExitRuntime\"]||false;function setValue(ptr,value,type=\"i8\"){if(type.endsWith(\"*\"))type=\"*\";switch(type){case\"i1\":HEAP8[ptr>>>0]=value;break;case\"i8\":HEAP8[ptr>>>0]=value;break;case\"i16\":HEAP16[ptr>>>1>>>0]=value;break;case\"i32\":HEAP32[ptr>>>2>>>0]=value;break;case\"i64\":abort(\"to do setValue(i64) use WASM_BIGINT\");case\"float\":HEAPF32[ptr>>>2>>>0]=value;break;case\"double\":HEAPF64[ptr>>>3>>>0]=value;break;case\"*\":HEAPU32[ptr>>>2>>>0]=value;break;default:abort(`invalid type for setValue: ${type}`)}}function _UTF8ToHtml(...args){return asyncifyStubs[\"UTF8ToHtml\"](...args)}_UTF8ToHtml.stub=true;asyncifyStubs[\"UTF8ToHtml\"]=undefined;function _UTF8Toisolat1(...args){return asyncifyStubs[\"UTF8Toisolat1\"](...args)}_UTF8Toisolat1.stub=true;asyncifyStubs[\"UTF8Toisolat1\"]=undefined;var convertI32PairToI53Checked=(lo,hi)=>hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN;function ___assert_fail(condition,filename,line,func){condition>>>=0;filename>>>=0;func>>>=0;abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):\"unknown filename\",line,func?UTF8ToString(func):\"unknown function\"])}___assert_fail.sig=\"vppip\";var ___asyncify_data=new WebAssembly.Global({value:\"i32\",mutable:true},0);var ___asyncify_state=new WebAssembly.Global({value:\"i32\",mutable:true},0);var ___call_sighandler=function(fp,sig){fp>>>=0;return(a1=>{})(sig)};___call_sighandler.sig=\"vpi\";var ___memory_base=new WebAssembly.Global({value:\"i32\",mutable:false},1024);var ___stack_high=35240736;var ___stack_low=1686304;var ___stack_pointer=new WebAssembly.Global({value:\"i32\",mutable:true},35240736);var PATH={isAbs:path=>path.charAt(0)===\"/\",splitPath:filename=>{var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===\".\"){parts.splice(i,1)}else if(last===\"..\"){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift(\"..\")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)===\"/\";path=PATH.normalizeArray(path.split(\"/\").filter(p=>!!p),!isAbsolute).join(\"/\");if(!path&&!isAbsolute){path=\".\"}if(path&&trailingSlash){path+=\"/\"}return(isAbsolute?\"/\":\"\")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return\".\"}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path===\"/\")return\"/\";path=PATH.normalize(path);path=path.replace(/\\/$/,\"\");var lastSlash=path.lastIndexOf(\"/\");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:(...paths)=>PATH.normalize(paths.join(\"/\")),join2:(l,r)=>PATH.normalize(l+\"/\"+r)};var initRandomFill=()=>{if(typeof crypto==\"object\"&&typeof crypto[\"getRandomValues\"]==\"function\"){return view=>crypto.getRandomValues(view)}else abort(\"initRandomDevice\")};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH_FS={resolve:(...args)=>{var resolvedPath=\"\",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!=\"string\"){throw new TypeError(\"Arguments to path.resolve must be strings\")}else if(!path){return\"\"}resolvedPath=path+\"/\"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split(\"/\").filter(p=>!!p),!resolvedAbsolute).join(\"/\");return(resolvedAbsolute?\"/\":\"\")+resolvedPath||\".\"},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!==\"\")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split(\"/\"));var toParts=trim(to.split(\"/\"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{outIdx>>>=0;if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++>>>0]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++>>>0]=192|u>>6;heap[outIdx++>>>0]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++>>>0]=224|u>>12;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++>>>0]=240|u>>18;heap[outIdx++>>>0]=128|u>>12&63;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}}heap[outIdx>>>0]=0;return outIdx-startIdx};function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(typeof window!=\"undefined\"&&typeof window.prompt==\"function\"){result=window.prompt(\"Input: \");if(result!==null){result+=\"\\n\"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var zeroMemory=(address,size)=>{HEAPU8.fill(0,address,address+size);return address};var mmapAlloc=size=>{size=alignMemory(size,65536);var ptr=_emscripten_builtin_memalign(65536,size);if(!ptr)return 0;return zeroMemory(ptr,size)};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,\"/\",16384|511,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw FS.genericErrors[44]},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp},unlink(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir(node){var entries=[\".\",\"..\"];for(var key of Object.keys(node.contents)){entries.push(key)}return entries},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length>>0)}}return{ptr,allocated}},msync(stream,buffer,offset,length,mmapFlags){MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS_createDataFile=(parent,name,fileData,canRead,canWrite,canOwn)=>{FS.createDataFile(parent,name,fileData,canRead,canWrite,canOwn)};var FS_handledByPreloadPlugin=(byteArray,fullname,finish,onerror)=>{if(typeof Browser!=\"undefined\")Browser.init();var handled=false;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin[\"canHandle\"](fullname)){plugin[\"handle\"](byteArray,fullname,finish,onerror);handled=true}});return handled};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}onload?.();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{onerror?.();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url==\"string\"){asyncLoad(url,processData,onerror)}else{processData(url)}};var FS_modeStringToFlags=str=>{var flagModes={r:0,\"r+\":2,w:512|64|1,\"w+\":512|64|2,a:1024|64|1,\"a+\":1024|64|2};var flags=flagModes[str];if(typeof flags==\"undefined\"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var IDBFS={dbs:{},indexedDB:()=>{if(typeof indexedDB!=\"undefined\")return indexedDB;var ret=null;if(typeof window==\"object\")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;return ret},DB_VERSION:21,DB_STORE_NAME:\"FILE_DATA\",queuePersist:mount=>{function onPersistComplete(){if(mount.idbPersistState===\"again\")startPersist();else mount.idbPersistState=0}function startPersist(){mount.idbPersistState=\"idb\";IDBFS.syncfs(mount,false,onPersistComplete)}if(!mount.idbPersistState){mount.idbPersistState=setTimeout(startPersist,0)}else if(mount.idbPersistState===\"idb\"){mount.idbPersistState=\"again\"}},mount:mount=>{var mnt=MEMFS.mount(mount);if(mount?.opts?.autoPersist){mnt.idbPersistState=0;var memfs_node_ops=mnt.node_ops;mnt.node_ops=Object.assign({},mnt.node_ops);mnt.node_ops.mknod=(parent,name,mode,dev)=>{var node=memfs_node_ops.mknod(parent,name,mode,dev);node.node_ops=mnt.node_ops;node.idbfs_mount=mnt.mount;node.memfs_stream_ops=node.stream_ops;node.stream_ops=Object.assign({},node.stream_ops);node.stream_ops.write=(stream,buffer,offset,length,position,canOwn)=>{stream.node.isModified=true;return node.memfs_stream_ops.write(stream,buffer,offset,length,position,canOwn)};node.stream_ops.close=stream=>{var n=stream.node;if(n.isModified){IDBFS.queuePersist(n.idbfs_mount);n.isModified=false}if(n.memfs_stream_ops.close)return n.memfs_stream_ops.close(stream)};return node};mnt.node_ops.mkdir=(...args)=>(IDBFS.queuePersist(mnt.mount),memfs_node_ops.mkdir(...args));mnt.node_ops.rmdir=(...args)=>(IDBFS.queuePersist(mnt.mount),memfs_node_ops.rmdir(...args));mnt.node_ops.symlink=(...args)=>(IDBFS.queuePersist(mnt.mount),memfs_node_ops.symlink(...args));mnt.node_ops.unlink=(...args)=>(IDBFS.queuePersist(mnt.mount),memfs_node_ops.unlink(...args));mnt.node_ops.rename=(...args)=>(IDBFS.queuePersist(mnt.mount),memfs_node_ops.rename(...args))}return mnt},syncfs:(mount,populate,callback)=>{IDBFS.getLocalSet(mount,(err,local)=>{if(err)return callback(err);IDBFS.getRemoteSet(mount,(err,remote)=>{if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},quit:()=>{Object.values(IDBFS.dbs).forEach(value=>value.close());IDBFS.dbs={}},getDB:(name,callback)=>{var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback(\"Unable to connect to IndexedDB\")}req.onupgradeneeded=e=>{var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains(\"timestamp\")){fileStore.createIndex(\"timestamp\",\"timestamp\",{unique:false})}};req.onsuccess=()=>{db=req.result;IDBFS.dbs[name]=db;callback(null,db)};req.onerror=e=>{callback(e.target.error);e.preventDefault()}},getLocalSet:(mount,callback)=>{var entries={};function isRealDir(p){return p!==\".\"&&p!==\"..\"}function toAbsolute(root){return p=>PATH.join2(root,p)}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push(...FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:\"local\",entries})},getRemoteSet:(mount,callback)=>{var entries={};IDBFS.getDB(mount.mountpoint,(err,db)=>{if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],\"readonly\");transaction.onerror=e=>{callback(e.target.error);e.preventDefault()};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index(\"timestamp\");index.openKeyCursor().onsuccess=event=>{var cursor=event.target.result;if(!cursor){return callback(null,{type:\"remote\",db,entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()}}catch(e){return callback(e)}})},loadLocalEntry:(path,callback)=>{var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error(\"node type not supported\"))}},storeLocalEntry:(path,entry,callback)=>{const previousIgnore=FS.ignorePermissions;try{FS.ignorePermissions=true;if(FS.isDir(entry[\"mode\"])){FS.mkdirTree(path,entry[\"mode\"])}else if(FS.isFile(entry[\"mode\"])){FS.writeFile(path,entry[\"contents\"],{canOwn:true})}else{return callback(new Error(\"node type not supported\"))}FS.chmod(path,entry[\"mode\"]);FS.utime(path,entry[\"timestamp\"],entry[\"timestamp\"])}catch(e){return callback(e)}finally{FS.ignorePermissions=previousIgnore}callback(null)},removeLocalEntry:(path,callback)=>{try{var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:(store,path,callback)=>{var req=store.get(path);req.onsuccess=event=>callback(null,event.target.result);req.onerror=e=>{callback(e.target.error);e.preventDefault()}},storeRemoteEntry:(store,path,entry,callback)=>{try{var req=store.put(entry,path)}catch(e){callback(e);return}req.onsuccess=event=>callback();req.onerror=e=>{callback(e.target.error);e.preventDefault()}},removeRemoteEntry:(store,path,callback)=>{var req=store.delete(path);req.onsuccess=event=>callback();req.onerror=e=>{callback(e.target.error);e.preventDefault()}},reconcile:(src,dst,callback)=>{var total=0;var create=[];Object.keys(src.entries).forEach(key=>{var e=src.entries[key];var e2=dst.entries[key];if(!e2||e[\"timestamp\"].getTime()!=e2[\"timestamp\"].getTime()){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(key=>{if(!src.entries[key]){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var db=src.type===\"remote\"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],\"readwrite\");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err&&!errored){errored=true;return callback(err)}}transaction.onerror=transaction.onabort=e=>{done(e.target.error);e.preventDefault()};transaction.oncomplete=e=>{if(!errored){callback(null)}};create.sort().forEach(path=>{if(dst.type===\"local\"){IDBFS.loadRemoteEntry(store,path,(err,entry)=>{if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,(err,entry)=>{if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(path=>{if(dst.type===\"local\"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:false,ignorePermissions:true,ErrnoError:class{constructor(errno){this.name=\"ErrnoError\";this.errno=errno}},genericErrors:{},filesystems:null,syncFSRequests:0,readFiles:{},FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev;this.readMode=292|73;this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){path=PATH_FS.resolve(path);if(!path)return{path:\"\",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split(\"/\").filter(p=>!!p);var current=FS.root;var current_path=\"/\";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!==\"/\"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=[\"r\",\"w\",\"rw\"][flag&3];if(flag&512){perms+=\"w\"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes(\"r\")&&!(node.mode&292)){return 2}else if(perms.includes(\"w\")&&!(node.mode&146)){return 2}else if(perms.includes(\"x\")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,\"x\");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,\"wx\")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,\"wx\");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!==\"r\"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate==\"function\"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount(type,opts,mountpoint){var root=mountpoint===\"/\";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type,opts,mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name===\".\"||name===\"..\"){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split(\"/\");var d=\"\";for(var i=0;iFS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,\"x\");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir(\"/tmp\");FS.mkdir(\"/home\");FS.mkdir(\"/home/web_user\")},createDefaultDevices(){FS.mkdir(\"/dev\");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev(\"/dev/null\",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev(\"/dev/tty\",FS.makedev(5,0));FS.mkdev(\"/dev/tty1\",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(randomBuffer).byteLength}return randomBuffer[--randomLeft]};FS.createDevice(\"/dev\",\"random\",randomByte);FS.createDevice(\"/dev\",\"urandom\",randomByte);FS.mkdir(\"/dev/shm\");FS.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories(){FS.mkdir(\"/proc\");var proc_self=FS.mkdir(\"/proc/self\");FS.mkdir(\"/proc/self/fd\");FS.mount({mount(){var node=FS.createNode(proc_self,\"fd\",16384|511,73);node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},\"/proc/self/fd\")},createStandardStreams(input,output,error){if(input){FS.createDevice(\"/dev\",\"stdin\",input)}else{FS.symlink(\"/dev/tty\",\"/dev/stdin\")}if(output){FS.createDevice(\"/dev\",\"stdout\",null,output)}else{FS.symlink(\"/dev/tty\",\"/dev/stdout\")}if(error){FS.createDevice(\"/dev\",\"stderr\",null,error)}else{FS.symlink(\"/dev/tty1\",\"/dev/stderr\")}var stdin=FS.open(\"/dev/stdin\",0);var stdout=FS.open(\"/dev/stdout\",1);var stderr=FS.open(\"/dev/stderr\",1)},staticInit(){[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=\"\"});FS.nameTable=new Array(4096);FS.mount(MEMFS,{},\"/\");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS,IDBFS}},init(input,output,error){FS.initialized=true;input??=Module[\"stdin\"];output??=Module[\"stdout\"];error??=Module[\"stderr\"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;_fflush(0);for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open(\"HEAD\",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error(\"Couldn't load \"+url+\". Status: \"+xhr.status);var datalength=Number(xhr.getResponseHeader(\"Content-length\"));var header;var hasByteServing=(header=xhr.getResponseHeader(\"Accept-Ranges\"))&&header===\"bytes\";var usesGzip=(header=xhr.getResponseHeader(\"Content-Encoding\"))&&header===\"gzip\";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error(\"invalid range (\"+from+\", \"+to+\") or no bytes requested!\");if(to>datalength-1)throw new Error(\"only \"+datalength+\" bytes available! programmer error!\");var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);if(datalength!==chunkSize)xhr.setRequestHeader(\"Range\",\"bytes=\"+from+\"-\"+to);xhr.responseType=\"arraybuffer\";if(xhr.overrideMimeType){xhr.overrideMimeType(\"text/plain; charset=x-user-defined\")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error(\"Couldn't load \"+url+\". Status: \"+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||\"\",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==\"undefined\"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==\"undefined\")throw new Error(\"doXHR failed!\");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out(\"LazyFiles on gzip forces download of the whole file when length is accessed\")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(typeof XMLHttpRequest!=\"undefined\"){if(!ENVIRONMENT_IS_WORKER)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat(func,path,buf){var stat=func(path);HEAP32[buf>>>2>>>0]=stat.dev;HEAP32[buf+4>>>2>>>0]=stat.mode;HEAPU32[buf+8>>>2>>>0]=stat.nlink;HEAP32[buf+12>>>2>>>0]=stat.uid;HEAP32[buf+16>>>2>>>0]=stat.gid;HEAP32[buf+20>>>2>>>0]=stat.rdev;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+24>>>2>>>0]=tempI64[0],HEAP32[buf+28>>>2>>>0]=tempI64[1];HEAP32[buf+32>>>2>>>0]=4096;HEAP32[buf+36>>>2>>>0]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>>2>>>0]=tempI64[0],HEAP32[buf+44>>>2>>>0]=tempI64[1];HEAPU32[buf+48>>>2>>>0]=atime%1e3*1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>>2>>>0]=tempI64[0],HEAP32[buf+60>>>2>>>0]=tempI64[1];HEAPU32[buf+64>>>2>>>0]=mtime%1e3*1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>>2>>>0]=tempI64[0],HEAP32[buf+76>>>2>>>0]=tempI64[1];HEAPU32[buf+80>>>2>>>0]=ctime%1e3*1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>>2>>>0]=tempI64[0],HEAP32[buf+92>>>2>>>0]=tempI64[1];return 0},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall__newselect(nfds,readfds,writefds,exceptfds,timeout){readfds>>>=0;writefds>>>=0;exceptfds>>>=0;timeout>>>=0;try{var total=0;var srcReadLow=readfds?HEAP32[readfds>>>2>>>0]:0,srcReadHigh=readfds?HEAP32[readfds+4>>>2>>>0]:0;var srcWriteLow=writefds?HEAP32[writefds>>>2>>>0]:0,srcWriteHigh=writefds?HEAP32[writefds+4>>>2>>>0]:0;var srcExceptLow=exceptfds?HEAP32[exceptfds>>>2>>>0]:0,srcExceptHigh=exceptfds?HEAP32[exceptfds+4>>>2>>>0]:0;var dstReadLow=0,dstReadHigh=0;var dstWriteLow=0,dstWriteHigh=0;var dstExceptLow=0,dstExceptHigh=0;var allLow=(readfds?HEAP32[readfds>>>2>>>0]:0)|(writefds?HEAP32[writefds>>>2>>>0]:0)|(exceptfds?HEAP32[exceptfds>>>2>>>0]:0);var allHigh=(readfds?HEAP32[readfds+4>>>2>>>0]:0)|(writefds?HEAP32[writefds+4>>>2>>>0]:0)|(exceptfds?HEAP32[exceptfds+4>>>2>>>0]:0);var check=function(fd,low,high,val){return fd<32?low&val:high&val};for(var fd=0;fd>>2>>>0]:0,tv_usec=readfds?HEAP32[timeout+4>>>2>>>0]:0;timeoutInMillis=(tv_sec+tv_usec/1e6)*1e3}flags=stream.stream_ops.poll(stream,timeoutInMillis)}if(flags&1&&check(fd,srcReadLow,srcReadHigh,mask)){fd<32?dstReadLow=dstReadLow|mask:dstReadHigh=dstReadHigh|mask;total++}if(flags&4&&check(fd,srcWriteLow,srcWriteHigh,mask)){fd<32?dstWriteLow=dstWriteLow|mask:dstWriteHigh=dstWriteHigh|mask;total++}if(flags&2&&check(fd,srcExceptLow,srcExceptHigh,mask)){fd<32?dstExceptLow=dstExceptLow|mask:dstExceptHigh=dstExceptHigh|mask;total++}}if(readfds){HEAP32[readfds>>>2>>>0]=dstReadLow;HEAP32[readfds+4>>>2>>>0]=dstReadHigh}if(writefds){HEAP32[writefds>>>2>>>0]=dstWriteLow;HEAP32[writefds+4>>>2>>>0]=dstWriteHigh}if(exceptfds){HEAP32[exceptfds>>>2>>>0]=dstExceptLow;HEAP32[exceptfds+4>>>2>>>0]=dstExceptHigh}return total}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall__newselect.sig=\"iipppp\";var SOCKFS={mount(mount){Module[\"websocket\"]=Module[\"websocket\"]&&\"object\"===typeof Module[\"websocket\"]?Module[\"websocket\"]:{};Module[\"websocket\"]._callbacks={};Module[\"websocket\"][\"on\"]=function(event,callback){if(\"function\"===typeof callback){this._callbacks[event]=callback}return this};Module[\"websocket\"].emit=function(event,param){if(\"function\"===typeof this._callbacks[event]){this._callbacks[event].call(this,param)}};return FS.createNode(null,\"/\",16384|511,0)},createSocket(family,type,protocol){type&=~526336;var streaming=type==1;if(streaming&&protocol&&protocol!=6){throw new FS.ErrnoError(66)}var sock={family,type,protocol,server:null,error:null,peers:{},pending:[],recv_queue:[],sock_ops:SOCKFS.websocket_sock_ops};var name=SOCKFS.nextname();var node=FS.createNode(SOCKFS.root,name,49152,0);node.sock=sock;var stream=FS.createStream({path:name,node,flags:2,seekable:false,stream_ops:SOCKFS.stream_ops});sock.stream=stream;return sock},getSocket(fd){var stream=FS.getStream(fd);if(!stream||!FS.isSocket(stream.node.mode)){return null}return stream.node.sock},stream_ops:{poll(stream){var sock=stream.node.sock;return sock.sock_ops.poll(sock)},ioctl(stream,request,varargs){var sock=stream.node.sock;return sock.sock_ops.ioctl(sock,request,varargs)},read(stream,buffer,offset,length,position){var sock=stream.node.sock;var msg=sock.sock_ops.recvmsg(sock,length);if(!msg){return 0}buffer.set(msg.buffer,offset);return msg.buffer.length},write(stream,buffer,offset,length,position){var sock=stream.node.sock;return sock.sock_ops.sendmsg(sock,buffer,offset,length)},close(stream){var sock=stream.node.sock;sock.sock_ops.close(sock)}},nextname(){if(!SOCKFS.nextname.current){SOCKFS.nextname.current=0}return\"socket[\"+SOCKFS.nextname.current+++\"]\"},websocket_sock_ops:{createPeer(sock,addr,port){var ws;if(typeof addr==\"object\"){ws=addr;addr=null;port=null}if(ws){if(ws._socket){addr=ws._socket.remoteAddress;port=ws._socket.remotePort}else{var result=/ws[s]?:\\/\\/([^:]+):(\\d+)/.exec(ws.url);if(!result){throw new Error(\"WebSocket URL must be in the format ws(s)://address:port\")}addr=result[1];port=parseInt(result[2],10)}}else{try{var runtimeConfig=Module[\"websocket\"]&&\"object\"===typeof Module[\"websocket\"];var url=\"ws:#\".replace(\"#\",\"//\");if(runtimeConfig){if(\"string\"===typeof Module[\"websocket\"][\"url\"]){url=Module[\"websocket\"][\"url\"]}}if(url===\"ws://\"||url===\"wss://\"){var parts=addr.split(\"/\");url=url+parts[0]+\":\"+port+\"/\"+parts.slice(1).join(\"/\")}var subProtocols=\"binary\";if(runtimeConfig){if(\"string\"===typeof Module[\"websocket\"][\"subprotocol\"]){subProtocols=Module[\"websocket\"][\"subprotocol\"]}}var opts=undefined;if(subProtocols!==\"null\"){subProtocols=subProtocols.replace(/^ +| +$/g,\"\").split(/ *, */);opts=subProtocols}if(runtimeConfig&&null===Module[\"websocket\"][\"subprotocol\"]){subProtocols=\"null\";opts=undefined}var WebSocketConstructor;{WebSocketConstructor=WebSocket}ws=new WebSocketConstructor(url,opts);ws.binaryType=\"arraybuffer\"}catch(e){throw new FS.ErrnoError(23)}}var peer={addr,port,socket:ws,dgram_send_queue:[]};SOCKFS.websocket_sock_ops.addPeer(sock,peer);SOCKFS.websocket_sock_ops.handlePeerEvents(sock,peer);if(sock.type===2&&typeof sock.sport!=\"undefined\"){peer.dgram_send_queue.push(new Uint8Array([255,255,255,255,\"p\".charCodeAt(0),\"o\".charCodeAt(0),\"r\".charCodeAt(0),\"t\".charCodeAt(0),(sock.sport&65280)>>8,sock.sport&255]))}return peer},getPeer(sock,addr,port){return sock.peers[addr+\":\"+port]},addPeer(sock,peer){sock.peers[peer.addr+\":\"+peer.port]=peer},removePeer(sock,peer){delete sock.peers[peer.addr+\":\"+peer.port]},handlePeerEvents(sock,peer){var first=true;var handleOpen=function(){Module[\"websocket\"].emit(\"open\",sock.stream.fd);try{var queued=peer.dgram_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.dgram_send_queue.shift()}}catch(e){peer.socket.close()}};function handleMessage(data){if(typeof data==\"string\"){var encoder=new TextEncoder;data=encoder.encode(data)}else{assert(data.byteLength!==undefined);if(data.byteLength==0){return}data=new Uint8Array(data)}var wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]===\"p\".charCodeAt(0)&&data[5]===\"o\".charCodeAt(0)&&data[6]===\"r\".charCodeAt(0)&&data[7]===\"t\".charCodeAt(0)){var newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return}sock.recv_queue.push({addr:peer.addr,port:peer.port,data});Module[\"websocket\"].emit(\"message\",sock.stream.fd)}if(ENVIRONMENT_IS_NODE){peer.socket.on(\"open\",handleOpen);peer.socket.on(\"message\",function(data,isBinary){if(!isBinary){return}handleMessage(new Uint8Array(data).buffer)});peer.socket.on(\"close\",function(){Module[\"websocket\"].emit(\"close\",sock.stream.fd)});peer.socket.on(\"error\",function(error){sock.error=14;Module[\"websocket\"].emit(\"error\",[sock.stream.fd,sock.error,\"ECONNREFUSED: Connection refused\"])})}else{peer.socket.onopen=handleOpen;peer.socket.onclose=function(){Module[\"websocket\"].emit(\"close\",sock.stream.fd)};peer.socket.onmessage=function peer_socket_onmessage(event){handleMessage(event.data)};peer.socket.onerror=function(error){sock.error=14;Module[\"websocket\"].emit(\"error\",[sock.stream.fd,sock.error,\"ECONNREFUSED: Connection refused\"])}}},poll(sock){if(sock.type===1&&sock.server){return sock.pending.length?64|1:0}var mask=0;var dest=sock.type===1?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=64|1}if(!dest||dest&&dest.socket.readyState===dest.socket.OPEN){mask|=4}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=16}return mask},ioctl(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length}HEAP32[arg>>>2>>>0]=bytes;return 0;default:return 28}},close(sock){if(sock.server){try{sock.server.close()}catch(e){}sock.server=null}var peers=Object.keys(sock.peers);for(var i=0;i{var socket=SOCKFS.getSocket(fd);if(!socket)throw new FS.ErrnoError(8);return socket};var Sockets={BUFFER_SIZE:10240,MAX_BUFFER_SIZE:10485760,nextFd:1,fds:{},nextport:1,maxport:65535,peer:null,connections:{},portmap:{},localAddr:4261412874,addrPool:[33554442,50331658,67108874,83886090,100663306,117440522,134217738,150994954,167772170,184549386,201326602,218103818,234881034]};var inetPton4=str=>{var b=str.split(\".\");for(var i=0;i<4;i++){var tmp=Number(b[i]);if(isNaN(tmp))return null;b[i]=tmp}return(b[0]|b[1]<<8|b[2]<<16|b[3]<<24)>>>0};var jstoi_q=str=>parseInt(str);var inetPton6=str=>{var words;var w,offset,z,i;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\\dA-F]{1,4}:(:|\\b)|){5}|([\\dA-F]{1,4}:){6})((([\\dA-F]{1,4}((?!\\3)::|:\\b|$))|(?!\\2\\3)){2}|(((2[0-4]|1\\d|[1-9])?\\d|25[0-5])\\.?\\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str===\"::\"){return[0,0,0,0,0,0,0,0]}if(str.startsWith(\"::\")){str=str.replace(\"::\",\"Z:\")}else{str=str.replace(\"::\",\":Z:\")}if(str.indexOf(\".\")>0){str=str.replace(new RegExp(\"[.]\",\"g\"),\":\");words=str.split(\":\");words[words.length-4]=jstoi_q(words[words.length-4])+jstoi_q(words[words.length-3])*256;words[words.length-3]=jstoi_q(words[words.length-2])+jstoi_q(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(\":\")}offset=0;z=0;for(w=0;w{switch(family){case 2:addr=inetPton4(addr);zeroMemory(sa,16);if(addrlen){HEAP32[addrlen>>>2>>>0]=16}HEAP16[sa>>>1>>>0]=family;HEAP32[sa+4>>>2>>>0]=addr;HEAP16[sa+2>>>1>>>0]=_htons(port);break;case 10:addr=inetPton6(addr);zeroMemory(sa,28);if(addrlen){HEAP32[addrlen>>>2>>>0]=28}HEAP32[sa>>>2>>>0]=family;HEAP32[sa+8>>>2>>>0]=addr[0];HEAP32[sa+12>>>2>>>0]=addr[1];HEAP32[sa+16>>>2>>>0]=addr[2];HEAP32[sa+20>>>2>>>0]=addr[3];HEAP16[sa+2>>>1>>>0]=_htons(port);break;default:return 5}return 0};var DNS={address_map:{id:1,addrs:{},names:{}},lookup_name(name){var res=inetPton4(name);if(res!==null){return name}res=inetPton6(name);if(res!==null){return name}var addr;if(DNS.address_map.addrs[name]){addr=DNS.address_map.addrs[name]}else{var id=DNS.address_map.id++;assert(id<65535,\"exceeded max address mappings of 65535\");addr=\"172.29.\"+(id&255)+\".\"+(id&65280);DNS.address_map.names[addr]=name;DNS.address_map.addrs[name]=addr}return addr},lookup_addr(addr){if(DNS.address_map.names[addr]){return DNS.address_map.names[addr]}return null}};function ___syscall_accept4(fd,addr,addrlen,flags,d1,d2){addr>>>=0;addrlen>>>=0;try{var sock=getSocketFromFD(fd);var newsock=sock.sock_ops.accept(sock);if(addr){var errno=writeSockaddr(addr,newsock.family,DNS.lookup_name(newsock.daddr),newsock.dport,addrlen)}return newsock.stream.fd}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_accept4.sig=\"iippiii\";var inetNtop4=addr=>(addr&255)+\".\"+(addr>>8&255)+\".\"+(addr>>16&255)+\".\"+(addr>>24&255);var inetNtop6=ints=>{var str=\"\";var word=0;var longest=0;var lastzero=0;var zstart=0;var len=0;var i=0;var parts=[ints[0]&65535,ints[0]>>16,ints[1]&65535,ints[1]>>16,ints[2]&65535,ints[2]>>16,ints[3]&65535,ints[3]>>16];var hasipv4=true;var v4part=\"\";for(i=0;i<5;i++){if(parts[i]!==0){hasipv4=false;break}}if(hasipv4){v4part=inetNtop4(parts[6]|parts[7]<<16);if(parts[5]===-1){str=\"::ffff:\";str+=v4part;return str}if(parts[5]===0){str=\"::\";if(v4part===\"0.0.0.0\")v4part=\"\";if(v4part===\"0.0.0.1\")v4part=\"1\";str+=v4part;return str}}for(word=0;word<8;word++){if(parts[word]===0){if(word-lastzero>1){len=0}lastzero=word;len++}if(len>longest){longest=len;zstart=word-longest+1}}for(word=0;word<8;word++){if(longest>1){if(parts[word]===0&&word>=zstart&&word{var family=HEAP16[sa>>>1>>>0];var port=_ntohs(HEAPU16[sa+2>>>1>>>0]);var addr;switch(family){case 2:if(salen!==16){return{errno:28}}addr=HEAP32[sa+4>>>2>>>0];addr=inetNtop4(addr);break;case 10:if(salen!==28){return{errno:28}}addr=[HEAP32[sa+8>>>2>>>0],HEAP32[sa+12>>>2>>>0],HEAP32[sa+16>>>2>>>0],HEAP32[sa+20>>>2>>>0]];addr=inetNtop6(addr);break;default:return{errno:5}}return{family,addr,port}};var getSocketAddress=(addrp,addrlen,allowNull)=>{if(allowNull&&addrp===0)return null;var info=readSockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info};function ___syscall_bind(fd,addr,addrlen,d1,d2,d3){addr>>>=0;addrlen>>>=0;try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.bind(sock,info.addr,info.port);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_bind.sig=\"iippiii\";function ___syscall_chdir(path){path>>>=0;try{path=SYSCALLS.getStr(path);FS.chdir(path);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_chdir.sig=\"ip\";function ___syscall_chmod(path,mode){path>>>=0;try{path=SYSCALLS.getStr(path);FS.chmod(path,mode);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_chmod.sig=\"ipi\";function ___syscall_connect(fd,addr,addrlen,d1,d2,d3){addr>>>=0;addrlen>>>=0;try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.connect(sock,info.addr,info.port);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_connect.sig=\"iippiii\";function ___syscall_dup(fd){try{var old=SYSCALLS.getStreamFromFD(fd);return FS.dupStream(old).fd}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_dup.sig=\"ii\";function ___syscall_dup3(fd,newfd,flags){try{var old=SYSCALLS.getStreamFromFD(fd);if(old.fd===newfd)return-28;if(newfd<0||newfd>=FS.MAX_OPEN_FDS)return-8;var existing=FS.getStream(newfd);if(existing)FS.close(existing);return FS.dupStream(old,newfd).fd}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_dup3.sig=\"iiii\";function ___syscall_faccessat(dirfd,path,amode,flags){path>>>=0;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms=\"\";if(amode&4)perms+=\"r\";if(amode&2)perms+=\"w\";if(amode&1)perms+=\"x\";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_faccessat.sig=\"iipii\";var ___syscall_fadvise64=(fd,offset,len,advice)=>0;___syscall_fadvise64.sig=\"iiiiiii\";function ___syscall_fallocate(fd,mode,offset_low,offset_high,len_low,len_high){var offset=convertI32PairToI53Checked(offset_low,offset_high);var len=convertI32PairToI53Checked(len_low,len_high);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.allocate(stream,offset,len);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_fallocate.sig=\"iiiiiii\";function ___syscall_fchdir(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.chdir(stream.path);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_fchdir.sig=\"ii\";function ___syscall_fchmod(fd,mode){try{FS.fchmod(fd,mode);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_fchmod.sig=\"iii\";function ___syscall_fchmodat2(dirfd,path,mode,flags){path>>>=0;try{var nofollow=flags&256;path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);FS.chmod(path,mode,nofollow);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_fchmodat2.sig=\"iipii\";function ___syscall_fchown32(fd,owner,group){try{FS.fchown(fd,owner,group);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_fchown32.sig=\"iiii\";function ___syscall_fchownat(dirfd,path,owner,group,flags){path>>>=0;try{path=SYSCALLS.getStr(path);var nofollow=flags&256;flags=flags&~256;path=SYSCALLS.calculateAt(dirfd,path);(nofollow?FS.lchown:FS.chown)(path,owner,group);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_fchownat.sig=\"iipiii\";function syscallGetVarargI(){var ret=HEAP32[+SYSCALLS.varargs>>>2>>>0];SYSCALLS.varargs+=4;return ret}var syscallGetVarargP=syscallGetVarargI;function ___syscall_fcntl64(fd,cmd,varargs){varargs>>>=0;SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();stream.flags|=arg;return 0}case 12:{var arg=syscallGetVarargP();var offset=0;HEAP16[arg+offset>>>1>>>0]=2;return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_fcntl64.sig=\"iiip\";function ___syscall_fdatasync(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_fdatasync.sig=\"ii\";function ___syscall_fstat64(fd,buf){buf>>>=0;try{var stream=SYSCALLS.getStreamFromFD(fd);return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_fstat64.sig=\"iip\";function ___syscall_statfs64(path,size,buf){path>>>=0;size>>>=0;buf>>>=0;try{path=SYSCALLS.getStr(path);HEAP32[buf+4>>>2>>>0]=4096;HEAP32[buf+40>>>2>>>0]=4096;HEAP32[buf+8>>>2>>>0]=1e6;HEAP32[buf+12>>>2>>>0]=5e5;HEAP32[buf+16>>>2>>>0]=5e5;HEAP32[buf+20>>>2>>>0]=FS.nextInode;HEAP32[buf+24>>>2>>>0]=1e6;HEAP32[buf+28>>>2>>>0]=42;HEAP32[buf+44>>>2>>>0]=2;HEAP32[buf+36>>>2>>>0]=255;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_statfs64.sig=\"ippp\";function ___syscall_fstatfs64(fd,size,buf){size>>>=0;buf>>>=0;try{var stream=SYSCALLS.getStreamFromFD(fd);return ___syscall_statfs64(0,size,buf)}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_fstatfs64.sig=\"iipp\";function ___syscall_ftruncate64(fd,length_low,length_high){var length=convertI32PairToI53Checked(length_low,length_high);try{if(isNaN(length))return 61;FS.ftruncate(fd,length);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_ftruncate64.sig=\"iiii\";var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);function ___syscall_getcwd(buf,size){buf>>>=0;size>>>=0;try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd)+1;if(size>>=0;count>>>=0;try{var stream=SYSCALLS.getStreamFromFD(fd);stream.getdents||=FS.readdir(stream.path);var struct_size=280;var pos=0;var off=FS.llseek(stream,0,1);var idx=Math.floor(off/struct_size);while(idx>>0,(tempDouble=id,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos>>>2>>>0]=tempI64[0],HEAP32[dirp+pos+4>>>2>>>0]=tempI64[1];tempI64=[(idx+1)*struct_size>>>0,(tempDouble=(idx+1)*struct_size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos+8>>>2>>>0]=tempI64[0],HEAP32[dirp+pos+12>>>2>>>0]=tempI64[1];HEAP16[dirp+pos+16>>>1>>>0]=280;HEAP8[dirp+pos+18>>>0]=type;stringToUTF8(name,dirp+pos+19,256);pos+=struct_size;idx+=1}FS.llseek(stream,idx*struct_size,0);return pos}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_getdents64.sig=\"iipp\";function ___syscall_getpeername(fd,addr,addrlen,d1,d2,d3){addr>>>=0;addrlen>>>=0;try{var sock=getSocketFromFD(fd);if(!sock.daddr){return-53}var errno=writeSockaddr(addr,sock.family,DNS.lookup_name(sock.daddr),sock.dport,addrlen);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_getpeername.sig=\"iippiii\";function ___syscall_getsockname(fd,addr,addrlen,d1,d2,d3){addr>>>=0;addrlen>>>=0;try{var sock=getSocketFromFD(fd);var errno=writeSockaddr(addr,sock.family,DNS.lookup_name(sock.saddr||\"0.0.0.0\"),sock.sport,addrlen);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_getsockname.sig=\"iippiii\";function ___syscall_getsockopt(fd,level,optname,optval,optlen,d1){optval>>>=0;optlen>>>=0;try{var sock=getSocketFromFD(fd);if(level===1){if(optname===4){HEAP32[optval>>>2>>>0]=sock.error;HEAP32[optlen>>>2>>>0]=4;sock.error=null;return 0}}return-50}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_getsockopt.sig=\"iiiippi\";function ___syscall_ioctl(fd,op,varargs){varargs>>>=0;SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();HEAP32[argp>>>2>>>0]=termios.c_iflag||0;HEAP32[argp+4>>>2>>>0]=termios.c_oflag||0;HEAP32[argp+8>>>2>>>0]=termios.c_cflag||0;HEAP32[argp+12>>>2>>>0]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[argp+i+17>>>0]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=HEAP32[argp>>>2>>>0];var c_oflag=HEAP32[argp+4>>>2>>>0];var c_cflag=HEAP32[argp+8>>>2>>>0];var c_lflag=HEAP32[argp+12>>>2>>>0];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17>>>0])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[argp>>>2>>>0]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();HEAP16[argp>>>1>>>0]=winsize[0];HEAP16[argp+2>>>1>>>0]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_ioctl.sig=\"iiip\";function ___syscall_listen(fd,backlog){try{var sock=getSocketFromFD(fd);sock.sock_ops.listen(sock,backlog);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_listen.sig=\"iiiiiii\";function ___syscall_lstat64(path,buf){path>>>=0;buf>>>=0;try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.lstat,path,buf)}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_lstat64.sig=\"ipp\";function ___syscall_mkdirat(dirfd,path,mode){path>>>=0;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);path=PATH.normalize(path);if(path[path.length-1]===\"/\")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_mkdirat.sig=\"iipi\";function ___syscall_mknodat(dirfd,path,mode,dev){path>>>=0;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_mknodat.sig=\"iipii\";function ___syscall_newfstatat(dirfd,path,buf,flags){path>>>=0;buf>>>=0;try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~6400;path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.doStat(nofollow?FS.lstat:FS.stat,path,buf)}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_newfstatat.sig=\"iippi\";function ___syscall_openat(dirfd,path,flags,varargs){path>>>=0;varargs>>>=0;SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_openat.sig=\"iipip\";var PIPEFS={BUCKET_BUFFER_SIZE:8192,mount(mount){return FS.createNode(null,\"/\",16384|511,0)},createPipe(){var pipe={buckets:[],refcnt:2};pipe.buckets.push({buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:0,roffset:0});var rName=PIPEFS.nextname();var wName=PIPEFS.nextname();var rNode=FS.createNode(PIPEFS.root,rName,4096,0);var wNode=FS.createNode(PIPEFS.root,wName,4096,0);rNode.pipe=pipe;wNode.pipe=pipe;var readableStream=FS.createStream({path:rName,node:rNode,flags:0,seekable:false,stream_ops:PIPEFS.stream_ops});rNode.stream=readableStream;var writableStream=FS.createStream({path:wName,node:wNode,flags:1,seekable:false,stream_ops:PIPEFS.stream_ops});wNode.stream=writableStream;return{readable_fd:readableStream.fd,writable_fd:writableStream.fd}},stream_ops:{poll(stream){var pipe=stream.node.pipe;if((stream.flags&2097155)===1){return 256|4}if(pipe.buckets.length>0){for(var i=0;i0){return 64|1}}}return 0},ioctl(stream,request,varargs){return 28},fsync(stream){return 28},read(stream,buffer,offset,length,position){var pipe=stream.node.pipe;var currentLength=0;for(var i=0;i=dataLen){currBucket.buffer.set(data,currBucket.offset);currBucket.offset+=dataLen;return dataLen}else if(freeBytesInCurrBuffer>0){currBucket.buffer.set(data.subarray(0,freeBytesInCurrBuffer),currBucket.offset);currBucket.offset+=freeBytesInCurrBuffer;data=data.subarray(freeBytesInCurrBuffer,data.byteLength)}var numBuckets=data.byteLength/PIPEFS.BUCKET_BUFFER_SIZE|0;var remElements=data.byteLength%PIPEFS.BUCKET_BUFFER_SIZE;for(var i=0;i0){var newBucket={buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:data.byteLength,roffset:0};pipe.buckets.push(newBucket);newBucket.buffer.set(data)}return dataLen},close(stream){var pipe=stream.node.pipe;pipe.refcnt--;if(pipe.refcnt===0){pipe.buckets=null}}},nextname(){if(!PIPEFS.nextname.current){PIPEFS.nextname.current=0}return\"pipe[\"+PIPEFS.nextname.current+++\"]\"}};function ___syscall_pipe(fdPtr){fdPtr>>>=0;try{if(fdPtr==0){throw new FS.ErrnoError(21)}var res=PIPEFS.createPipe();HEAP32[fdPtr>>>2>>>0]=res.readable_fd;HEAP32[fdPtr+4>>>2>>>0]=res.writable_fd;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_pipe.sig=\"ip\";function ___syscall_poll(fds,nfds,timeout){fds>>>=0;try{var nonzero=0;for(var i=0;i>>2>>>0];var events=HEAP16[pollfd+4>>>1>>>0];var mask=32;var stream=FS.getStream(fd);if(stream){mask=SYSCALLS.DEFAULT_POLLMASK;if(stream.stream_ops.poll){mask=stream.stream_ops.poll(stream,-1)}}mask&=events|8|16;if(mask)nonzero++;HEAP16[pollfd+6>>>1>>>0]=mask}return nonzero}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_poll.sig=\"ipii\";function ___syscall_readlinkat(dirfd,path,buf,bufsize){path>>>=0;buf>>>=0;bufsize>>>=0;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len>>>0];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len>>>0]=endChar;return len}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_readlinkat.sig=\"iippp\";function ___syscall_recvfrom(fd,buf,len,flags,addr,addrlen){buf>>>=0;len>>>=0;addr>>>=0;addrlen>>>=0;try{var sock=getSocketFromFD(fd);var msg=sock.sock_ops.recvmsg(sock,len);if(!msg)return 0;if(addr){var errno=writeSockaddr(addr,sock.family,DNS.lookup_name(msg.addr),msg.port,addrlen)}HEAPU8.set(msg.buffer,buf>>>0);return msg.buffer.byteLength}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_recvfrom.sig=\"iippipp\";function ___syscall_recvmsg(fd,message,flags,d1,d2,d3){message>>>=0;try{var sock=getSocketFromFD(fd);var iov=HEAPU32[message+8>>>2>>>0];var num=HEAP32[message+12>>>2>>>0];var total=0;for(var i=0;i>>2>>>0]}var msg=sock.sock_ops.recvmsg(sock,total);if(!msg)return 0;var name=HEAPU32[message>>>2>>>0];if(name){var errno=writeSockaddr(name,sock.family,DNS.lookup_name(msg.addr),msg.port)}var bytesRead=0;var bytesRemaining=msg.buffer.byteLength;for(var i=0;bytesRemaining>0&&i>>2>>>0];var iovlen=HEAP32[iov+(8*i+4)>>>2>>>0];if(!iovlen){continue}var length=Math.min(iovlen,bytesRemaining);var buf=msg.buffer.subarray(bytesRead,bytesRead+length);HEAPU8.set(buf,iovbase+bytesRead>>>0);bytesRead+=length;bytesRemaining-=length}return bytesRead}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_recvmsg.sig=\"iipiiii\";function ___syscall_renameat(olddirfd,oldpath,newdirfd,newpath){oldpath>>>=0;newpath>>>=0;try{oldpath=SYSCALLS.getStr(oldpath);newpath=SYSCALLS.getStr(newpath);oldpath=SYSCALLS.calculateAt(olddirfd,oldpath);newpath=SYSCALLS.calculateAt(newdirfd,newpath);FS.rename(oldpath,newpath);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_renameat.sig=\"iipip\";function ___syscall_rmdir(path){path>>>=0;try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_rmdir.sig=\"ip\";function ___syscall_sendmsg(fd,message,flags,d1,d2,d3){message>>>=0;d1>>>=0;d2>>>=0;try{var sock=getSocketFromFD(fd);var iov=HEAPU32[message+8>>>2>>>0];var num=HEAP32[message+12>>>2>>>0];var addr,port;var name=HEAPU32[message>>>2>>>0];var namelen=HEAP32[message+4>>>2>>>0];if(name){var info=readSockaddr(name,namelen);if(info.errno)return-info.errno;port=info.port;addr=DNS.lookup_addr(info.addr)||info.addr}var total=0;for(var i=0;i>>2>>>0]}var view=new Uint8Array(total);var offset=0;for(var i=0;i>>2>>>0];var iovlen=HEAP32[iov+(8*i+4)>>>2>>>0];for(var j=0;j>>0]}}return sock.sock_ops.sendmsg(sock,view,0,total,addr,port)}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_sendmsg.sig=\"iipippi\";function ___syscall_sendto(fd,message,length,flags,addr,addr_len){message>>>=0;length>>>=0;addr>>>=0;addr_len>>>=0;try{var sock=getSocketFromFD(fd);var dest=getSocketAddress(addr,addr_len,true);if(!dest){return FS.write(sock.stream,HEAP8,message,length)}return sock.sock_ops.sendmsg(sock,HEAP8,message,length,dest.addr,dest.port)}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_sendto.sig=\"iippipp\";function ___syscall_socket(domain,type,protocol){try{var sock=SOCKFS.createSocket(domain,type,protocol);return sock.stream.fd}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_socket.sig=\"iiiiiii\";function ___syscall_stat64(path,buf){path>>>=0;buf>>>=0;try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_stat64.sig=\"ipp\";function ___syscall_symlink(target,linkpath){target>>>=0;linkpath>>>=0;try{target=SYSCALLS.getStr(target);linkpath=SYSCALLS.getStr(linkpath);FS.symlink(target,linkpath);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_symlink.sig=\"ipp\";function ___syscall_symlinkat(target,newdirfd,linkpath){target>>>=0;linkpath>>>=0;try{linkpath=SYSCALLS.calculateAt(newdirfd,linkpath);FS.symlink(target,linkpath);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_symlinkat.sig=\"ipip\";function ___syscall_truncate64(path,length_low,length_high){path>>>=0;var length=convertI32PairToI53Checked(length_low,length_high);try{if(isNaN(length))return 61;path=SYSCALLS.getStr(path);FS.truncate(path,length);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_truncate64.sig=\"ipii\";function ___syscall_unlinkat(dirfd,path,flags){path>>>=0;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(flags===0){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{abort(\"Invalid flags passed to unlinkat\")}return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_unlinkat.sig=\"iipi\";var readI53FromI64=ptr=>HEAPU32[ptr>>>2>>>0]+HEAP32[ptr+4>>>2>>>0]*4294967296;function ___syscall_utimensat(dirfd,path,times,flags){path>>>=0;times>>>=0;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path,true);var now=Date.now(),atime,mtime;if(!times){atime=now;mtime=now}else{var seconds=readI53FromI64(times);var nanoseconds=HEAP32[times+8>>>2>>>0];if(nanoseconds==1073741823){atime=now}else if(nanoseconds==1073741822){atime=-1}else{atime=seconds*1e3+nanoseconds/(1e3*1e3)}times+=16;seconds=readI53FromI64(times);nanoseconds=HEAP32[times+8>>>2>>>0];if(nanoseconds==1073741823){mtime=now}else if(nanoseconds==1073741822){mtime=-1}else{mtime=seconds*1e3+nanoseconds/(1e3*1e3)}}if(mtime!=-1||atime!=-1){FS.utime(path,atime,mtime)}return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}___syscall_utimensat.sig=\"iippi\";var ___table_base=new WebAssembly.Global({value:\"i32\",mutable:false},1);function ___xmlOutputBufferCreateFilename(...args){return asyncifyStubs[\"__xmlOutputBufferCreateFilename\"](...args)}___xmlOutputBufferCreateFilename.stub=true;asyncifyStubs[\"__xmlOutputBufferCreateFilename\"]=undefined;function ___xmlParserInputBufferCreateFilename(...args){return asyncifyStubs[\"__xmlParserInputBufferCreateFilename\"](...args)}___xmlParserInputBufferCreateFilename.stub=true;asyncifyStubs[\"__xmlParserInputBufferCreateFilename\"]=undefined;function ___xmlRegisterCallbacks(...args){return asyncifyStubs[\"__xmlRegisterCallbacks\"](...args)}___xmlRegisterCallbacks.stub=true;asyncifyStubs[\"__xmlRegisterCallbacks\"]=undefined;var __abort_js=()=>{abort(\"\")};__abort_js.sig=\"v\";var ENV={};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var dlSetError=msg=>{var sp=stackSave();var cmsg=stringToUTF8OnStack(msg);___dl_seterr(cmsg,0);stackRestore(sp)};var dlopenInternal=(handle,jsflags)=>{var filename=UTF8ToString(handle+36);var flags=HEAP32[handle+4>>>2>>>0];filename=PATH.normalize(filename);var searchpaths=[];var global=Boolean(flags&256);var localScope=global?null:{};var combinedFlags={global,nodelete:Boolean(flags&4096),loadAsync:jsflags.loadAsync};if(jsflags.loadAsync){return loadDynamicLibrary(filename,combinedFlags,localScope,handle)}try{return loadDynamicLibrary(filename,combinedFlags,localScope,handle)}catch(e){dlSetError(`Could not load dynamic lib: ${filename}\\n${e}`);return 0}};var __dlopen_js=function(handle){handle>>>=0;return Asyncify.handleSleep(wakeUp=>{dlopenInternal(handle,{loadAsync:true}).then(wakeUp).catch(()=>wakeUp(0))})};__dlopen_js.sig=\"pp\";__dlopen_js.isAsync=true;function __dlsym_js(handle,symbol,symbolIndex){handle>>>=0;symbol>>>=0;symbolIndex>>>=0;symbol=UTF8ToString(symbol);var result;var newSymIndex;var lib=LDSO.loadedLibsByHandle[handle];if(!lib.exports.hasOwnProperty(symbol)||lib.exports[symbol].stub){dlSetError(`Tried to lookup unknown symbol \"${symbol}\" in dynamic lib: ${lib.name}`);return 0}newSymIndex=Object.keys(lib.exports).indexOf(symbol);var origSym=\"orig$\"+symbol;result=lib.exports[origSym];if(result){newSymIndex=Object.keys(lib.exports).indexOf(origSym)}else result=lib.exports[symbol];if(typeof result==\"function\"){if(\"orig\"in result){result=result.orig}var addr=getFunctionAddress(result);if(addr){result=addr}else{result=addFunction(result,result.sig);HEAPU32[symbolIndex>>>2>>>0]=newSymIndex}}return result}__dlsym_js.sig=\"pppp\";var handleException=e=>{if(e instanceof ExitStatus||e==\"unwind\"){return EXITSTATUS}quit_(1,e)};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module[\"onExit\"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};_proc_exit.sig=\"vi\";var exitJS=(status,implicit)=>{EXITSTATUS=status;if(!keepRuntimeAlive()){exitRuntime()}_proc_exit(status)};var _exit=exitJS;_exit.sig=\"vi\";var maybeExit=()=>{if(runtimeExited){return}if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(runtimeExited||ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var runtimeKeepalivePush=()=>{runtimeKeepaliveCounter+=1};runtimeKeepalivePush.sig=\"v\";var runtimeKeepalivePop=()=>{runtimeKeepaliveCounter-=1};runtimeKeepalivePop.sig=\"v\";function __emscripten_dlopen_js(handle,onsuccess,onerror,user_data){handle>>>=0;onsuccess>>>=0;onerror>>>=0;user_data>>>=0;function errorCallback(e){var filename=UTF8ToString(handle+36);dlSetError(`'Could not load dynamic lib: ${filename}\\n${e}`);runtimeKeepalivePop();callUserCallback(()=>((a1,a2)=>{})(handle,user_data))}function successCallback(){runtimeKeepalivePop();callUserCallback(()=>((a1,a2)=>{})(handle,user_data))}runtimeKeepalivePush();var promise=dlopenInternal(handle,{loadAsync:true});if(promise){promise.then(successCallback,errorCallback)}else{errorCallback()}}__emscripten_dlopen_js.sig=\"vpppp\";var nowIsMonotonic=1;var __emscripten_get_now_is_monotonic=()=>nowIsMonotonic;__emscripten_get_now_is_monotonic.sig=\"i\";var getExecutableName=()=>thisProgram||\"./this.program\";function __emscripten_get_progname(str,len){str>>>=0;stringToUTF8(getExecutableName(),str,len)}__emscripten_get_progname.sig=\"vpi\";function __emscripten_lookup_name(name){name>>>=0;var nameString=UTF8ToString(name);return inetPton4(DNS.lookup_name(nameString))}__emscripten_lookup_name.sig=\"ip\";function __emscripten_memcpy_js(dest,src,num){dest>>>=0;src>>>=0;num>>>=0;return HEAPU8.copyWithin(dest>>>0,src>>>0,src+num>>>0)}__emscripten_memcpy_js.sig=\"vppp\";var __emscripten_runtime_keepalive_clear=()=>{noExitRuntime=false;runtimeKeepaliveCounter=0};__emscripten_runtime_keepalive_clear.sig=\"v\";function __emscripten_system(command){command>>>=0;if(!command)return 0;return-52}__emscripten_system.sig=\"ip\";var __emscripten_throw_longjmp=()=>{throw Infinity};__emscripten_throw_longjmp.sig=\"v\";function __gmtime_js(time_low,time_high,tmPtr){var time=convertI32PairToI53Checked(time_low,time_high);tmPtr>>>=0;var date=new Date(time*1e3);HEAP32[tmPtr>>>2>>>0]=date.getUTCSeconds();HEAP32[tmPtr+4>>>2>>>0]=date.getUTCMinutes();HEAP32[tmPtr+8>>>2>>>0]=date.getUTCHours();HEAP32[tmPtr+12>>>2>>>0]=date.getUTCDate();HEAP32[tmPtr+16>>>2>>>0]=date.getUTCMonth();HEAP32[tmPtr+20>>>2>>>0]=date.getUTCFullYear()-1900;HEAP32[tmPtr+24>>>2>>>0]=date.getUTCDay();var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>>2>>>0]=yday}__gmtime_js.sig=\"viip\";var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var MONTH_DAYS_LEAP_CUMULATIVE=[0,31,60,91,121,152,182,213,244,274,305,335];var MONTH_DAYS_REGULAR_CUMULATIVE=[0,31,59,90,120,151,181,212,243,273,304,334];var ydayFromDate=date=>{var leap=isLeapYear(date.getFullYear());var monthDaysCumulative=leap?MONTH_DAYS_LEAP_CUMULATIVE:MONTH_DAYS_REGULAR_CUMULATIVE;var yday=monthDaysCumulative[date.getMonth()]+date.getDate()-1;return yday};function __localtime_js(time_low,time_high,tmPtr){var time=convertI32PairToI53Checked(time_low,time_high);tmPtr>>>=0;var date=new Date(time*1e3);HEAP32[tmPtr>>>2>>>0]=date.getSeconds();HEAP32[tmPtr+4>>>2>>>0]=date.getMinutes();HEAP32[tmPtr+8>>>2>>>0]=date.getHours();HEAP32[tmPtr+12>>>2>>>0]=date.getDate();HEAP32[tmPtr+16>>>2>>>0]=date.getMonth();HEAP32[tmPtr+20>>>2>>>0]=date.getFullYear()-1900;HEAP32[tmPtr+24>>>2>>>0]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>>2>>>0]=yday;HEAP32[tmPtr+36>>>2>>>0]=-(date.getTimezoneOffset()*60);var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>>2>>>0]=dst}__localtime_js.sig=\"viip\";var __mktime_js=function(tmPtr){tmPtr>>>=0;var ret=(()=>{var date=new Date(HEAP32[tmPtr+20>>>2>>>0]+1900,HEAP32[tmPtr+16>>>2>>>0],HEAP32[tmPtr+12>>>2>>>0],HEAP32[tmPtr+8>>>2>>>0],HEAP32[tmPtr+4>>>2>>>0],HEAP32[tmPtr>>>2>>>0],0);var dst=HEAP32[tmPtr+32>>>2>>>0];var guessedOffset=date.getTimezoneOffset();var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dstOffset=Math.min(winterOffset,summerOffset);if(dst<0){HEAP32[tmPtr+32>>>2>>>0]=Number(summerOffset!=winterOffset&&dstOffset==guessedOffset)}else if(dst>0!=(dstOffset==guessedOffset)){var nonDstOffset=Math.max(winterOffset,summerOffset);var trueOffset=dst>0?dstOffset:nonDstOffset;date.setTime(date.getTime()+(trueOffset-guessedOffset)*6e4)}HEAP32[tmPtr+24>>>2>>>0]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>>2>>>0]=yday;HEAP32[tmPtr>>>2>>>0]=date.getSeconds();HEAP32[tmPtr+4>>>2>>>0]=date.getMinutes();HEAP32[tmPtr+8>>>2>>>0]=date.getHours();HEAP32[tmPtr+12>>>2>>>0]=date.getDate();HEAP32[tmPtr+16>>>2>>>0]=date.getMonth();HEAP32[tmPtr+20>>>2>>>0]=date.getYear();var timeMs=date.getTime();if(isNaN(timeMs)){return-1}return timeMs/1e3})();return setTempRet0((tempDouble=ret,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)),ret>>>0};__mktime_js.sig=\"ip\";function __mmap_js(len,prot,flags,fd,offset_low,offset_high,allocated,addr){len>>>=0;var offset=convertI32PairToI53Checked(offset_low,offset_high);allocated>>>=0;addr>>>=0;try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);var res=FS.mmap(stream,len,offset,prot,flags);var ptr=res.ptr;HEAP32[allocated>>>2>>>0]=res.allocated;HEAPU32[addr>>>2>>>0]=ptr;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}__mmap_js.sig=\"ipiiiiipp\";function __msync_js(addr,len,prot,flags,fd,offset_low,offset_high){addr>>>=0;len>>>=0;var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;SYSCALLS.doMsync(addr,SYSCALLS.getStreamFromFD(fd),len,flags,offset);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}__msync_js.sig=\"ippiiiii\";function __munmap_js(addr,len,prot,flags,fd,offset_low,offset_high){addr>>>=0;len>>>=0;var offset=convertI32PairToI53Checked(offset_low,offset_high);try{var stream=SYSCALLS.getStreamFromFD(fd);if(prot&2){SYSCALLS.doMsync(addr,stream,len,flags,offset)}}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}__munmap_js.sig=\"ippiiiii\";var timers={};var _emscripten_get_now=()=>performance.now();_emscripten_get_now.sig=\"d\";var __setitimer_js=(which,timeout_ms)=>{if(timers[which]){clearTimeout(timers[which].id);delete timers[which]}if(!timeout_ms)return 0;var id=setTimeout(()=>{delete timers[which];callUserCallback(()=>__emscripten_timeout(which,_emscripten_get_now()))},timeout_ms);timers[which]={id,timeout_ms};return 0};__setitimer_js.sig=\"iid\";var __timegm_js=function(tmPtr){tmPtr>>>=0;var ret=(()=>{var time=Date.UTC(HEAP32[tmPtr+20>>>2>>>0]+1900,HEAP32[tmPtr+16>>>2>>>0],HEAP32[tmPtr+12>>>2>>>0],HEAP32[tmPtr+8>>>2>>>0],HEAP32[tmPtr+4>>>2>>>0],HEAP32[tmPtr>>>2>>>0],0);var date=new Date(time);HEAP32[tmPtr+24>>>2>>>0]=date.getUTCDay();var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>>2>>>0]=yday;return date.getTime()/1e3})();return setTempRet0((tempDouble=ret,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)),ret>>>0};__timegm_js.sig=\"ip\";var __tzset_js=function(timezone,daylight,std_name,dst_name){timezone>>>=0;daylight>>>=0;std_name>>>=0;dst_name>>>=0;var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>>2>>>0]=stdTimezoneOffset*60;HEAP32[daylight>>>2>>>0]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?\"-\":\"+\";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,\"0\");var minutes=String(absOffset%60).padStart(2,\"0\");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);if(summerOffset{readEmAsmArgsArray.length=0;var ch;while(ch=HEAPU8[sigPtr++>>>0]){var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?HEAPU32[buf>>>2>>>0]:ch==105?HEAP32[buf>>>2>>>0]:HEAPF64[buf>>>3>>>0]);buf+=wide?8:4}return readEmAsmArgsArray};var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code](...args)};function _emscripten_asm_const_int(code,sigPtr,argbuf){code>>>=0;sigPtr>>>=0;argbuf>>>=0;return runEmAsmFunction(code,sigPtr,argbuf)}_emscripten_asm_const_int.sig=\"ippp\";function _emscripten_asm_const_ptr(code,sigPtr,argbuf){code>>>=0;sigPtr>>>=0;argbuf>>>=0;return runEmAsmFunction(code,sigPtr,argbuf)}_emscripten_asm_const_ptr.sig=\"pppp\";function _emscripten_console_error(str){str>>>=0;console.error(UTF8ToString(str))}_emscripten_console_error.sig=\"vp\";function _emscripten_console_log(str){str>>>=0;console.log(UTF8ToString(str))}_emscripten_console_log.sig=\"vp\";function _emscripten_console_trace(str){str>>>=0;console.trace(UTF8ToString(str))}_emscripten_console_trace.sig=\"vp\";function _emscripten_console_warn(str){str>>>=0;console.warn(UTF8ToString(str))}_emscripten_console_warn.sig=\"vp\";var _emscripten_date_now=()=>Date.now();_emscripten_date_now.sig=\"d\";function _emscripten_err(str){str>>>=0;return err(UTF8ToString(str))}_emscripten_err.sig=\"vp\";var getHeapMax=()=>4294901760;function _emscripten_get_heap_max(){return getHeapMax()}_emscripten_get_heap_max.sig=\"p\";var _emscripten_get_now_res=()=>1e3;_emscripten_get_now_res.sig=\"d\";function _emscripten_out(str){str>>>=0;return out(UTF8ToString(str))}_emscripten_out.sig=\"vp\";class HandleAllocator{constructor(){this.allocated=[undefined];this.freelist=[]}get(id){return this.allocated[id]}has(id){return this.allocated[id]!==undefined}allocate(handle){var id=this.freelist.pop()||this.allocated.length;this.allocated[id]=handle;return id}free(id){this.allocated[id]=undefined;this.freelist.push(id)}}var promiseMap=new HandleAllocator;var makePromise=()=>{var promiseInfo={};promiseInfo.promise=new Promise((resolve,reject)=>{promiseInfo.reject=reject;promiseInfo.resolve=resolve});promiseInfo.id=promiseMap.allocate(promiseInfo);return promiseInfo};function _emscripten_promise_create(){return makePromise().id}_emscripten_promise_create.sig=\"p\";function _emscripten_promise_destroy(id){id>>>=0;promiseMap.free(id)}_emscripten_promise_destroy.sig=\"vp\";var getPromise=id=>promiseMap.get(id).promise;function _emscripten_promise_resolve(id,result,value){id>>>=0;value>>>=0;var info=promiseMap.get(id);switch(result){case 0:info.resolve(value);return;case 1:info.resolve(getPromise(value));return;case 2:info.resolve(getPromise(value));_emscripten_promise_destroy(value);return;case 3:info.reject(value);return}}_emscripten_promise_resolve.sig=\"vpip\";var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};function _emscripten_resize_heap(requestedSize){requestedSize>>>=0;var oldSize=HEAPU8.length;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false}_emscripten_resize_heap.sig=\"ip\";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator==\"object\"&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\";var env={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToAscii=(str,buffer)=>{for(var i=0;i>>0]=str.charCodeAt(i)}HEAP8[buffer>>>0]=0};var _environ_get=function(__environ,environ_buf){__environ>>>=0;environ_buf>>>=0;var bufSize=0;getEnvStrings().forEach((string,i)=>{var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>>2>>>0]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0};_environ_get.sig=\"ipp\";var _environ_sizes_get=function(penviron_count,penviron_buf_size){penviron_count>>>=0;penviron_buf_size>>>=0;var strings=getEnvStrings();HEAPU32[penviron_count>>>2>>>0]=strings.length;var bufSize=0;strings.forEach(string=>bufSize+=string.length+1);HEAPU32[penviron_buf_size>>>2>>>0]=bufSize;return 0};_environ_sizes_get.sig=\"ipp\";function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}_fd_close.sig=\"ii\";function _fd_fdstat_get(fd,pbuf){pbuf>>>=0;try{var rightsBase=0;var rightsInheriting=0;var flags=0;{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4}HEAP8[pbuf>>>0]=type;HEAP16[pbuf+2>>>1>>>0]=flags;tempI64=[rightsBase>>>0,(tempDouble=rightsBase,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[pbuf+8>>>2>>>0]=tempI64[0],HEAP32[pbuf+12>>>2>>>0]=tempI64[1];tempI64=[rightsInheriting>>>0,(tempDouble=rightsInheriting,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[pbuf+16>>>2>>>0]=tempI64[0],HEAP32[pbuf+20>>>2>>>0]=tempI64[1];return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}_fd_fdstat_get.sig=\"iip\";var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>>2>>>0];var len=HEAPU32[iov+4>>>2>>>0];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>>=0;iovcnt>>>=0;var offset=convertI32PairToI53Checked(offset_low,offset_high);pnum>>>=0;try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt,offset);HEAPU32[pnum>>>2>>>0]=num;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}_fd_pread.sig=\"iippiip\";var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>>2>>>0];var len=HEAPU32[iov+4>>>2>>>0];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>>=0;iovcnt>>>=0;var offset=convertI32PairToI53Checked(offset_low,offset_high);pnum>>>=0;try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt,offset);HEAPU32[pnum>>>2>>>0]=num;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}_fd_pwrite.sig=\"iippiip\";function _fd_read(fd,iov,iovcnt,pnum){iov>>>=0;iovcnt>>>=0;pnum>>>=0;try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt);HEAPU32[pnum>>>2>>>0]=num;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}_fd_read.sig=\"iippp\";function _fd_seek(fd,offset_low,offset_high,whence,newOffset){var offset=convertI32PairToI53Checked(offset_low,offset_high);newOffset>>>=0;try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>>2>>>0]=tempI64[0],HEAP32[newOffset+4>>>2>>>0]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}_fd_seek.sig=\"iiiiip\";var _fd_sync=function(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);return Asyncify.handleSleep(wakeUp=>{var mount=stream.node.mount;if(!mount.type.syncfs){wakeUp(0);return}mount.type.syncfs(mount,false,err=>{if(err){wakeUp(29);return}wakeUp(0)})})}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}};_fd_sync.sig=\"ii\";_fd_sync.isAsync=true;function _fd_write(fd,iov,iovcnt,pnum){iov>>>=0;iovcnt>>>=0;pnum>>>=0;try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>>2>>>0]=num;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}_fd_write.sig=\"iippp\";function _getaddrinfo(node,service,hint,out){node>>>=0;service>>>=0;hint>>>=0;out>>>=0;var addrs=[];var canon=null;var addr=0;var port=0;var flags=0;var family=0;var type=0;var proto=0;var ai,last;function allocaddrinfo(family,type,proto,canon,addr,port){var sa,salen,ai;var errno;salen=family===10?28:16;addr=family===10?inetNtop6(addr):inetNtop4(addr);sa=_malloc(salen);errno=writeSockaddr(sa,family,addr,port);assert(!errno);ai=_malloc(32);HEAP32[ai+4>>>2>>>0]=family;HEAP32[ai+8>>>2>>>0]=type;HEAP32[ai+12>>>2>>>0]=proto;HEAPU32[ai+24>>>2>>>0]=canon;HEAPU32[ai+20>>>2>>>0]=sa;if(family===10){HEAP32[ai+16>>>2>>>0]=28}else{HEAP32[ai+16>>>2>>>0]=16}HEAP32[ai+28>>>2>>>0]=0;return ai}if(hint){flags=HEAP32[hint>>>2>>>0];family=HEAP32[hint+4>>>2>>>0];type=HEAP32[hint+8>>>2>>>0];proto=HEAP32[hint+12>>>2>>>0]}if(type&&!proto){proto=type===2?17:6}if(!type&&proto){type=proto===17?2:1}if(proto===0){proto=6}if(type===0){type=1}if(!node&&!service){return-2}if(flags&~(1|2|4|1024|8|16|32)){return-1}if(hint!==0&&HEAP32[hint>>>2>>>0]&2&&!node){return-1}if(flags&32){return-2}if(type!==0&&type!==1&&type!==2){return-7}if(family!==0&&family!==2&&family!==10){return-6}if(service){service=UTF8ToString(service);port=parseInt(service,10);if(isNaN(port)){if(flags&1024){return-2}return-8}}if(!node){if(family===0){family=2}if((flags&1)===0){if(family===2){addr=_htonl(2130706433)}else{addr=[0,0,0,1]}}ai=allocaddrinfo(family,type,proto,null,addr,port);HEAPU32[out>>>2>>>0]=ai;return 0}node=UTF8ToString(node);addr=inetPton4(node);if(addr!==null){if(family===0||family===2){family=2}else if(family===10&&flags&8){addr=[0,0,_htonl(65535),addr];family=10}else{return-2}}else{addr=inetPton6(node);if(addr!==null){if(family===0||family===10){family=10}else{return-2}}}if(addr!=null){ai=allocaddrinfo(family,type,proto,node,addr,port);HEAPU32[out>>>2>>>0]=ai;return 0}if(flags&4){return-2}node=DNS.lookup_name(node);addr=inetPton4(node);if(family===0){family=2}else if(family===10){addr=[0,0,_htonl(65535),addr]}ai=allocaddrinfo(family,type,proto,null,addr,port);HEAPU32[out>>>2>>>0]=ai;return 0}_getaddrinfo.sig=\"ipppp\";function _getcontext(...args){return asyncifyStubs[\"getcontext\"](...args)}_getcontext.stub=true;asyncifyStubs[\"getcontext\"]=undefined;function _getdtablesize(...args){return asyncifyStubs[\"getdtablesize\"](...args)}_getdtablesize.stub=true;asyncifyStubs[\"getdtablesize\"]=undefined;function _getentropy(buffer,size){buffer>>>=0;size>>>=0;randomFill(HEAPU8.subarray(buffer>>>0,buffer+size>>>0));return 0}_getentropy.sig=\"ipp\";function _getnameinfo(sa,salen,node,nodelen,serv,servlen,flags){sa>>>=0;node>>>=0;serv>>>=0;var info=readSockaddr(sa,salen);if(info.errno){return-6}var port=info.port;var addr=info.addr;var overflowed=false;if(node&&nodelen){var lookup;if(flags&1||!(lookup=DNS.lookup_addr(addr))){if(flags&8){return-2}}else{addr=lookup}var numBytesWrittenExclNull=stringToUTF8(addr,node,nodelen);if(numBytesWrittenExclNull+1>=nodelen){overflowed=true}}if(serv&&servlen){port=\"\"+port;var numBytesWrittenExclNull=stringToUTF8(port,serv,servlen);if(numBytesWrittenExclNull+1>=servlen){overflowed=true}}if(overflowed){return-12}return 0}_getnameinfo.sig=\"ipipipii\";var Protocols={list:[],map:{}};var _setprotoent=stayopen=>{function allocprotoent(name,proto,aliases){var nameBuf=_malloc(name.length+1);stringToAscii(name,nameBuf);var j=0;var length=aliases.length;var aliasListBuf=_malloc((length+1)*4);for(var i=0;i>>2>>>0]=aliasBuf}HEAPU32[aliasListBuf+j>>>2>>>0]=0;var pe=_malloc(12);HEAPU32[pe>>>2>>>0]=nameBuf;HEAPU32[pe+4>>>2>>>0]=aliasListBuf;HEAP32[pe+8>>>2>>>0]=proto;return pe}var list=Protocols.list;var map=Protocols.map;if(list.length===0){var entry=allocprotoent(\"tcp\",6,[\"TCP\"]);list.push(entry);map[\"tcp\"]=map[\"6\"]=entry;entry=allocprotoent(\"udp\",17,[\"UDP\"]);list.push(entry);map[\"udp\"]=map[\"17\"]=entry}_setprotoent.index=0};_setprotoent.sig=\"vi\";function _getprotobyname(name){name>>>=0;name=UTF8ToString(name);_setprotoent(true);var result=Protocols.map[name];return result}_getprotobyname.sig=\"pp\";function _getprotobynumber(number){_setprotoent(true);var result=Protocols.map[number];return result}_getprotobynumber.sig=\"pi\";function _htmlDefaultSAXHandler(...args){return asyncifyStubs[\"htmlDefaultSAXHandler\"](...args)}_htmlDefaultSAXHandler.stub=true;asyncifyStubs[\"htmlDefaultSAXHandler\"]=undefined;function _isolat1ToUTF8(...args){return asyncifyStubs[\"isolat1ToUTF8\"](...args)}_isolat1ToUTF8.stub=true;asyncifyStubs[\"isolat1ToUTF8\"]=undefined;function _makecontext(...args){return asyncifyStubs[\"makecontext\"](...args)}_makecontext.stub=true;asyncifyStubs[\"makecontext\"]=undefined;function _oldXMLWDcompatibility(...args){return asyncifyStubs[\"oldXMLWDcompatibility\"](...args)}_oldXMLWDcompatibility.stub=true;asyncifyStubs[\"oldXMLWDcompatibility\"]=undefined;function _posix_spawnp(...args){return asyncifyStubs[\"posix_spawnp\"](...args)}_posix_spawnp.stub=true;asyncifyStubs[\"posix_spawnp\"]=undefined;var arraySum=(array,index)=>{var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum};var MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];var addDays=(date,days)=>{var newDate=new Date(date.getTime());while(days>0){var leap=isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate};function _strptime(buf,format,tm){buf>>>=0;format>>>=0;tm>>>=0;var pattern=UTF8ToString(format);var SPECIAL_CHARS=\"\\\\!@#$^&*()+=-[]/{}|:<>?,.\";for(var i=0,ii=SPECIAL_CHARS.length;iEQUIVALENT_MATCHERS[c]||m).replace(/%(.)/g,(_,c)=>{let pat=DATE_PATTERNS[c];if(pat){capture.push(c);return`(${pat})`}else{return c}}).replace(/\\s+/g,\"\\\\s*\");var matches=new RegExp(\"^\"+pattern_out,\"i\").exec(UTF8ToString(buf));function initDate(){function fixup(value,min,max){return typeof value!=\"number\"||isNaN(value)?min:value>=min?value<=max?value:max:min}return{year:fixup(HEAP32[tm+20>>>2>>>0]+1900,1970,9999),month:fixup(HEAP32[tm+16>>>2>>>0],0,11),day:fixup(HEAP32[tm+12>>>2>>>0],1,31),hour:fixup(HEAP32[tm+8>>>2>>>0],0,23),min:fixup(HEAP32[tm+4>>>2>>>0],0,59),sec:fixup(HEAP32[tm>>>2>>>0],0,59),gmtoff:0}}if(matches){var date=initDate();var value;var getMatch=symbol=>{var pos=capture.indexOf(symbol);if(pos>=0){return matches[pos+1]}return};if(value=getMatch(\"S\")){date.sec=jstoi_q(value)}if(value=getMatch(\"M\")){date.min=jstoi_q(value)}if(value=getMatch(\"H\")){date.hour=jstoi_q(value)}else if(value=getMatch(\"I\")){var hour=jstoi_q(value);if(value=getMatch(\"p\")){hour+=value.toUpperCase()[0]===\"P\"?12:0}date.hour=hour}if(value=getMatch(\"Y\")){date.year=jstoi_q(value)}else if(value=getMatch(\"y\")){var year=jstoi_q(value);if(value=getMatch(\"C\")){year+=jstoi_q(value)*100}else{year+=year<69?2e3:1900}date.year=year}if(value=getMatch(\"m\")){date.month=jstoi_q(value)-1}else if(value=getMatch(\"b\")){date.month=MONTH_NUMBERS[value.substring(0,3).toUpperCase()]||0}if(value=getMatch(\"d\")){date.day=jstoi_q(value)}else if(value=getMatch(\"j\")){var day=jstoi_q(value);var leapYear=isLeapYear(date.year);for(var month=0;month<12;++month){var daysUntilMonth=arraySum(leapYear?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,month-1);if(day<=daysUntilMonth+(leapYear?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR)[month]){date.day=day-daysUntilMonth}}}else if(value=getMatch(\"a\")){var weekDay=value.substring(0,3).toUpperCase();if(value=getMatch(\"U\")){var weekDayNumber=DAY_NUMBERS_SUN_FIRST[weekDay];var weekNumber=jstoi_q(value);var janFirst=new Date(date.year,0,1);var endDate;if(janFirst.getDay()===0){endDate=addDays(janFirst,weekDayNumber+7*(weekNumber-1))}else{endDate=addDays(janFirst,7-janFirst.getDay()+weekDayNumber+7*(weekNumber-1))}date.day=endDate.getDate();date.month=endDate.getMonth()}else if(value=getMatch(\"W\")){var weekDayNumber=DAY_NUMBERS_MON_FIRST[weekDay];var weekNumber=jstoi_q(value);var janFirst=new Date(date.year,0,1);var endDate;if(janFirst.getDay()===1){endDate=addDays(janFirst,weekDayNumber+7*(weekNumber-1))}else{endDate=addDays(janFirst,7-janFirst.getDay()+1+weekDayNumber+7*(weekNumber-1))}date.day=endDate.getDate();date.month=endDate.getMonth()}}if(value=getMatch(\"z\")){if(value.toLowerCase()===\"z\"){date.gmtoff=0}else{var match=value.match(/^((?:\\-|\\+)\\d\\d):?(\\d\\d)?/);date.gmtoff=match[1]*3600;if(match[2]){date.gmtoff+=date.gmtoff>0?match[2]*60:-match[2]*60}}}var fullDate=new Date(date.year,date.month,date.day,date.hour,date.min,date.sec,0);HEAP32[tm>>>2>>>0]=fullDate.getSeconds();HEAP32[tm+4>>>2>>>0]=fullDate.getMinutes();HEAP32[tm+8>>>2>>>0]=fullDate.getHours();HEAP32[tm+12>>>2>>>0]=fullDate.getDate();HEAP32[tm+16>>>2>>>0]=fullDate.getMonth();HEAP32[tm+20>>>2>>>0]=fullDate.getFullYear()-1900;HEAP32[tm+24>>>2>>>0]=fullDate.getDay();HEAP32[tm+28>>>2>>>0]=arraySum(isLeapYear(fullDate.getFullYear())?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,fullDate.getMonth()-1)+fullDate.getDate()-1;HEAP32[tm+32>>>2>>>0]=0;HEAP32[tm+36>>>2>>>0]=date.gmtoff;return buf+intArrayFromString(matches[0]).length-1}return 0}_strptime.sig=\"pppp\";function _swapcontext(...args){return asyncifyStubs[\"swapcontext\"](...args)}_swapcontext.stub=true;asyncifyStubs[\"swapcontext\"]=undefined;function _xmlAllocOutputBuffer(...args){return asyncifyStubs[\"xmlAllocOutputBuffer\"](...args)}_xmlAllocOutputBuffer.stub=true;asyncifyStubs[\"xmlAllocOutputBuffer\"]=undefined;function _xmlAllocParserInputBuffer(...args){return asyncifyStubs[\"xmlAllocParserInputBuffer\"](...args)}_xmlAllocParserInputBuffer.stub=true;asyncifyStubs[\"xmlAllocParserInputBuffer\"]=undefined;function _xmlBufferAllocScheme(...args){return asyncifyStubs[\"xmlBufferAllocScheme\"](...args)}_xmlBufferAllocScheme.stub=true;asyncifyStubs[\"xmlBufferAllocScheme\"]=undefined;function _xmlCopyError(...args){return asyncifyStubs[\"xmlCopyError\"](...args)}_xmlCopyError.stub=true;asyncifyStubs[\"xmlCopyError\"]=undefined;function _xmlDefaultBufferSize(...args){return asyncifyStubs[\"xmlDefaultBufferSize\"](...args)}_xmlDefaultBufferSize.stub=true;asyncifyStubs[\"xmlDefaultBufferSize\"]=undefined;function _xmlDefaultSAXHandler(...args){return asyncifyStubs[\"xmlDefaultSAXHandler\"](...args)}_xmlDefaultSAXHandler.stub=true;asyncifyStubs[\"xmlDefaultSAXHandler\"]=undefined;function _xmlDefaultSAXLocator(...args){return asyncifyStubs[\"xmlDefaultSAXLocator\"](...args)}_xmlDefaultSAXLocator.stub=true;asyncifyStubs[\"xmlDefaultSAXLocator\"]=undefined;function _xmlDeregisterNodeDefaultValue(...args){return asyncifyStubs[\"xmlDeregisterNodeDefaultValue\"](...args)}_xmlDeregisterNodeDefaultValue.stub=true;asyncifyStubs[\"xmlDeregisterNodeDefaultValue\"]=undefined;function _xmlDictOwns(...args){return asyncifyStubs[\"xmlDictOwns\"](...args)}_xmlDictOwns.stub=true;asyncifyStubs[\"xmlDictOwns\"]=undefined;function _xmlDoValidityCheckingDefaultValue(...args){return asyncifyStubs[\"xmlDoValidityCheckingDefaultValue\"](...args)}_xmlDoValidityCheckingDefaultValue.stub=true;asyncifyStubs[\"xmlDoValidityCheckingDefaultValue\"]=undefined;function _xmlFileClose(...args){return asyncifyStubs[\"xmlFileClose\"](...args)}_xmlFileClose.stub=true;asyncifyStubs[\"xmlFileClose\"]=undefined;function _xmlFileMatch(...args){return asyncifyStubs[\"xmlFileMatch\"](...args)}_xmlFileMatch.stub=true;asyncifyStubs[\"xmlFileMatch\"]=undefined;function _xmlFileOpen(...args){return asyncifyStubs[\"xmlFileOpen\"](...args)}_xmlFileOpen.stub=true;asyncifyStubs[\"xmlFileOpen\"]=undefined;function _xmlFileRead(...args){return asyncifyStubs[\"xmlFileRead\"](...args)}_xmlFileRead.stub=true;asyncifyStubs[\"xmlFileRead\"]=undefined;function _xmlFree(...args){return asyncifyStubs[\"xmlFree\"](...args)}_xmlFree.stub=true;asyncifyStubs[\"xmlFree\"]=undefined;function _xmlFreeDoc(...args){return asyncifyStubs[\"xmlFreeDoc\"](...args)}_xmlFreeDoc.stub=true;asyncifyStubs[\"xmlFreeDoc\"]=undefined;function _xmlFreeNode(...args){return asyncifyStubs[\"xmlFreeNode\"](...args)}_xmlFreeNode.stub=true;asyncifyStubs[\"xmlFreeNode\"]=undefined;function _xmlFreeNodeList(...args){return asyncifyStubs[\"xmlFreeNodeList\"](...args)}_xmlFreeNodeList.stub=true;asyncifyStubs[\"xmlFreeNodeList\"]=undefined;function _xmlFreeNs(...args){return asyncifyStubs[\"xmlFreeNs\"](...args)}_xmlFreeNs.stub=true;asyncifyStubs[\"xmlFreeNs\"]=undefined;function _xmlFreeParserInputBuffer(...args){return asyncifyStubs[\"xmlFreeParserInputBuffer\"](...args)}_xmlFreeParserInputBuffer.stub=true;asyncifyStubs[\"xmlFreeParserInputBuffer\"]=undefined;function _xmlFreeProp(...args){return asyncifyStubs[\"xmlFreeProp\"](...args)}_xmlFreeProp.stub=true;asyncifyStubs[\"xmlFreeProp\"]=undefined;function _xmlFreeURI(...args){return asyncifyStubs[\"xmlFreeURI\"](...args)}_xmlFreeURI.stub=true;asyncifyStubs[\"xmlFreeURI\"]=undefined;function _xmlGenericError(...args){return asyncifyStubs[\"xmlGenericError\"](...args)}_xmlGenericError.stub=true;asyncifyStubs[\"xmlGenericError\"]=undefined;function _xmlGenericErrorContext(...args){return asyncifyStubs[\"xmlGenericErrorContext\"](...args)}_xmlGenericErrorContext.stub=true;asyncifyStubs[\"xmlGenericErrorContext\"]=undefined;function _xmlGenericErrorDefaultFunc(...args){return asyncifyStubs[\"xmlGenericErrorDefaultFunc\"](...args)}_xmlGenericErrorDefaultFunc.stub=true;asyncifyStubs[\"xmlGenericErrorDefaultFunc\"]=undefined;function _xmlGetExternalEntityLoader(...args){return asyncifyStubs[\"xmlGetExternalEntityLoader\"](...args)}_xmlGetExternalEntityLoader.stub=true;asyncifyStubs[\"xmlGetExternalEntityLoader\"]=undefined;function _xmlGetLastError(...args){return asyncifyStubs[\"xmlGetLastError\"](...args)}_xmlGetLastError.stub=true;asyncifyStubs[\"xmlGetLastError\"]=undefined;function _xmlGetWarningsDefaultValue(...args){return asyncifyStubs[\"xmlGetWarningsDefaultValue\"](...args)}_xmlGetWarningsDefaultValue.stub=true;asyncifyStubs[\"xmlGetWarningsDefaultValue\"]=undefined;function _xmlHashDefaultDeallocator(...args){return asyncifyStubs[\"xmlHashDefaultDeallocator\"](...args)}_xmlHashDefaultDeallocator.stub=true;asyncifyStubs[\"xmlHashDefaultDeallocator\"]=undefined;function _xmlHashLookup(...args){return asyncifyStubs[\"xmlHashLookup\"](...args)}_xmlHashLookup.stub=true;asyncifyStubs[\"xmlHashLookup\"]=undefined;function _xmlHashRemoveEntry(...args){return asyncifyStubs[\"xmlHashRemoveEntry\"](...args)}_xmlHashRemoveEntry.stub=true;asyncifyStubs[\"xmlHashRemoveEntry\"]=undefined;function _xmlHashScan(...args){return asyncifyStubs[\"xmlHashScan\"](...args)}_xmlHashScan.stub=true;asyncifyStubs[\"xmlHashScan\"]=undefined;function _xmlIndentTreeOutput(...args){return asyncifyStubs[\"xmlIndentTreeOutput\"](...args)}_xmlIndentTreeOutput.stub=true;asyncifyStubs[\"xmlIndentTreeOutput\"]=undefined;function _xmlInitParser(...args){return asyncifyStubs[\"xmlInitParser\"](...args)}_xmlInitParser.stub=true;asyncifyStubs[\"xmlInitParser\"]=undefined;function _xmlInputReadCallbackNop(...args){return asyncifyStubs[\"xmlInputReadCallbackNop\"](...args)}_xmlInputReadCallbackNop.stub=true;asyncifyStubs[\"xmlInputReadCallbackNop\"]=undefined;function _xmlIsBaseCharGroup(...args){return asyncifyStubs[\"xmlIsBaseCharGroup\"](...args)}_xmlIsBaseCharGroup.stub=true;asyncifyStubs[\"xmlIsBaseCharGroup\"]=undefined;function _xmlIsCombiningGroup(...args){return asyncifyStubs[\"xmlIsCombiningGroup\"](...args)}_xmlIsCombiningGroup.stub=true;asyncifyStubs[\"xmlIsCombiningGroup\"]=undefined;function _xmlIsDigitGroup(...args){return asyncifyStubs[\"xmlIsDigitGroup\"](...args)}_xmlIsDigitGroup.stub=true;asyncifyStubs[\"xmlIsDigitGroup\"]=undefined;function _xmlIsExtenderGroup(...args){return asyncifyStubs[\"xmlIsExtenderGroup\"](...args)}_xmlIsExtenderGroup.stub=true;asyncifyStubs[\"xmlIsExtenderGroup\"]=undefined;function _xmlIsPubidChar_tab(...args){return asyncifyStubs[\"xmlIsPubidChar_tab\"](...args)}_xmlIsPubidChar_tab.stub=true;asyncifyStubs[\"xmlIsPubidChar_tab\"]=undefined;function _xmlKeepBlanksDefaultValue(...args){return asyncifyStubs[\"xmlKeepBlanksDefaultValue\"](...args)}_xmlKeepBlanksDefaultValue.stub=true;asyncifyStubs[\"xmlKeepBlanksDefaultValue\"]=undefined;function _xmlLastError(...args){return asyncifyStubs[\"xmlLastError\"](...args)}_xmlLastError.stub=true;asyncifyStubs[\"xmlLastError\"]=undefined;function _xmlLineNumbersDefaultValue(...args){return asyncifyStubs[\"xmlLineNumbersDefaultValue\"](...args)}_xmlLineNumbersDefaultValue.stub=true;asyncifyStubs[\"xmlLineNumbersDefaultValue\"]=undefined;function _xmlLoadExtDtdDefaultValue(...args){return asyncifyStubs[\"xmlLoadExtDtdDefaultValue\"](...args)}_xmlLoadExtDtdDefaultValue.stub=true;asyncifyStubs[\"xmlLoadExtDtdDefaultValue\"]=undefined;function _xmlMalloc(...args){return asyncifyStubs[\"xmlMalloc\"](...args)}_xmlMalloc.stub=true;asyncifyStubs[\"xmlMalloc\"]=undefined;function _xmlMallocAtomic(...args){return asyncifyStubs[\"xmlMallocAtomic\"](...args)}_xmlMallocAtomic.stub=true;asyncifyStubs[\"xmlMallocAtomic\"]=undefined;function _xmlMemStrdup(...args){return asyncifyStubs[\"xmlMemStrdup\"](...args)}_xmlMemStrdup.stub=true;asyncifyStubs[\"xmlMemStrdup\"]=undefined;function _xmlNewIOInputStream(...args){return asyncifyStubs[\"xmlNewIOInputStream\"](...args)}_xmlNewIOInputStream.stub=true;asyncifyStubs[\"xmlNewIOInputStream\"]=undefined;function _xmlNewInputFromFile(...args){return asyncifyStubs[\"xmlNewInputFromFile\"](...args)}_xmlNewInputFromFile.stub=true;asyncifyStubs[\"xmlNewInputFromFile\"]=undefined;function _xmlOutputBufferCreateFilenameDefault(...args){return asyncifyStubs[\"xmlOutputBufferCreateFilenameDefault\"](...args)}_xmlOutputBufferCreateFilenameDefault.stub=true;asyncifyStubs[\"xmlOutputBufferCreateFilenameDefault\"]=undefined;function _xmlOutputBufferCreateFilenameValue(...args){return asyncifyStubs[\"xmlOutputBufferCreateFilenameValue\"](...args)}_xmlOutputBufferCreateFilenameValue.stub=true;asyncifyStubs[\"xmlOutputBufferCreateFilenameValue\"]=undefined;function _xmlParseCharEncoding(...args){return asyncifyStubs[\"xmlParseCharEncoding\"](...args)}_xmlParseCharEncoding.stub=true;asyncifyStubs[\"xmlParseCharEncoding\"]=undefined;function _xmlParseURI(...args){return asyncifyStubs[\"xmlParseURI\"](...args)}_xmlParseURI.stub=true;asyncifyStubs[\"xmlParseURI\"]=undefined;function _xmlParserDebugEntities(...args){return asyncifyStubs[\"xmlParserDebugEntities\"](...args)}_xmlParserDebugEntities.stub=true;asyncifyStubs[\"xmlParserDebugEntities\"]=undefined;function _xmlParserError(...args){return asyncifyStubs[\"xmlParserError\"](...args)}_xmlParserError.stub=true;asyncifyStubs[\"xmlParserError\"]=undefined;function _xmlParserInputBufferCreateFilenameDefault(...args){return asyncifyStubs[\"xmlParserInputBufferCreateFilenameDefault\"](...args)}_xmlParserInputBufferCreateFilenameDefault.stub=true;asyncifyStubs[\"xmlParserInputBufferCreateFilenameDefault\"]=undefined;function _xmlParserInputBufferCreateFilenameValue(...args){return asyncifyStubs[\"xmlParserInputBufferCreateFilenameValue\"](...args)}_xmlParserInputBufferCreateFilenameValue.stub=true;asyncifyStubs[\"xmlParserInputBufferCreateFilenameValue\"]=undefined;function _xmlParserMaxDepth(...args){return asyncifyStubs[\"xmlParserMaxDepth\"](...args)}_xmlParserMaxDepth.stub=true;asyncifyStubs[\"xmlParserMaxDepth\"]=undefined;function _xmlParserValidityError(...args){return asyncifyStubs[\"xmlParserValidityError\"](...args)}_xmlParserValidityError.stub=true;asyncifyStubs[\"xmlParserValidityError\"]=undefined;function _xmlParserValidityWarning(...args){return asyncifyStubs[\"xmlParserValidityWarning\"](...args)}_xmlParserValidityWarning.stub=true;asyncifyStubs[\"xmlParserValidityWarning\"]=undefined;function _xmlParserVersion(...args){return asyncifyStubs[\"xmlParserVersion\"](...args)}_xmlParserVersion.stub=true;asyncifyStubs[\"xmlParserVersion\"]=undefined;function _xmlParserWarning(...args){return asyncifyStubs[\"xmlParserWarning\"](...args)}_xmlParserWarning.stub=true;asyncifyStubs[\"xmlParserWarning\"]=undefined;function _xmlPedanticParserDefaultValue(...args){return asyncifyStubs[\"xmlPedanticParserDefaultValue\"](...args)}_xmlPedanticParserDefaultValue.stub=true;asyncifyStubs[\"xmlPedanticParserDefaultValue\"]=undefined;function _xmlRealloc(...args){return asyncifyStubs[\"xmlRealloc\"](...args)}_xmlRealloc.stub=true;asyncifyStubs[\"xmlRealloc\"]=undefined;function _xmlReconciliateNs(...args){return asyncifyStubs[\"xmlReconciliateNs\"](...args)}_xmlReconciliateNs.stub=true;asyncifyStubs[\"xmlReconciliateNs\"]=undefined;function _xmlRegisterNodeDefaultValue(...args){return asyncifyStubs[\"xmlRegisterNodeDefaultValue\"](...args)}_xmlRegisterNodeDefaultValue.stub=true;asyncifyStubs[\"xmlRegisterNodeDefaultValue\"]=undefined;function _xmlRelaxNGCleanupTypes(...args){return asyncifyStubs[\"xmlRelaxNGCleanupTypes\"](...args)}_xmlRelaxNGCleanupTypes.stub=true;asyncifyStubs[\"xmlRelaxNGCleanupTypes\"]=undefined;function _xmlRemoveID(...args){return asyncifyStubs[\"xmlRemoveID\"](...args)}_xmlRemoveID.stub=true;asyncifyStubs[\"xmlRemoveID\"]=undefined;function _xmlResetError(...args){return asyncifyStubs[\"xmlResetError\"](...args)}_xmlResetError.stub=true;asyncifyStubs[\"xmlResetError\"]=undefined;function _xmlResetLastError(...args){return asyncifyStubs[\"xmlResetLastError\"](...args)}_xmlResetLastError.stub=true;asyncifyStubs[\"xmlResetLastError\"]=undefined;function _xmlSAX2AttributeDecl(...args){return asyncifyStubs[\"xmlSAX2AttributeDecl\"](...args)}_xmlSAX2AttributeDecl.stub=true;asyncifyStubs[\"xmlSAX2AttributeDecl\"]=undefined;function _xmlSAX2CDataBlock(...args){return asyncifyStubs[\"xmlSAX2CDataBlock\"](...args)}_xmlSAX2CDataBlock.stub=true;asyncifyStubs[\"xmlSAX2CDataBlock\"]=undefined;function _xmlSAX2Characters(...args){return asyncifyStubs[\"xmlSAX2Characters\"](...args)}_xmlSAX2Characters.stub=true;asyncifyStubs[\"xmlSAX2Characters\"]=undefined;function _xmlSAX2Comment(...args){return asyncifyStubs[\"xmlSAX2Comment\"](...args)}_xmlSAX2Comment.stub=true;asyncifyStubs[\"xmlSAX2Comment\"]=undefined;function _xmlSAX2ElementDecl(...args){return asyncifyStubs[\"xmlSAX2ElementDecl\"](...args)}_xmlSAX2ElementDecl.stub=true;asyncifyStubs[\"xmlSAX2ElementDecl\"]=undefined;function _xmlSAX2EndDocument(...args){return asyncifyStubs[\"xmlSAX2EndDocument\"](...args)}_xmlSAX2EndDocument.stub=true;asyncifyStubs[\"xmlSAX2EndDocument\"]=undefined;function _xmlSAX2EndElement(...args){return asyncifyStubs[\"xmlSAX2EndElement\"](...args)}_xmlSAX2EndElement.stub=true;asyncifyStubs[\"xmlSAX2EndElement\"]=undefined;function _xmlSAX2EndElementNs(...args){return asyncifyStubs[\"xmlSAX2EndElementNs\"](...args)}_xmlSAX2EndElementNs.stub=true;asyncifyStubs[\"xmlSAX2EndElementNs\"]=undefined;function _xmlSAX2EntityDecl(...args){return asyncifyStubs[\"xmlSAX2EntityDecl\"](...args)}_xmlSAX2EntityDecl.stub=true;asyncifyStubs[\"xmlSAX2EntityDecl\"]=undefined;function _xmlSAX2ExternalSubset(...args){return asyncifyStubs[\"xmlSAX2ExternalSubset\"](...args)}_xmlSAX2ExternalSubset.stub=true;asyncifyStubs[\"xmlSAX2ExternalSubset\"]=undefined;function _xmlSAX2GetColumnNumber(...args){return asyncifyStubs[\"xmlSAX2GetColumnNumber\"](...args)}_xmlSAX2GetColumnNumber.stub=true;asyncifyStubs[\"xmlSAX2GetColumnNumber\"]=undefined;function _xmlSAX2GetEntity(...args){return asyncifyStubs[\"xmlSAX2GetEntity\"](...args)}_xmlSAX2GetEntity.stub=true;asyncifyStubs[\"xmlSAX2GetEntity\"]=undefined;function _xmlSAX2GetLineNumber(...args){return asyncifyStubs[\"xmlSAX2GetLineNumber\"](...args)}_xmlSAX2GetLineNumber.stub=true;asyncifyStubs[\"xmlSAX2GetLineNumber\"]=undefined;function _xmlSAX2GetParameterEntity(...args){return asyncifyStubs[\"xmlSAX2GetParameterEntity\"](...args)}_xmlSAX2GetParameterEntity.stub=true;asyncifyStubs[\"xmlSAX2GetParameterEntity\"]=undefined;function _xmlSAX2GetPublicId(...args){return asyncifyStubs[\"xmlSAX2GetPublicId\"](...args)}_xmlSAX2GetPublicId.stub=true;asyncifyStubs[\"xmlSAX2GetPublicId\"]=undefined;function _xmlSAX2GetSystemId(...args){return asyncifyStubs[\"xmlSAX2GetSystemId\"](...args)}_xmlSAX2GetSystemId.stub=true;asyncifyStubs[\"xmlSAX2GetSystemId\"]=undefined;function _xmlSAX2HasExternalSubset(...args){return asyncifyStubs[\"xmlSAX2HasExternalSubset\"](...args)}_xmlSAX2HasExternalSubset.stub=true;asyncifyStubs[\"xmlSAX2HasExternalSubset\"]=undefined;function _xmlSAX2HasInternalSubset(...args){return asyncifyStubs[\"xmlSAX2HasInternalSubset\"](...args)}_xmlSAX2HasInternalSubset.stub=true;asyncifyStubs[\"xmlSAX2HasInternalSubset\"]=undefined;function _xmlSAX2IgnorableWhitespace(...args){return asyncifyStubs[\"xmlSAX2IgnorableWhitespace\"](...args)}_xmlSAX2IgnorableWhitespace.stub=true;asyncifyStubs[\"xmlSAX2IgnorableWhitespace\"]=undefined;function _xmlSAX2InternalSubset(...args){return asyncifyStubs[\"xmlSAX2InternalSubset\"](...args)}_xmlSAX2InternalSubset.stub=true;asyncifyStubs[\"xmlSAX2InternalSubset\"]=undefined;function _xmlSAX2IsStandalone(...args){return asyncifyStubs[\"xmlSAX2IsStandalone\"](...args)}_xmlSAX2IsStandalone.stub=true;asyncifyStubs[\"xmlSAX2IsStandalone\"]=undefined;function _xmlSAX2NotationDecl(...args){return asyncifyStubs[\"xmlSAX2NotationDecl\"](...args)}_xmlSAX2NotationDecl.stub=true;asyncifyStubs[\"xmlSAX2NotationDecl\"]=undefined;function _xmlSAX2ProcessingInstruction(...args){return asyncifyStubs[\"xmlSAX2ProcessingInstruction\"](...args)}_xmlSAX2ProcessingInstruction.stub=true;asyncifyStubs[\"xmlSAX2ProcessingInstruction\"]=undefined;function _xmlSAX2Reference(...args){return asyncifyStubs[\"xmlSAX2Reference\"](...args)}_xmlSAX2Reference.stub=true;asyncifyStubs[\"xmlSAX2Reference\"]=undefined;function _xmlSAX2ResolveEntity(...args){return asyncifyStubs[\"xmlSAX2ResolveEntity\"](...args)}_xmlSAX2ResolveEntity.stub=true;asyncifyStubs[\"xmlSAX2ResolveEntity\"]=undefined;function _xmlSAX2SetDocumentLocator(...args){return asyncifyStubs[\"xmlSAX2SetDocumentLocator\"](...args)}_xmlSAX2SetDocumentLocator.stub=true;asyncifyStubs[\"xmlSAX2SetDocumentLocator\"]=undefined;function _xmlSAX2StartDocument(...args){return asyncifyStubs[\"xmlSAX2StartDocument\"](...args)}_xmlSAX2StartDocument.stub=true;asyncifyStubs[\"xmlSAX2StartDocument\"]=undefined;function _xmlSAX2StartElement(...args){return asyncifyStubs[\"xmlSAX2StartElement\"](...args)}_xmlSAX2StartElement.stub=true;asyncifyStubs[\"xmlSAX2StartElement\"]=undefined;function _xmlSAX2StartElementNs(...args){return asyncifyStubs[\"xmlSAX2StartElementNs\"](...args)}_xmlSAX2StartElementNs.stub=true;asyncifyStubs[\"xmlSAX2StartElementNs\"]=undefined;function _xmlSAX2UnparsedEntityDecl(...args){return asyncifyStubs[\"xmlSAX2UnparsedEntityDecl\"](...args)}_xmlSAX2UnparsedEntityDecl.stub=true;asyncifyStubs[\"xmlSAX2UnparsedEntityDecl\"]=undefined;function _xmlSaveNoEmptyTags(...args){return asyncifyStubs[\"xmlSaveNoEmptyTags\"](...args)}_xmlSaveNoEmptyTags.stub=true;asyncifyStubs[\"xmlSaveNoEmptyTags\"]=undefined;function _xmlSetExternalEntityLoader(...args){return asyncifyStubs[\"xmlSetExternalEntityLoader\"](...args)}_xmlSetExternalEntityLoader.stub=true;asyncifyStubs[\"xmlSetExternalEntityLoader\"]=undefined;function _xmlSetGenericErrorFunc(...args){return asyncifyStubs[\"xmlSetGenericErrorFunc\"](...args)}_xmlSetGenericErrorFunc.stub=true;asyncifyStubs[\"xmlSetGenericErrorFunc\"]=undefined;function _xmlSetStructuredErrorFunc(...args){return asyncifyStubs[\"xmlSetStructuredErrorFunc\"](...args)}_xmlSetStructuredErrorFunc.stub=true;asyncifyStubs[\"xmlSetStructuredErrorFunc\"]=undefined;function _xmlStrdup(...args){return asyncifyStubs[\"xmlStrdup\"](...args)}_xmlStrdup.stub=true;asyncifyStubs[\"xmlStrdup\"]=undefined;function _xmlStringComment(...args){return asyncifyStubs[\"xmlStringComment\"](...args)}_xmlStringComment.stub=true;asyncifyStubs[\"xmlStringComment\"]=undefined;function _xmlStringText(...args){return asyncifyStubs[\"xmlStringText\"](...args)}_xmlStringText.stub=true;asyncifyStubs[\"xmlStringText\"]=undefined;function _xmlStringTextNoenc(...args){return asyncifyStubs[\"xmlStringTextNoenc\"](...args)}_xmlStringTextNoenc.stub=true;asyncifyStubs[\"xmlStringTextNoenc\"]=undefined;function _xmlStrncmp(...args){return asyncifyStubs[\"xmlStrncmp\"](...args)}_xmlStrncmp.stub=true;asyncifyStubs[\"xmlStrncmp\"]=undefined;function _xmlStructuredError(...args){return asyncifyStubs[\"xmlStructuredError\"](...args)}_xmlStructuredError.stub=true;asyncifyStubs[\"xmlStructuredError\"]=undefined;function _xmlStructuredErrorContext(...args){return asyncifyStubs[\"xmlStructuredErrorContext\"](...args)}_xmlStructuredErrorContext.stub=true;asyncifyStubs[\"xmlStructuredErrorContext\"]=undefined;function _xmlSubstituteEntitiesDefaultValue(...args){return asyncifyStubs[\"xmlSubstituteEntitiesDefaultValue\"](...args)}_xmlSubstituteEntitiesDefaultValue.stub=true;asyncifyStubs[\"xmlSubstituteEntitiesDefaultValue\"]=undefined;function _xmlTreeIndentString(...args){return asyncifyStubs[\"xmlTreeIndentString\"](...args)}_xmlTreeIndentString.stub=true;asyncifyStubs[\"xmlTreeIndentString\"]=undefined;function _xmlUCSIsAegeanNumbers(...args){return asyncifyStubs[\"xmlUCSIsAegeanNumbers\"](...args)}_xmlUCSIsAegeanNumbers.stub=true;asyncifyStubs[\"xmlUCSIsAegeanNumbers\"]=undefined;function _xmlUCSIsAlphabeticPresentationForms(...args){return asyncifyStubs[\"xmlUCSIsAlphabeticPresentationForms\"](...args)}_xmlUCSIsAlphabeticPresentationForms.stub=true;asyncifyStubs[\"xmlUCSIsAlphabeticPresentationForms\"]=undefined;function _xmlUCSIsArabic(...args){return asyncifyStubs[\"xmlUCSIsArabic\"](...args)}_xmlUCSIsArabic.stub=true;asyncifyStubs[\"xmlUCSIsArabic\"]=undefined;function _xmlUCSIsArabicPresentationFormsA(...args){return asyncifyStubs[\"xmlUCSIsArabicPresentationFormsA\"](...args)}_xmlUCSIsArabicPresentationFormsA.stub=true;asyncifyStubs[\"xmlUCSIsArabicPresentationFormsA\"]=undefined;function _xmlUCSIsArabicPresentationFormsB(...args){return asyncifyStubs[\"xmlUCSIsArabicPresentationFormsB\"](...args)}_xmlUCSIsArabicPresentationFormsB.stub=true;asyncifyStubs[\"xmlUCSIsArabicPresentationFormsB\"]=undefined;function _xmlUCSIsArmenian(...args){return asyncifyStubs[\"xmlUCSIsArmenian\"](...args)}_xmlUCSIsArmenian.stub=true;asyncifyStubs[\"xmlUCSIsArmenian\"]=undefined;function _xmlUCSIsArrows(...args){return asyncifyStubs[\"xmlUCSIsArrows\"](...args)}_xmlUCSIsArrows.stub=true;asyncifyStubs[\"xmlUCSIsArrows\"]=undefined;function _xmlUCSIsBasicLatin(...args){return asyncifyStubs[\"xmlUCSIsBasicLatin\"](...args)}_xmlUCSIsBasicLatin.stub=true;asyncifyStubs[\"xmlUCSIsBasicLatin\"]=undefined;function _xmlUCSIsBengali(...args){return asyncifyStubs[\"xmlUCSIsBengali\"](...args)}_xmlUCSIsBengali.stub=true;asyncifyStubs[\"xmlUCSIsBengali\"]=undefined;function _xmlUCSIsBlockElements(...args){return asyncifyStubs[\"xmlUCSIsBlockElements\"](...args)}_xmlUCSIsBlockElements.stub=true;asyncifyStubs[\"xmlUCSIsBlockElements\"]=undefined;function _xmlUCSIsBopomofo(...args){return asyncifyStubs[\"xmlUCSIsBopomofo\"](...args)}_xmlUCSIsBopomofo.stub=true;asyncifyStubs[\"xmlUCSIsBopomofo\"]=undefined;function _xmlUCSIsBopomofoExtended(...args){return asyncifyStubs[\"xmlUCSIsBopomofoExtended\"](...args)}_xmlUCSIsBopomofoExtended.stub=true;asyncifyStubs[\"xmlUCSIsBopomofoExtended\"]=undefined;function _xmlUCSIsBoxDrawing(...args){return asyncifyStubs[\"xmlUCSIsBoxDrawing\"](...args)}_xmlUCSIsBoxDrawing.stub=true;asyncifyStubs[\"xmlUCSIsBoxDrawing\"]=undefined;function _xmlUCSIsBraillePatterns(...args){return asyncifyStubs[\"xmlUCSIsBraillePatterns\"](...args)}_xmlUCSIsBraillePatterns.stub=true;asyncifyStubs[\"xmlUCSIsBraillePatterns\"]=undefined;function _xmlUCSIsBuhid(...args){return asyncifyStubs[\"xmlUCSIsBuhid\"](...args)}_xmlUCSIsBuhid.stub=true;asyncifyStubs[\"xmlUCSIsBuhid\"]=undefined;function _xmlUCSIsByzantineMusicalSymbols(...args){return asyncifyStubs[\"xmlUCSIsByzantineMusicalSymbols\"](...args)}_xmlUCSIsByzantineMusicalSymbols.stub=true;asyncifyStubs[\"xmlUCSIsByzantineMusicalSymbols\"]=undefined;function _xmlUCSIsCJKCompatibility(...args){return asyncifyStubs[\"xmlUCSIsCJKCompatibility\"](...args)}_xmlUCSIsCJKCompatibility.stub=true;asyncifyStubs[\"xmlUCSIsCJKCompatibility\"]=undefined;function _xmlUCSIsCJKCompatibilityForms(...args){return asyncifyStubs[\"xmlUCSIsCJKCompatibilityForms\"](...args)}_xmlUCSIsCJKCompatibilityForms.stub=true;asyncifyStubs[\"xmlUCSIsCJKCompatibilityForms\"]=undefined;function _xmlUCSIsCJKCompatibilityIdeographs(...args){return asyncifyStubs[\"xmlUCSIsCJKCompatibilityIdeographs\"](...args)}_xmlUCSIsCJKCompatibilityIdeographs.stub=true;asyncifyStubs[\"xmlUCSIsCJKCompatibilityIdeographs\"]=undefined;function _xmlUCSIsCJKCompatibilityIdeographsSupplement(...args){return asyncifyStubs[\"xmlUCSIsCJKCompatibilityIdeographsSupplement\"](...args)}_xmlUCSIsCJKCompatibilityIdeographsSupplement.stub=true;asyncifyStubs[\"xmlUCSIsCJKCompatibilityIdeographsSupplement\"]=undefined;function _xmlUCSIsCJKRadicalsSupplement(...args){return asyncifyStubs[\"xmlUCSIsCJKRadicalsSupplement\"](...args)}_xmlUCSIsCJKRadicalsSupplement.stub=true;asyncifyStubs[\"xmlUCSIsCJKRadicalsSupplement\"]=undefined;function _xmlUCSIsCJKSymbolsandPunctuation(...args){return asyncifyStubs[\"xmlUCSIsCJKSymbolsandPunctuation\"](...args)}_xmlUCSIsCJKSymbolsandPunctuation.stub=true;asyncifyStubs[\"xmlUCSIsCJKSymbolsandPunctuation\"]=undefined;function _xmlUCSIsCJKUnifiedIdeographs(...args){return asyncifyStubs[\"xmlUCSIsCJKUnifiedIdeographs\"](...args)}_xmlUCSIsCJKUnifiedIdeographs.stub=true;asyncifyStubs[\"xmlUCSIsCJKUnifiedIdeographs\"]=undefined;function _xmlUCSIsCJKUnifiedIdeographsExtensionA(...args){return asyncifyStubs[\"xmlUCSIsCJKUnifiedIdeographsExtensionA\"](...args)}_xmlUCSIsCJKUnifiedIdeographsExtensionA.stub=true;asyncifyStubs[\"xmlUCSIsCJKUnifiedIdeographsExtensionA\"]=undefined;function _xmlUCSIsCJKUnifiedIdeographsExtensionB(...args){return asyncifyStubs[\"xmlUCSIsCJKUnifiedIdeographsExtensionB\"](...args)}_xmlUCSIsCJKUnifiedIdeographsExtensionB.stub=true;asyncifyStubs[\"xmlUCSIsCJKUnifiedIdeographsExtensionB\"]=undefined;function _xmlUCSIsCatC(...args){return asyncifyStubs[\"xmlUCSIsCatC\"](...args)}_xmlUCSIsCatC.stub=true;asyncifyStubs[\"xmlUCSIsCatC\"]=undefined;function _xmlUCSIsCatCc(...args){return asyncifyStubs[\"xmlUCSIsCatCc\"](...args)}_xmlUCSIsCatCc.stub=true;asyncifyStubs[\"xmlUCSIsCatCc\"]=undefined;function _xmlUCSIsCatCf(...args){return asyncifyStubs[\"xmlUCSIsCatCf\"](...args)}_xmlUCSIsCatCf.stub=true;asyncifyStubs[\"xmlUCSIsCatCf\"]=undefined;function _xmlUCSIsCatCo(...args){return asyncifyStubs[\"xmlUCSIsCatCo\"](...args)}_xmlUCSIsCatCo.stub=true;asyncifyStubs[\"xmlUCSIsCatCo\"]=undefined;function _xmlUCSIsCatCs(...args){return asyncifyStubs[\"xmlUCSIsCatCs\"](...args)}_xmlUCSIsCatCs.stub=true;asyncifyStubs[\"xmlUCSIsCatCs\"]=undefined;function _xmlUCSIsCatL(...args){return asyncifyStubs[\"xmlUCSIsCatL\"](...args)}_xmlUCSIsCatL.stub=true;asyncifyStubs[\"xmlUCSIsCatL\"]=undefined;function _xmlUCSIsCatLl(...args){return asyncifyStubs[\"xmlUCSIsCatLl\"](...args)}_xmlUCSIsCatLl.stub=true;asyncifyStubs[\"xmlUCSIsCatLl\"]=undefined;function _xmlUCSIsCatLm(...args){return asyncifyStubs[\"xmlUCSIsCatLm\"](...args)}_xmlUCSIsCatLm.stub=true;asyncifyStubs[\"xmlUCSIsCatLm\"]=undefined;function _xmlUCSIsCatLo(...args){return asyncifyStubs[\"xmlUCSIsCatLo\"](...args)}_xmlUCSIsCatLo.stub=true;asyncifyStubs[\"xmlUCSIsCatLo\"]=undefined;function _xmlUCSIsCatLt(...args){return asyncifyStubs[\"xmlUCSIsCatLt\"](...args)}_xmlUCSIsCatLt.stub=true;asyncifyStubs[\"xmlUCSIsCatLt\"]=undefined;function _xmlUCSIsCatLu(...args){return asyncifyStubs[\"xmlUCSIsCatLu\"](...args)}_xmlUCSIsCatLu.stub=true;asyncifyStubs[\"xmlUCSIsCatLu\"]=undefined;function _xmlUCSIsCatM(...args){return asyncifyStubs[\"xmlUCSIsCatM\"](...args)}_xmlUCSIsCatM.stub=true;asyncifyStubs[\"xmlUCSIsCatM\"]=undefined;function _xmlUCSIsCatMc(...args){return asyncifyStubs[\"xmlUCSIsCatMc\"](...args)}_xmlUCSIsCatMc.stub=true;asyncifyStubs[\"xmlUCSIsCatMc\"]=undefined;function _xmlUCSIsCatMe(...args){return asyncifyStubs[\"xmlUCSIsCatMe\"](...args)}_xmlUCSIsCatMe.stub=true;asyncifyStubs[\"xmlUCSIsCatMe\"]=undefined;function _xmlUCSIsCatMn(...args){return asyncifyStubs[\"xmlUCSIsCatMn\"](...args)}_xmlUCSIsCatMn.stub=true;asyncifyStubs[\"xmlUCSIsCatMn\"]=undefined;function _xmlUCSIsCatN(...args){return asyncifyStubs[\"xmlUCSIsCatN\"](...args)}_xmlUCSIsCatN.stub=true;asyncifyStubs[\"xmlUCSIsCatN\"]=undefined;function _xmlUCSIsCatNd(...args){return asyncifyStubs[\"xmlUCSIsCatNd\"](...args)}_xmlUCSIsCatNd.stub=true;asyncifyStubs[\"xmlUCSIsCatNd\"]=undefined;function _xmlUCSIsCatNl(...args){return asyncifyStubs[\"xmlUCSIsCatNl\"](...args)}_xmlUCSIsCatNl.stub=true;asyncifyStubs[\"xmlUCSIsCatNl\"]=undefined;function _xmlUCSIsCatNo(...args){return asyncifyStubs[\"xmlUCSIsCatNo\"](...args)}_xmlUCSIsCatNo.stub=true;asyncifyStubs[\"xmlUCSIsCatNo\"]=undefined;function _xmlUCSIsCatP(...args){return asyncifyStubs[\"xmlUCSIsCatP\"](...args)}_xmlUCSIsCatP.stub=true;asyncifyStubs[\"xmlUCSIsCatP\"]=undefined;function _xmlUCSIsCatPc(...args){return asyncifyStubs[\"xmlUCSIsCatPc\"](...args)}_xmlUCSIsCatPc.stub=true;asyncifyStubs[\"xmlUCSIsCatPc\"]=undefined;function _xmlUCSIsCatPd(...args){return asyncifyStubs[\"xmlUCSIsCatPd\"](...args)}_xmlUCSIsCatPd.stub=true;asyncifyStubs[\"xmlUCSIsCatPd\"]=undefined;function _xmlUCSIsCatPe(...args){return asyncifyStubs[\"xmlUCSIsCatPe\"](...args)}_xmlUCSIsCatPe.stub=true;asyncifyStubs[\"xmlUCSIsCatPe\"]=undefined;function _xmlUCSIsCatPf(...args){return asyncifyStubs[\"xmlUCSIsCatPf\"](...args)}_xmlUCSIsCatPf.stub=true;asyncifyStubs[\"xmlUCSIsCatPf\"]=undefined;function _xmlUCSIsCatPi(...args){return asyncifyStubs[\"xmlUCSIsCatPi\"](...args)}_xmlUCSIsCatPi.stub=true;asyncifyStubs[\"xmlUCSIsCatPi\"]=undefined;function _xmlUCSIsCatPo(...args){return asyncifyStubs[\"xmlUCSIsCatPo\"](...args)}_xmlUCSIsCatPo.stub=true;asyncifyStubs[\"xmlUCSIsCatPo\"]=undefined;function _xmlUCSIsCatPs(...args){return asyncifyStubs[\"xmlUCSIsCatPs\"](...args)}_xmlUCSIsCatPs.stub=true;asyncifyStubs[\"xmlUCSIsCatPs\"]=undefined;function _xmlUCSIsCatS(...args){return asyncifyStubs[\"xmlUCSIsCatS\"](...args)}_xmlUCSIsCatS.stub=true;asyncifyStubs[\"xmlUCSIsCatS\"]=undefined;function _xmlUCSIsCatSc(...args){return asyncifyStubs[\"xmlUCSIsCatSc\"](...args)}_xmlUCSIsCatSc.stub=true;asyncifyStubs[\"xmlUCSIsCatSc\"]=undefined;function _xmlUCSIsCatSk(...args){return asyncifyStubs[\"xmlUCSIsCatSk\"](...args)}_xmlUCSIsCatSk.stub=true;asyncifyStubs[\"xmlUCSIsCatSk\"]=undefined;function _xmlUCSIsCatSm(...args){return asyncifyStubs[\"xmlUCSIsCatSm\"](...args)}_xmlUCSIsCatSm.stub=true;asyncifyStubs[\"xmlUCSIsCatSm\"]=undefined;function _xmlUCSIsCatSo(...args){return asyncifyStubs[\"xmlUCSIsCatSo\"](...args)}_xmlUCSIsCatSo.stub=true;asyncifyStubs[\"xmlUCSIsCatSo\"]=undefined;function _xmlUCSIsCatZ(...args){return asyncifyStubs[\"xmlUCSIsCatZ\"](...args)}_xmlUCSIsCatZ.stub=true;asyncifyStubs[\"xmlUCSIsCatZ\"]=undefined;function _xmlUCSIsCatZl(...args){return asyncifyStubs[\"xmlUCSIsCatZl\"](...args)}_xmlUCSIsCatZl.stub=true;asyncifyStubs[\"xmlUCSIsCatZl\"]=undefined;function _xmlUCSIsCatZp(...args){return asyncifyStubs[\"xmlUCSIsCatZp\"](...args)}_xmlUCSIsCatZp.stub=true;asyncifyStubs[\"xmlUCSIsCatZp\"]=undefined;function _xmlUCSIsCatZs(...args){return asyncifyStubs[\"xmlUCSIsCatZs\"](...args)}_xmlUCSIsCatZs.stub=true;asyncifyStubs[\"xmlUCSIsCatZs\"]=undefined;function _xmlUCSIsCherokee(...args){return asyncifyStubs[\"xmlUCSIsCherokee\"](...args)}_xmlUCSIsCherokee.stub=true;asyncifyStubs[\"xmlUCSIsCherokee\"]=undefined;function _xmlUCSIsCombiningDiacriticalMarks(...args){return asyncifyStubs[\"xmlUCSIsCombiningDiacriticalMarks\"](...args)}_xmlUCSIsCombiningDiacriticalMarks.stub=true;asyncifyStubs[\"xmlUCSIsCombiningDiacriticalMarks\"]=undefined;function _xmlUCSIsCombiningDiacriticalMarksforSymbols(...args){return asyncifyStubs[\"xmlUCSIsCombiningDiacriticalMarksforSymbols\"](...args)}_xmlUCSIsCombiningDiacriticalMarksforSymbols.stub=true;asyncifyStubs[\"xmlUCSIsCombiningDiacriticalMarksforSymbols\"]=undefined;function _xmlUCSIsCombiningHalfMarks(...args){return asyncifyStubs[\"xmlUCSIsCombiningHalfMarks\"](...args)}_xmlUCSIsCombiningHalfMarks.stub=true;asyncifyStubs[\"xmlUCSIsCombiningHalfMarks\"]=undefined;function _xmlUCSIsCombiningMarksforSymbols(...args){return asyncifyStubs[\"xmlUCSIsCombiningMarksforSymbols\"](...args)}_xmlUCSIsCombiningMarksforSymbols.stub=true;asyncifyStubs[\"xmlUCSIsCombiningMarksforSymbols\"]=undefined;function _xmlUCSIsControlPictures(...args){return asyncifyStubs[\"xmlUCSIsControlPictures\"](...args)}_xmlUCSIsControlPictures.stub=true;asyncifyStubs[\"xmlUCSIsControlPictures\"]=undefined;function _xmlUCSIsCurrencySymbols(...args){return asyncifyStubs[\"xmlUCSIsCurrencySymbols\"](...args)}_xmlUCSIsCurrencySymbols.stub=true;asyncifyStubs[\"xmlUCSIsCurrencySymbols\"]=undefined;function _xmlUCSIsCypriotSyllabary(...args){return asyncifyStubs[\"xmlUCSIsCypriotSyllabary\"](...args)}_xmlUCSIsCypriotSyllabary.stub=true;asyncifyStubs[\"xmlUCSIsCypriotSyllabary\"]=undefined;function _xmlUCSIsCyrillic(...args){return asyncifyStubs[\"xmlUCSIsCyrillic\"](...args)}_xmlUCSIsCyrillic.stub=true;asyncifyStubs[\"xmlUCSIsCyrillic\"]=undefined;function _xmlUCSIsCyrillicSupplement(...args){return asyncifyStubs[\"xmlUCSIsCyrillicSupplement\"](...args)}_xmlUCSIsCyrillicSupplement.stub=true;asyncifyStubs[\"xmlUCSIsCyrillicSupplement\"]=undefined;function _xmlUCSIsDeseret(...args){return asyncifyStubs[\"xmlUCSIsDeseret\"](...args)}_xmlUCSIsDeseret.stub=true;asyncifyStubs[\"xmlUCSIsDeseret\"]=undefined;function _xmlUCSIsDevanagari(...args){return asyncifyStubs[\"xmlUCSIsDevanagari\"](...args)}_xmlUCSIsDevanagari.stub=true;asyncifyStubs[\"xmlUCSIsDevanagari\"]=undefined;function _xmlUCSIsDingbats(...args){return asyncifyStubs[\"xmlUCSIsDingbats\"](...args)}_xmlUCSIsDingbats.stub=true;asyncifyStubs[\"xmlUCSIsDingbats\"]=undefined;function _xmlUCSIsEnclosedAlphanumerics(...args){return asyncifyStubs[\"xmlUCSIsEnclosedAlphanumerics\"](...args)}_xmlUCSIsEnclosedAlphanumerics.stub=true;asyncifyStubs[\"xmlUCSIsEnclosedAlphanumerics\"]=undefined;function _xmlUCSIsEnclosedCJKLettersandMonths(...args){return asyncifyStubs[\"xmlUCSIsEnclosedCJKLettersandMonths\"](...args)}_xmlUCSIsEnclosedCJKLettersandMonths.stub=true;asyncifyStubs[\"xmlUCSIsEnclosedCJKLettersandMonths\"]=undefined;function _xmlUCSIsEthiopic(...args){return asyncifyStubs[\"xmlUCSIsEthiopic\"](...args)}_xmlUCSIsEthiopic.stub=true;asyncifyStubs[\"xmlUCSIsEthiopic\"]=undefined;function _xmlUCSIsGeneralPunctuation(...args){return asyncifyStubs[\"xmlUCSIsGeneralPunctuation\"](...args)}_xmlUCSIsGeneralPunctuation.stub=true;asyncifyStubs[\"xmlUCSIsGeneralPunctuation\"]=undefined;function _xmlUCSIsGeometricShapes(...args){return asyncifyStubs[\"xmlUCSIsGeometricShapes\"](...args)}_xmlUCSIsGeometricShapes.stub=true;asyncifyStubs[\"xmlUCSIsGeometricShapes\"]=undefined;function _xmlUCSIsGeorgian(...args){return asyncifyStubs[\"xmlUCSIsGeorgian\"](...args)}_xmlUCSIsGeorgian.stub=true;asyncifyStubs[\"xmlUCSIsGeorgian\"]=undefined;function _xmlUCSIsGothic(...args){return asyncifyStubs[\"xmlUCSIsGothic\"](...args)}_xmlUCSIsGothic.stub=true;asyncifyStubs[\"xmlUCSIsGothic\"]=undefined;function _xmlUCSIsGreek(...args){return asyncifyStubs[\"xmlUCSIsGreek\"](...args)}_xmlUCSIsGreek.stub=true;asyncifyStubs[\"xmlUCSIsGreek\"]=undefined;function _xmlUCSIsGreekExtended(...args){return asyncifyStubs[\"xmlUCSIsGreekExtended\"](...args)}_xmlUCSIsGreekExtended.stub=true;asyncifyStubs[\"xmlUCSIsGreekExtended\"]=undefined;function _xmlUCSIsGreekandCoptic(...args){return asyncifyStubs[\"xmlUCSIsGreekandCoptic\"](...args)}_xmlUCSIsGreekandCoptic.stub=true;asyncifyStubs[\"xmlUCSIsGreekandCoptic\"]=undefined;function _xmlUCSIsGujarati(...args){return asyncifyStubs[\"xmlUCSIsGujarati\"](...args)}_xmlUCSIsGujarati.stub=true;asyncifyStubs[\"xmlUCSIsGujarati\"]=undefined;function _xmlUCSIsGurmukhi(...args){return asyncifyStubs[\"xmlUCSIsGurmukhi\"](...args)}_xmlUCSIsGurmukhi.stub=true;asyncifyStubs[\"xmlUCSIsGurmukhi\"]=undefined;function _xmlUCSIsHalfwidthandFullwidthForms(...args){return asyncifyStubs[\"xmlUCSIsHalfwidthandFullwidthForms\"](...args)}_xmlUCSIsHalfwidthandFullwidthForms.stub=true;asyncifyStubs[\"xmlUCSIsHalfwidthandFullwidthForms\"]=undefined;function _xmlUCSIsHangulCompatibilityJamo(...args){return asyncifyStubs[\"xmlUCSIsHangulCompatibilityJamo\"](...args)}_xmlUCSIsHangulCompatibilityJamo.stub=true;asyncifyStubs[\"xmlUCSIsHangulCompatibilityJamo\"]=undefined;function _xmlUCSIsHangulJamo(...args){return asyncifyStubs[\"xmlUCSIsHangulJamo\"](...args)}_xmlUCSIsHangulJamo.stub=true;asyncifyStubs[\"xmlUCSIsHangulJamo\"]=undefined;function _xmlUCSIsHangulSyllables(...args){return asyncifyStubs[\"xmlUCSIsHangulSyllables\"](...args)}_xmlUCSIsHangulSyllables.stub=true;asyncifyStubs[\"xmlUCSIsHangulSyllables\"]=undefined;function _xmlUCSIsHanunoo(...args){return asyncifyStubs[\"xmlUCSIsHanunoo\"](...args)}_xmlUCSIsHanunoo.stub=true;asyncifyStubs[\"xmlUCSIsHanunoo\"]=undefined;function _xmlUCSIsHebrew(...args){return asyncifyStubs[\"xmlUCSIsHebrew\"](...args)}_xmlUCSIsHebrew.stub=true;asyncifyStubs[\"xmlUCSIsHebrew\"]=undefined;function _xmlUCSIsHighPrivateUseSurrogates(...args){return asyncifyStubs[\"xmlUCSIsHighPrivateUseSurrogates\"](...args)}_xmlUCSIsHighPrivateUseSurrogates.stub=true;asyncifyStubs[\"xmlUCSIsHighPrivateUseSurrogates\"]=undefined;function _xmlUCSIsHighSurrogates(...args){return asyncifyStubs[\"xmlUCSIsHighSurrogates\"](...args)}_xmlUCSIsHighSurrogates.stub=true;asyncifyStubs[\"xmlUCSIsHighSurrogates\"]=undefined;function _xmlUCSIsHiragana(...args){return asyncifyStubs[\"xmlUCSIsHiragana\"](...args)}_xmlUCSIsHiragana.stub=true;asyncifyStubs[\"xmlUCSIsHiragana\"]=undefined;function _xmlUCSIsIPAExtensions(...args){return asyncifyStubs[\"xmlUCSIsIPAExtensions\"](...args)}_xmlUCSIsIPAExtensions.stub=true;asyncifyStubs[\"xmlUCSIsIPAExtensions\"]=undefined;function _xmlUCSIsIdeographicDescriptionCharacters(...args){return asyncifyStubs[\"xmlUCSIsIdeographicDescriptionCharacters\"](...args)}_xmlUCSIsIdeographicDescriptionCharacters.stub=true;asyncifyStubs[\"xmlUCSIsIdeographicDescriptionCharacters\"]=undefined;function _xmlUCSIsKanbun(...args){return asyncifyStubs[\"xmlUCSIsKanbun\"](...args)}_xmlUCSIsKanbun.stub=true;asyncifyStubs[\"xmlUCSIsKanbun\"]=undefined;function _xmlUCSIsKangxiRadicals(...args){return asyncifyStubs[\"xmlUCSIsKangxiRadicals\"](...args)}_xmlUCSIsKangxiRadicals.stub=true;asyncifyStubs[\"xmlUCSIsKangxiRadicals\"]=undefined;function _xmlUCSIsKannada(...args){return asyncifyStubs[\"xmlUCSIsKannada\"](...args)}_xmlUCSIsKannada.stub=true;asyncifyStubs[\"xmlUCSIsKannada\"]=undefined;function _xmlUCSIsKatakana(...args){return asyncifyStubs[\"xmlUCSIsKatakana\"](...args)}_xmlUCSIsKatakana.stub=true;asyncifyStubs[\"xmlUCSIsKatakana\"]=undefined;function _xmlUCSIsKatakanaPhoneticExtensions(...args){return asyncifyStubs[\"xmlUCSIsKatakanaPhoneticExtensions\"](...args)}_xmlUCSIsKatakanaPhoneticExtensions.stub=true;asyncifyStubs[\"xmlUCSIsKatakanaPhoneticExtensions\"]=undefined;function _xmlUCSIsKhmer(...args){return asyncifyStubs[\"xmlUCSIsKhmer\"](...args)}_xmlUCSIsKhmer.stub=true;asyncifyStubs[\"xmlUCSIsKhmer\"]=undefined;function _xmlUCSIsKhmerSymbols(...args){return asyncifyStubs[\"xmlUCSIsKhmerSymbols\"](...args)}_xmlUCSIsKhmerSymbols.stub=true;asyncifyStubs[\"xmlUCSIsKhmerSymbols\"]=undefined;function _xmlUCSIsLao(...args){return asyncifyStubs[\"xmlUCSIsLao\"](...args)}_xmlUCSIsLao.stub=true;asyncifyStubs[\"xmlUCSIsLao\"]=undefined;function _xmlUCSIsLatin1Supplement(...args){return asyncifyStubs[\"xmlUCSIsLatin1Supplement\"](...args)}_xmlUCSIsLatin1Supplement.stub=true;asyncifyStubs[\"xmlUCSIsLatin1Supplement\"]=undefined;function _xmlUCSIsLatinExtendedA(...args){return asyncifyStubs[\"xmlUCSIsLatinExtendedA\"](...args)}_xmlUCSIsLatinExtendedA.stub=true;asyncifyStubs[\"xmlUCSIsLatinExtendedA\"]=undefined;function _xmlUCSIsLatinExtendedAdditional(...args){return asyncifyStubs[\"xmlUCSIsLatinExtendedAdditional\"](...args)}_xmlUCSIsLatinExtendedAdditional.stub=true;asyncifyStubs[\"xmlUCSIsLatinExtendedAdditional\"]=undefined;function _xmlUCSIsLatinExtendedB(...args){return asyncifyStubs[\"xmlUCSIsLatinExtendedB\"](...args)}_xmlUCSIsLatinExtendedB.stub=true;asyncifyStubs[\"xmlUCSIsLatinExtendedB\"]=undefined;function _xmlUCSIsLetterlikeSymbols(...args){return asyncifyStubs[\"xmlUCSIsLetterlikeSymbols\"](...args)}_xmlUCSIsLetterlikeSymbols.stub=true;asyncifyStubs[\"xmlUCSIsLetterlikeSymbols\"]=undefined;function _xmlUCSIsLimbu(...args){return asyncifyStubs[\"xmlUCSIsLimbu\"](...args)}_xmlUCSIsLimbu.stub=true;asyncifyStubs[\"xmlUCSIsLimbu\"]=undefined;function _xmlUCSIsLinearBIdeograms(...args){return asyncifyStubs[\"xmlUCSIsLinearBIdeograms\"](...args)}_xmlUCSIsLinearBIdeograms.stub=true;asyncifyStubs[\"xmlUCSIsLinearBIdeograms\"]=undefined;function _xmlUCSIsLinearBSyllabary(...args){return asyncifyStubs[\"xmlUCSIsLinearBSyllabary\"](...args)}_xmlUCSIsLinearBSyllabary.stub=true;asyncifyStubs[\"xmlUCSIsLinearBSyllabary\"]=undefined;function _xmlUCSIsLowSurrogates(...args){return asyncifyStubs[\"xmlUCSIsLowSurrogates\"](...args)}_xmlUCSIsLowSurrogates.stub=true;asyncifyStubs[\"xmlUCSIsLowSurrogates\"]=undefined;function _xmlUCSIsMalayalam(...args){return asyncifyStubs[\"xmlUCSIsMalayalam\"](...args)}_xmlUCSIsMalayalam.stub=true;asyncifyStubs[\"xmlUCSIsMalayalam\"]=undefined;function _xmlUCSIsMathematicalAlphanumericSymbols(...args){return asyncifyStubs[\"xmlUCSIsMathematicalAlphanumericSymbols\"](...args)}_xmlUCSIsMathematicalAlphanumericSymbols.stub=true;asyncifyStubs[\"xmlUCSIsMathematicalAlphanumericSymbols\"]=undefined;function _xmlUCSIsMathematicalOperators(...args){return asyncifyStubs[\"xmlUCSIsMathematicalOperators\"](...args)}_xmlUCSIsMathematicalOperators.stub=true;asyncifyStubs[\"xmlUCSIsMathematicalOperators\"]=undefined;function _xmlUCSIsMiscellaneousMathematicalSymbolsA(...args){return asyncifyStubs[\"xmlUCSIsMiscellaneousMathematicalSymbolsA\"](...args)}_xmlUCSIsMiscellaneousMathematicalSymbolsA.stub=true;asyncifyStubs[\"xmlUCSIsMiscellaneousMathematicalSymbolsA\"]=undefined;function _xmlUCSIsMiscellaneousMathematicalSymbolsB(...args){return asyncifyStubs[\"xmlUCSIsMiscellaneousMathematicalSymbolsB\"](...args)}_xmlUCSIsMiscellaneousMathematicalSymbolsB.stub=true;asyncifyStubs[\"xmlUCSIsMiscellaneousMathematicalSymbolsB\"]=undefined;function _xmlUCSIsMiscellaneousSymbols(...args){return asyncifyStubs[\"xmlUCSIsMiscellaneousSymbols\"](...args)}_xmlUCSIsMiscellaneousSymbols.stub=true;asyncifyStubs[\"xmlUCSIsMiscellaneousSymbols\"]=undefined;function _xmlUCSIsMiscellaneousSymbolsandArrows(...args){return asyncifyStubs[\"xmlUCSIsMiscellaneousSymbolsandArrows\"](...args)}_xmlUCSIsMiscellaneousSymbolsandArrows.stub=true;asyncifyStubs[\"xmlUCSIsMiscellaneousSymbolsandArrows\"]=undefined;function _xmlUCSIsMiscellaneousTechnical(...args){return asyncifyStubs[\"xmlUCSIsMiscellaneousTechnical\"](...args)}_xmlUCSIsMiscellaneousTechnical.stub=true;asyncifyStubs[\"xmlUCSIsMiscellaneousTechnical\"]=undefined;function _xmlUCSIsMongolian(...args){return asyncifyStubs[\"xmlUCSIsMongolian\"](...args)}_xmlUCSIsMongolian.stub=true;asyncifyStubs[\"xmlUCSIsMongolian\"]=undefined;function _xmlUCSIsMusicalSymbols(...args){return asyncifyStubs[\"xmlUCSIsMusicalSymbols\"](...args)}_xmlUCSIsMusicalSymbols.stub=true;asyncifyStubs[\"xmlUCSIsMusicalSymbols\"]=undefined;function _xmlUCSIsMyanmar(...args){return asyncifyStubs[\"xmlUCSIsMyanmar\"](...args)}_xmlUCSIsMyanmar.stub=true;asyncifyStubs[\"xmlUCSIsMyanmar\"]=undefined;function _xmlUCSIsNumberForms(...args){return asyncifyStubs[\"xmlUCSIsNumberForms\"](...args)}_xmlUCSIsNumberForms.stub=true;asyncifyStubs[\"xmlUCSIsNumberForms\"]=undefined;function _xmlUCSIsOgham(...args){return asyncifyStubs[\"xmlUCSIsOgham\"](...args)}_xmlUCSIsOgham.stub=true;asyncifyStubs[\"xmlUCSIsOgham\"]=undefined;function _xmlUCSIsOldItalic(...args){return asyncifyStubs[\"xmlUCSIsOldItalic\"](...args)}_xmlUCSIsOldItalic.stub=true;asyncifyStubs[\"xmlUCSIsOldItalic\"]=undefined;function _xmlUCSIsOpticalCharacterRecognition(...args){return asyncifyStubs[\"xmlUCSIsOpticalCharacterRecognition\"](...args)}_xmlUCSIsOpticalCharacterRecognition.stub=true;asyncifyStubs[\"xmlUCSIsOpticalCharacterRecognition\"]=undefined;function _xmlUCSIsOriya(...args){return asyncifyStubs[\"xmlUCSIsOriya\"](...args)}_xmlUCSIsOriya.stub=true;asyncifyStubs[\"xmlUCSIsOriya\"]=undefined;function _xmlUCSIsOsmanya(...args){return asyncifyStubs[\"xmlUCSIsOsmanya\"](...args)}_xmlUCSIsOsmanya.stub=true;asyncifyStubs[\"xmlUCSIsOsmanya\"]=undefined;function _xmlUCSIsPhoneticExtensions(...args){return asyncifyStubs[\"xmlUCSIsPhoneticExtensions\"](...args)}_xmlUCSIsPhoneticExtensions.stub=true;asyncifyStubs[\"xmlUCSIsPhoneticExtensions\"]=undefined;function _xmlUCSIsPrivateUse(...args){return asyncifyStubs[\"xmlUCSIsPrivateUse\"](...args)}_xmlUCSIsPrivateUse.stub=true;asyncifyStubs[\"xmlUCSIsPrivateUse\"]=undefined;function _xmlUCSIsPrivateUseArea(...args){return asyncifyStubs[\"xmlUCSIsPrivateUseArea\"](...args)}_xmlUCSIsPrivateUseArea.stub=true;asyncifyStubs[\"xmlUCSIsPrivateUseArea\"]=undefined;function _xmlUCSIsRunic(...args){return asyncifyStubs[\"xmlUCSIsRunic\"](...args)}_xmlUCSIsRunic.stub=true;asyncifyStubs[\"xmlUCSIsRunic\"]=undefined;function _xmlUCSIsShavian(...args){return asyncifyStubs[\"xmlUCSIsShavian\"](...args)}_xmlUCSIsShavian.stub=true;asyncifyStubs[\"xmlUCSIsShavian\"]=undefined;function _xmlUCSIsSinhala(...args){return asyncifyStubs[\"xmlUCSIsSinhala\"](...args)}_xmlUCSIsSinhala.stub=true;asyncifyStubs[\"xmlUCSIsSinhala\"]=undefined;function _xmlUCSIsSmallFormVariants(...args){return asyncifyStubs[\"xmlUCSIsSmallFormVariants\"](...args)}_xmlUCSIsSmallFormVariants.stub=true;asyncifyStubs[\"xmlUCSIsSmallFormVariants\"]=undefined;function _xmlUCSIsSpacingModifierLetters(...args){return asyncifyStubs[\"xmlUCSIsSpacingModifierLetters\"](...args)}_xmlUCSIsSpacingModifierLetters.stub=true;asyncifyStubs[\"xmlUCSIsSpacingModifierLetters\"]=undefined;function _xmlUCSIsSpecials(...args){return asyncifyStubs[\"xmlUCSIsSpecials\"](...args)}_xmlUCSIsSpecials.stub=true;asyncifyStubs[\"xmlUCSIsSpecials\"]=undefined;function _xmlUCSIsSuperscriptsandSubscripts(...args){return asyncifyStubs[\"xmlUCSIsSuperscriptsandSubscripts\"](...args)}_xmlUCSIsSuperscriptsandSubscripts.stub=true;asyncifyStubs[\"xmlUCSIsSuperscriptsandSubscripts\"]=undefined;function _xmlUCSIsSupplementalArrowsA(...args){return asyncifyStubs[\"xmlUCSIsSupplementalArrowsA\"](...args)}_xmlUCSIsSupplementalArrowsA.stub=true;asyncifyStubs[\"xmlUCSIsSupplementalArrowsA\"]=undefined;function _xmlUCSIsSupplementalArrowsB(...args){return asyncifyStubs[\"xmlUCSIsSupplementalArrowsB\"](...args)}_xmlUCSIsSupplementalArrowsB.stub=true;asyncifyStubs[\"xmlUCSIsSupplementalArrowsB\"]=undefined;function _xmlUCSIsSupplementalMathematicalOperators(...args){return asyncifyStubs[\"xmlUCSIsSupplementalMathematicalOperators\"](...args)}_xmlUCSIsSupplementalMathematicalOperators.stub=true;asyncifyStubs[\"xmlUCSIsSupplementalMathematicalOperators\"]=undefined;function _xmlUCSIsSupplementaryPrivateUseAreaA(...args){return asyncifyStubs[\"xmlUCSIsSupplementaryPrivateUseAreaA\"](...args)}_xmlUCSIsSupplementaryPrivateUseAreaA.stub=true;asyncifyStubs[\"xmlUCSIsSupplementaryPrivateUseAreaA\"]=undefined;function _xmlUCSIsSupplementaryPrivateUseAreaB(...args){return asyncifyStubs[\"xmlUCSIsSupplementaryPrivateUseAreaB\"](...args)}_xmlUCSIsSupplementaryPrivateUseAreaB.stub=true;asyncifyStubs[\"xmlUCSIsSupplementaryPrivateUseAreaB\"]=undefined;function _xmlUCSIsSyriac(...args){return asyncifyStubs[\"xmlUCSIsSyriac\"](...args)}_xmlUCSIsSyriac.stub=true;asyncifyStubs[\"xmlUCSIsSyriac\"]=undefined;function _xmlUCSIsTagalog(...args){return asyncifyStubs[\"xmlUCSIsTagalog\"](...args)}_xmlUCSIsTagalog.stub=true;asyncifyStubs[\"xmlUCSIsTagalog\"]=undefined;function _xmlUCSIsTagbanwa(...args){return asyncifyStubs[\"xmlUCSIsTagbanwa\"](...args)}_xmlUCSIsTagbanwa.stub=true;asyncifyStubs[\"xmlUCSIsTagbanwa\"]=undefined;function _xmlUCSIsTags(...args){return asyncifyStubs[\"xmlUCSIsTags\"](...args)}_xmlUCSIsTags.stub=true;asyncifyStubs[\"xmlUCSIsTags\"]=undefined;function _xmlUCSIsTaiLe(...args){return asyncifyStubs[\"xmlUCSIsTaiLe\"](...args)}_xmlUCSIsTaiLe.stub=true;asyncifyStubs[\"xmlUCSIsTaiLe\"]=undefined;function _xmlUCSIsTaiXuanJingSymbols(...args){return asyncifyStubs[\"xmlUCSIsTaiXuanJingSymbols\"](...args)}_xmlUCSIsTaiXuanJingSymbols.stub=true;asyncifyStubs[\"xmlUCSIsTaiXuanJingSymbols\"]=undefined;function _xmlUCSIsTamil(...args){return asyncifyStubs[\"xmlUCSIsTamil\"](...args)}_xmlUCSIsTamil.stub=true;asyncifyStubs[\"xmlUCSIsTamil\"]=undefined;function _xmlUCSIsTelugu(...args){return asyncifyStubs[\"xmlUCSIsTelugu\"](...args)}_xmlUCSIsTelugu.stub=true;asyncifyStubs[\"xmlUCSIsTelugu\"]=undefined;function _xmlUCSIsThaana(...args){return asyncifyStubs[\"xmlUCSIsThaana\"](...args)}_xmlUCSIsThaana.stub=true;asyncifyStubs[\"xmlUCSIsThaana\"]=undefined;function _xmlUCSIsThai(...args){return asyncifyStubs[\"xmlUCSIsThai\"](...args)}_xmlUCSIsThai.stub=true;asyncifyStubs[\"xmlUCSIsThai\"]=undefined;function _xmlUCSIsTibetan(...args){return asyncifyStubs[\"xmlUCSIsTibetan\"](...args)}_xmlUCSIsTibetan.stub=true;asyncifyStubs[\"xmlUCSIsTibetan\"]=undefined;function _xmlUCSIsUgaritic(...args){return asyncifyStubs[\"xmlUCSIsUgaritic\"](...args)}_xmlUCSIsUgaritic.stub=true;asyncifyStubs[\"xmlUCSIsUgaritic\"]=undefined;function _xmlUCSIsUnifiedCanadianAboriginalSyllabics(...args){return asyncifyStubs[\"xmlUCSIsUnifiedCanadianAboriginalSyllabics\"](...args)}_xmlUCSIsUnifiedCanadianAboriginalSyllabics.stub=true;asyncifyStubs[\"xmlUCSIsUnifiedCanadianAboriginalSyllabics\"]=undefined;function _xmlUCSIsVariationSelectors(...args){return asyncifyStubs[\"xmlUCSIsVariationSelectors\"](...args)}_xmlUCSIsVariationSelectors.stub=true;asyncifyStubs[\"xmlUCSIsVariationSelectors\"]=undefined;function _xmlUCSIsVariationSelectorsSupplement(...args){return asyncifyStubs[\"xmlUCSIsVariationSelectorsSupplement\"](...args)}_xmlUCSIsVariationSelectorsSupplement.stub=true;asyncifyStubs[\"xmlUCSIsVariationSelectorsSupplement\"]=undefined;function _xmlUCSIsYiRadicals(...args){return asyncifyStubs[\"xmlUCSIsYiRadicals\"](...args)}_xmlUCSIsYiRadicals.stub=true;asyncifyStubs[\"xmlUCSIsYiRadicals\"]=undefined;function _xmlUCSIsYiSyllables(...args){return asyncifyStubs[\"xmlUCSIsYiSyllables\"](...args)}_xmlUCSIsYiSyllables.stub=true;asyncifyStubs[\"xmlUCSIsYiSyllables\"]=undefined;function _xmlUCSIsYijingHexagramSymbols(...args){return asyncifyStubs[\"xmlUCSIsYijingHexagramSymbols\"](...args)}_xmlUCSIsYijingHexagramSymbols.stub=true;asyncifyStubs[\"xmlUCSIsYijingHexagramSymbols\"]=undefined;function _xmlURIUnescapeString(...args){return asyncifyStubs[\"xmlURIUnescapeString\"](...args)}_xmlURIUnescapeString.stub=true;asyncifyStubs[\"xmlURIUnescapeString\"]=undefined;function _xmlUnlinkNode(...args){return asyncifyStubs[\"xmlUnlinkNode\"](...args)}_xmlUnlinkNode.stub=true;asyncifyStubs[\"xmlUnlinkNode\"]=undefined;function _xmlXPathBooleanFunction(...args){return asyncifyStubs[\"xmlXPathBooleanFunction\"](...args)}_xmlXPathBooleanFunction.stub=true;asyncifyStubs[\"xmlXPathBooleanFunction\"]=undefined;function _xmlXPathCeilingFunction(...args){return asyncifyStubs[\"xmlXPathCeilingFunction\"](...args)}_xmlXPathCeilingFunction.stub=true;asyncifyStubs[\"xmlXPathCeilingFunction\"]=undefined;function _xmlXPathConcatFunction(...args){return asyncifyStubs[\"xmlXPathConcatFunction\"](...args)}_xmlXPathConcatFunction.stub=true;asyncifyStubs[\"xmlXPathConcatFunction\"]=undefined;function _xmlXPathContainsFunction(...args){return asyncifyStubs[\"xmlXPathContainsFunction\"](...args)}_xmlXPathContainsFunction.stub=true;asyncifyStubs[\"xmlXPathContainsFunction\"]=undefined;function _xmlXPathCountFunction(...args){return asyncifyStubs[\"xmlXPathCountFunction\"](...args)}_xmlXPathCountFunction.stub=true;asyncifyStubs[\"xmlXPathCountFunction\"]=undefined;function _xmlXPathFalseFunction(...args){return asyncifyStubs[\"xmlXPathFalseFunction\"](...args)}_xmlXPathFalseFunction.stub=true;asyncifyStubs[\"xmlXPathFalseFunction\"]=undefined;function _xmlXPathFloorFunction(...args){return asyncifyStubs[\"xmlXPathFloorFunction\"](...args)}_xmlXPathFloorFunction.stub=true;asyncifyStubs[\"xmlXPathFloorFunction\"]=undefined;function _xmlXPathIdFunction(...args){return asyncifyStubs[\"xmlXPathIdFunction\"](...args)}_xmlXPathIdFunction.stub=true;asyncifyStubs[\"xmlXPathIdFunction\"]=undefined;function _xmlXPathLangFunction(...args){return asyncifyStubs[\"xmlXPathLangFunction\"](...args)}_xmlXPathLangFunction.stub=true;asyncifyStubs[\"xmlXPathLangFunction\"]=undefined;function _xmlXPathLastFunction(...args){return asyncifyStubs[\"xmlXPathLastFunction\"](...args)}_xmlXPathLastFunction.stub=true;asyncifyStubs[\"xmlXPathLastFunction\"]=undefined;function _xmlXPathLocalNameFunction(...args){return asyncifyStubs[\"xmlXPathLocalNameFunction\"](...args)}_xmlXPathLocalNameFunction.stub=true;asyncifyStubs[\"xmlXPathLocalNameFunction\"]=undefined;function _xmlXPathNAN(...args){return asyncifyStubs[\"xmlXPathNAN\"](...args)}_xmlXPathNAN.stub=true;asyncifyStubs[\"xmlXPathNAN\"]=undefined;function _xmlXPathNINF(...args){return asyncifyStubs[\"xmlXPathNINF\"](...args)}_xmlXPathNINF.stub=true;asyncifyStubs[\"xmlXPathNINF\"]=undefined;function _xmlXPathNamespaceURIFunction(...args){return asyncifyStubs[\"xmlXPathNamespaceURIFunction\"](...args)}_xmlXPathNamespaceURIFunction.stub=true;asyncifyStubs[\"xmlXPathNamespaceURIFunction\"]=undefined;function _xmlXPathNextAncestor(...args){return asyncifyStubs[\"xmlXPathNextAncestor\"](...args)}_xmlXPathNextAncestor.stub=true;asyncifyStubs[\"xmlXPathNextAncestor\"]=undefined;function _xmlXPathNextAncestorOrSelf(...args){return asyncifyStubs[\"xmlXPathNextAncestorOrSelf\"](...args)}_xmlXPathNextAncestorOrSelf.stub=true;asyncifyStubs[\"xmlXPathNextAncestorOrSelf\"]=undefined;function _xmlXPathNextAttribute(...args){return asyncifyStubs[\"xmlXPathNextAttribute\"](...args)}_xmlXPathNextAttribute.stub=true;asyncifyStubs[\"xmlXPathNextAttribute\"]=undefined;function _xmlXPathNextChild(...args){return asyncifyStubs[\"xmlXPathNextChild\"](...args)}_xmlXPathNextChild.stub=true;asyncifyStubs[\"xmlXPathNextChild\"]=undefined;function _xmlXPathNextDescendant(...args){return asyncifyStubs[\"xmlXPathNextDescendant\"](...args)}_xmlXPathNextDescendant.stub=true;asyncifyStubs[\"xmlXPathNextDescendant\"]=undefined;function _xmlXPathNextDescendantOrSelf(...args){return asyncifyStubs[\"xmlXPathNextDescendantOrSelf\"](...args)}_xmlXPathNextDescendantOrSelf.stub=true;asyncifyStubs[\"xmlXPathNextDescendantOrSelf\"]=undefined;function _xmlXPathNextFollowing(...args){return asyncifyStubs[\"xmlXPathNextFollowing\"](...args)}_xmlXPathNextFollowing.stub=true;asyncifyStubs[\"xmlXPathNextFollowing\"]=undefined;function _xmlXPathNextFollowingSibling(...args){return asyncifyStubs[\"xmlXPathNextFollowingSibling\"](...args)}_xmlXPathNextFollowingSibling.stub=true;asyncifyStubs[\"xmlXPathNextFollowingSibling\"]=undefined;function _xmlXPathNextNamespace(...args){return asyncifyStubs[\"xmlXPathNextNamespace\"](...args)}_xmlXPathNextNamespace.stub=true;asyncifyStubs[\"xmlXPathNextNamespace\"]=undefined;function _xmlXPathNextParent(...args){return asyncifyStubs[\"xmlXPathNextParent\"](...args)}_xmlXPathNextParent.stub=true;asyncifyStubs[\"xmlXPathNextParent\"]=undefined;function _xmlXPathNextPrecedingSibling(...args){return asyncifyStubs[\"xmlXPathNextPrecedingSibling\"](...args)}_xmlXPathNextPrecedingSibling.stub=true;asyncifyStubs[\"xmlXPathNextPrecedingSibling\"]=undefined;function _xmlXPathNextSelf(...args){return asyncifyStubs[\"xmlXPathNextSelf\"](...args)}_xmlXPathNextSelf.stub=true;asyncifyStubs[\"xmlXPathNextSelf\"]=undefined;function _xmlXPathNormalizeFunction(...args){return asyncifyStubs[\"xmlXPathNormalizeFunction\"](...args)}_xmlXPathNormalizeFunction.stub=true;asyncifyStubs[\"xmlXPathNormalizeFunction\"]=undefined;function _xmlXPathNotFunction(...args){return asyncifyStubs[\"xmlXPathNotFunction\"](...args)}_xmlXPathNotFunction.stub=true;asyncifyStubs[\"xmlXPathNotFunction\"]=undefined;function _xmlXPathNumberFunction(...args){return asyncifyStubs[\"xmlXPathNumberFunction\"](...args)}_xmlXPathNumberFunction.stub=true;asyncifyStubs[\"xmlXPathNumberFunction\"]=undefined;function _xmlXPathPINF(...args){return asyncifyStubs[\"xmlXPathPINF\"](...args)}_xmlXPathPINF.stub=true;asyncifyStubs[\"xmlXPathPINF\"]=undefined;function _xmlXPathPositionFunction(...args){return asyncifyStubs[\"xmlXPathPositionFunction\"](...args)}_xmlXPathPositionFunction.stub=true;asyncifyStubs[\"xmlXPathPositionFunction\"]=undefined;function _xmlXPathRoundFunction(...args){return asyncifyStubs[\"xmlXPathRoundFunction\"](...args)}_xmlXPathRoundFunction.stub=true;asyncifyStubs[\"xmlXPathRoundFunction\"]=undefined;function _xmlXPathStartsWithFunction(...args){return asyncifyStubs[\"xmlXPathStartsWithFunction\"](...args)}_xmlXPathStartsWithFunction.stub=true;asyncifyStubs[\"xmlXPathStartsWithFunction\"]=undefined;function _xmlXPathStringFunction(...args){return asyncifyStubs[\"xmlXPathStringFunction\"](...args)}_xmlXPathStringFunction.stub=true;asyncifyStubs[\"xmlXPathStringFunction\"]=undefined;function _xmlXPathStringLengthFunction(...args){return asyncifyStubs[\"xmlXPathStringLengthFunction\"](...args)}_xmlXPathStringLengthFunction.stub=true;asyncifyStubs[\"xmlXPathStringLengthFunction\"]=undefined;function _xmlXPathSubstringAfterFunction(...args){return asyncifyStubs[\"xmlXPathSubstringAfterFunction\"](...args)}_xmlXPathSubstringAfterFunction.stub=true;asyncifyStubs[\"xmlXPathSubstringAfterFunction\"]=undefined;function _xmlXPathSubstringBeforeFunction(...args){return asyncifyStubs[\"xmlXPathSubstringBeforeFunction\"](...args)}_xmlXPathSubstringBeforeFunction.stub=true;asyncifyStubs[\"xmlXPathSubstringBeforeFunction\"]=undefined;function _xmlXPathSubstringFunction(...args){return asyncifyStubs[\"xmlXPathSubstringFunction\"](...args)}_xmlXPathSubstringFunction.stub=true;asyncifyStubs[\"xmlXPathSubstringFunction\"]=undefined;function _xmlXPathSumFunction(...args){return asyncifyStubs[\"xmlXPathSumFunction\"](...args)}_xmlXPathSumFunction.stub=true;asyncifyStubs[\"xmlXPathSumFunction\"]=undefined;function _xmlXPathTranslateFunction(...args){return asyncifyStubs[\"xmlXPathTranslateFunction\"](...args)}_xmlXPathTranslateFunction.stub=true;asyncifyStubs[\"xmlXPathTranslateFunction\"]=undefined;function _xmlXPathTrueFunction(...args){return asyncifyStubs[\"xmlXPathTrueFunction\"](...args)}_xmlXPathTrueFunction.stub=true;asyncifyStubs[\"xmlXPathTrueFunction\"]=undefined;var runAndAbortIfError=func=>{try{return func()}catch(e){abort(e)}};var Asyncify={instrumentWasmImports(imports){var importPattern=/^(invoke_.*|__asyncjs__.*)$/;for(let[x,original]of Object.entries(imports)){if(typeof original==\"function\"){let isAsyncifyImport=original.isAsync||importPattern.test(x)}}},instrumentWasmExports(exports){var ret={};for(let[x,original]of Object.entries(exports)){if(typeof original==\"function\"){ret[x]=(...args)=>{Asyncify.exportCallStack.push(x);try{return original(...args)}finally{if(!ABORT){var y=Asyncify.exportCallStack.pop();Asyncify.maybeStopUnwind()}}};ret[x].orig=original}else{ret[x]=original}}return ret},State:{Normal:0,Unwinding:1,Rewinding:2,Disabled:3},state:0,StackSize:4096,currData:null,handleSleepReturnValue:0,exportCallStack:[],callStackNameToId:{},callStackIdToName:{},callStackId:0,asyncPromiseHandlers:null,sleepCallbacks:[],getCallStackId(funcName){var id=Asyncify.callStackNameToId[funcName];if(id===undefined){id=Asyncify.callStackId++;Asyncify.callStackNameToId[funcName]=id;Asyncify.callStackIdToName[id]=funcName}return id},maybeStopUnwind(){if(Asyncify.currData&&Asyncify.state===Asyncify.State.Unwinding&&Asyncify.exportCallStack.length===0){Asyncify.state=Asyncify.State.Normal;runtimeKeepalivePush();runAndAbortIfError(_asyncify_stop_unwind);if(typeof Fibers!=\"undefined\"){Fibers.trampoline()}}},whenDone(){return new Promise((resolve,reject)=>{Asyncify.asyncPromiseHandlers={resolve,reject}})},allocateData(){var ptr=_malloc(12+Asyncify.StackSize);Asyncify.setDataHeader(ptr,ptr+12,Asyncify.StackSize);Asyncify.setDataRewindFunc(ptr);return ptr},setDataHeader(ptr,stack,stackSize){HEAPU32[ptr>>>2>>>0]=stack;HEAPU32[ptr+4>>>2>>>0]=stack+stackSize},setDataRewindFunc(ptr){var bottomOfCallStack=Asyncify.exportCallStack[0];var rewindId=Asyncify.getCallStackId(bottomOfCallStack);HEAP32[ptr+8>>>2>>>0]=rewindId},getDataRewindFuncName(ptr){var id=HEAP32[ptr+8>>>2>>>0];var name=Asyncify.callStackIdToName[id];return name},getDataRewindFunc__deps:[\"$resolveGlobalSymbol\"],getDataRewindFunc(name){var func=wasmExports[name];if(!func){func=resolveGlobalSymbol(name,false).sym}return func},doRewind(ptr){var name=Asyncify.getDataRewindFuncName(ptr);var func=Asyncify.getDataRewindFunc(name);runtimeKeepalivePop();return func()},handleSleep(startAsync){if(ABORT)return;if(Asyncify.state===Asyncify.State.Normal){var reachedCallback=false;var reachedAfterCallback=false;startAsync((handleSleepReturnValue=0)=>{if(ABORT)return;Asyncify.handleSleepReturnValue=handleSleepReturnValue;reachedCallback=true;if(!reachedAfterCallback){return}Asyncify.state=Asyncify.State.Rewinding;runAndAbortIfError(()=>_asyncify_start_rewind(Asyncify.currData));if(typeof Browser!=\"undefined\"&&Browser.mainLoop.func){Browser.mainLoop.resume()}var asyncWasmReturnValue,isError=false;try{asyncWasmReturnValue=Asyncify.doRewind(Asyncify.currData)}catch(err){asyncWasmReturnValue=err;isError=true}var handled=false;if(!Asyncify.currData){var asyncPromiseHandlers=Asyncify.asyncPromiseHandlers;if(asyncPromiseHandlers){Asyncify.asyncPromiseHandlers=null;(isError?asyncPromiseHandlers.reject:asyncPromiseHandlers.resolve)(asyncWasmReturnValue);handled=true}}if(isError&&!handled){throw asyncWasmReturnValue}});reachedAfterCallback=true;if(!reachedCallback){Asyncify.state=Asyncify.State.Unwinding;Asyncify.currData=Asyncify.allocateData();if(typeof Browser!=\"undefined\"&&Browser.mainLoop.func){Browser.mainLoop.pause()}runAndAbortIfError(()=>_asyncify_start_unwind(Asyncify.currData))}}else if(Asyncify.state===Asyncify.State.Rewinding){Asyncify.state=Asyncify.State.Normal;runAndAbortIfError(_asyncify_stop_rewind);_free(Asyncify.currData);Asyncify.currData=null;Asyncify.sleepCallbacks.forEach(callUserCallback)}else{abort(`invalid state: ${Asyncify.state}`)}return Asyncify.handleSleepReturnValue},handleAsync(startAsync){return Asyncify.handleSleep(wakeUp=>{startAsync().then(wakeUp)})}};var getCFunc=ident=>{var func=Module[\"_\"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer>>>0)};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\"){return UTF8ToString(ret)}if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;iFS.unlink(path);var FS_createLazyFile=FS.createLazyFile;var FS_createDevice=FS.createDevice;var writeI53ToI64=(ptr,num)=>{HEAPU32[ptr>>>2>>>0]=num;var lower=HEAPU32[ptr>>>2>>>0];HEAPU32[ptr+4>>>2>>>0]=(num-lower)/4294967296};var writeI53ToI64Clamped=(ptr,num)=>{if(num>0x8000000000000000){HEAPU32[ptr>>>2>>>0]=4294967295;HEAPU32[ptr+4>>>2>>>0]=2147483647}else if(num<-0x8000000000000000){HEAPU32[ptr>>>2>>>0]=0;HEAPU32[ptr+4>>>2>>>0]=2147483648}else{writeI53ToI64(ptr,num)}};var writeI53ToI64Signaling=(ptr,num)=>{if(num>0x8000000000000000||num<-0x8000000000000000){throw`RangeError: ${num}`}writeI53ToI64(ptr,num)};var writeI53ToU64Clamped=(ptr,num)=>{if(num>0x10000000000000000){HEAPU32[ptr>>>2>>>0]=4294967295;HEAPU32[ptr+4>>>2>>>0]=4294967295}else if(num<0){HEAPU32[ptr>>>2>>>0]=0;HEAPU32[ptr+4>>>2>>>0]=0}else{writeI53ToI64(ptr,num)}};var writeI53ToU64Signaling=(ptr,num)=>{if(num<0||num>0x10000000000000000){throw`RangeError: ${num}`}writeI53ToI64(ptr,num)};var readI53FromU64=ptr=>HEAPU32[ptr>>>2>>>0]+HEAPU32[ptr+4>>>2>>>0]*4294967296;var convertI32PairToI53=(lo,hi)=>(lo>>>0)+hi*4294967296;var convertU32PairToI53=(lo,hi)=>(lo>>>0)+(hi>>>0)*4294967296;var getTempRet0=val=>__emscripten_tempret_get();var _stackAlloc=stackAlloc;var _stackSave=stackSave;var _stackRestore=stackSave;var ptrToString=ptr=>\"0x\"+ptr.toString(16).padStart(8,\"0\");function _emscripten_notify_memory_growth(memoryIndex){memoryIndex>>>=0;updateMemoryViews()}_emscripten_notify_memory_growth.sig=\"vp\";var withStackSave=f=>{var stack=stackSave();var ret=f();stackRestore(stack);return ret};var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var strError=errno=>UTF8ToString(_strerror(errno));var _endprotoent=()=>{};_endprotoent.sig=\"v\";function _getprotoent(number){if(_setprotoent.index===Protocols.list.length){return 0}var result=Protocols.list[_setprotoent.index++];return result}_getprotoent.sig=\"p\";function _emscripten_run_script(ptr){ptr>>>=0;eval(UTF8ToString(ptr))}_emscripten_run_script.sig=\"vp\";function _emscripten_run_script_int(ptr){ptr>>>=0;return eval(UTF8ToString(ptr))|0}_emscripten_run_script_int.sig=\"ip\";function _emscripten_run_script_string(ptr){ptr>>>=0;var s=eval(UTF8ToString(ptr));if(s==null){return 0}s+=\"\";var me=_emscripten_run_script_string;var len=lengthBytesUTF8(s);if(!me.bufferSize||me.bufferSizeMath.random();_emscripten_random.sig=\"f\";var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}};function jsStackTrace(){return(new Error).stack.toString()}function getCallstack(flags){var callstack=jsStackTrace();var iThisFunc=callstack.lastIndexOf(\"_emscripten_log\");var iThisFunc2=callstack.lastIndexOf(\"_emscripten_get_callstack\");var iNextLine=callstack.indexOf(\"\\n\",Math.max(iThisFunc,iThisFunc2))+1;callstack=callstack.slice(iNextLine);if(flags&8&&typeof emscripten_source_map==\"undefined\"){warnOnce('Source map information is not available, emscripten_log with EM_LOG_C_STACK will be ignored. Build with \"--pre-js $EMSCRIPTEN/src/emscripten-source-map.min.js\" linker flag to add source map loading to code.');flags^=8;flags|=16}var lines=callstack.split(\"\\n\");callstack=\"\";var newFirefoxRe=new RegExp(\"\\\\s*(.*?)@(.*?):([0-9]+):([0-9]+)\");var firefoxRe=new RegExp(\"\\\\s*(.*?)@(.*):(.*)(:(.*))?\");var chromeRe=new RegExp(\"\\\\s*at (.*?) \\\\((.*):(.*):(.*)\\\\)\");for(var l in lines){var line=lines[l];var symbolName=\"\";var file=\"\";var lineno=0;var column=0;var parts=chromeRe.exec(line);if(parts&&parts.length==5){symbolName=parts[1];file=parts[2];lineno=parts[3];column=parts[4]}else{parts=newFirefoxRe.exec(line)||firefoxRe.exec(line);if(parts&&parts.length>=4){symbolName=parts[1];file=parts[2];lineno=parts[3];column=parts[4]|0}else{callstack+=line+\"\\n\";continue}}var haveSourceMap=false;if(flags&8){var orig=emscripten_source_map.originalPositionFor({line:lineno,column});haveSourceMap=orig?.source;if(haveSourceMap){if(flags&64){orig.source=orig.source.substring(orig.source.replace(/\\\\/g,\"/\").lastIndexOf(\"/\")+1)}callstack+=` at ${symbolName} (${orig.source}:${orig.line}:${orig.column})\\n`}}if(flags&16||!haveSourceMap){if(flags&64){file=file.substring(file.replace(/\\\\/g,\"/\").lastIndexOf(\"/\")+1)}callstack+=(haveSourceMap?` = ${symbolName}`:` at ${symbolName}`)+` (${file}:${lineno}:${column})\\n`}}callstack=callstack.replace(/\\s+$/,\"\");return callstack}var emscriptenLog=(flags,str)=>{if(flags&24){str=str.replace(/\\s+$/,\"\");str+=(str.length>0?\"\\n\":\"\")+getCallstack(flags)}if(flags&1){if(flags&4){console.error(str)}else if(flags&2){console.warn(str)}else if(flags&512){console.info(str)}else if(flags&256){console.debug(str)}else{console.log(str)}}else if(flags&6){err(str)}else{out(str)}};var reallyNegative=x=>x<0||x===0&&1/x===-Infinity;var reSign=(value,bits)=>{if(value<=0){return value}var half=bits<=32?Math.abs(1<=half&&(bits<=32||value>half)){value=-2*half+value}return value};var unSign=(value,bits)=>{if(value>=0){return value}return bits<=32?2*Math.abs(1<{var end=ptr;while(HEAPU8[end>>>0])++end;return end-ptr};var formatString=(format,varargs)=>{var textIndex=format;var argIndex=varargs;function prepVararg(ptr,type){if(type===\"double\"||type===\"i64\"){if(ptr&7){ptr+=4}}else{}return ptr}function getNextArg(type){var ret;argIndex=prepVararg(argIndex,type);if(type===\"double\"){ret=HEAPF64[argIndex>>>3>>>0];argIndex+=8}else if(type==\"i64\"){ret=[HEAP32[argIndex>>>2>>>0],HEAP32[argIndex+4>>>2>>>0]];argIndex+=8}else{type=\"i32\";ret=HEAP32[argIndex>>>2>>>0];argIndex+=4}return ret}var ret=[];var curr,next,currArg;while(1){var startTextIndex=textIndex;curr=HEAP8[textIndex>>>0];if(curr===0)break;next=HEAP8[textIndex+1>>>0];if(curr==37){var flagAlwaysSigned=false;var flagLeftAlign=false;var flagAlternative=false;var flagZeroPad=false;var flagPadSign=false;flagsLoop:while(1){switch(next){case 43:flagAlwaysSigned=true;break;case 45:flagLeftAlign=true;break;case 35:flagAlternative=true;break;case 48:if(flagZeroPad){break flagsLoop}else{flagZeroPad=true;break}case 32:flagPadSign=true;break;default:break flagsLoop}textIndex++;next=HEAP8[textIndex+1>>>0]}var width=0;if(next==42){width=getNextArg(\"i32\");textIndex++;next=HEAP8[textIndex+1>>>0]}else{while(next>=48&&next<=57){width=width*10+(next-48);textIndex++;next=HEAP8[textIndex+1>>>0]}}var precisionSet=false,precision=-1;if(next==46){precision=0;precisionSet=true;textIndex++;next=HEAP8[textIndex+1>>>0];if(next==42){precision=getNextArg(\"i32\");textIndex++}else{while(1){var precisionChr=HEAP8[textIndex+1>>>0];if(precisionChr<48||precisionChr>57)break;precision=precision*10+(precisionChr-48);textIndex++}}next=HEAP8[textIndex+1>>>0]}if(precision<0){precision=6;precisionSet=false}var argSize;switch(String.fromCharCode(next)){case\"h\":var nextNext=HEAP8[textIndex+2>>>0];if(nextNext==104){textIndex++;argSize=1}else{argSize=2}break;case\"l\":var nextNext=HEAP8[textIndex+2>>>0];if(nextNext==108){textIndex++;argSize=8}else{argSize=4}break;case\"L\":case\"q\":case\"j\":argSize=8;break;case\"z\":case\"t\":case\"I\":argSize=4;break;default:argSize=null}if(argSize)textIndex++;next=HEAP8[textIndex+1>>>0];switch(String.fromCharCode(next)){case\"d\":case\"i\":case\"u\":case\"o\":case\"x\":case\"X\":case\"p\":{var signed=next==100||next==105;argSize=argSize||4;currArg=getNextArg(\"i\"+argSize*8);var argText;if(argSize==8){currArg=next==117?convertU32PairToI53(currArg[0],currArg[1]):convertI32PairToI53(currArg[0],currArg[1])}if(argSize<=4){var limit=Math.pow(256,argSize)-1;currArg=(signed?reSign:unSign)(currArg&limit,argSize*8)}var currAbsArg=Math.abs(currArg);var prefix=\"\";if(next==100||next==105){argText=reSign(currArg,8*argSize).toString(10)}else if(next==117){argText=unSign(currArg,8*argSize).toString(10);currArg=Math.abs(currArg)}else if(next==111){argText=(flagAlternative?\"0\":\"\")+currAbsArg.toString(8)}else if(next==120||next==88){prefix=flagAlternative&&currArg!=0?\"0x\":\"\";if(currArg<0){currArg=-currArg;argText=(currAbsArg-1).toString(16);var buffer=[];for(var i=0;i=0){if(flagAlwaysSigned){prefix=\"+\"+prefix}else if(flagPadSign){prefix=\" \"+prefix}}if(argText.charAt(0)==\"-\"){prefix=\"-\"+prefix;argText=argText.substr(1)}while(prefix.length+argText.lengthret.push(chr.charCodeAt(0)));break}case\"f\":case\"F\":case\"e\":case\"E\":case\"g\":case\"G\":{currArg=getNextArg(\"double\");var argText;if(isNaN(currArg)){argText=\"nan\";flagZeroPad=false}else if(!isFinite(currArg)){argText=(currArg<0?\"-\":\"\")+\"inf\";flagZeroPad=false}else{var isGeneral=false;var effectivePrecision=Math.min(precision,20);if(next==103||next==71){isGeneral=true;precision=precision||1;var exponent=parseInt(currArg.toExponential(effectivePrecision).split(\"e\")[1],10);if(precision>exponent&&exponent>=-4){next=(next==103?\"f\":\"F\").charCodeAt(0);precision-=exponent+1}else{next=(next==103?\"e\":\"E\").charCodeAt(0);precision--}effectivePrecision=Math.min(precision,20)}if(next==101||next==69){argText=currArg.toExponential(effectivePrecision);if(/[eE][-+]\\d$/.test(argText)){argText=argText.slice(0,-1)+\"0\"+argText.slice(-1)}}else if(next==102||next==70){argText=currArg.toFixed(effectivePrecision);if(currArg===0&&reallyNegative(currArg)){argText=\"-\"+argText}}var parts=argText.split(\"e\");if(isGeneral&&!flagAlternative){while(parts[0].length>1&&parts[0].includes(\".\")&&(parts[0].slice(-1)==\"0\"||parts[0].slice(-1)==\".\")){parts[0]=parts[0].slice(0,-1)}}else{if(flagAlternative&&argText.indexOf(\".\")==-1)parts[0]+=\".\";while(precision>effectivePrecision++)parts[0]+=\"0\"}argText=parts[0]+(parts.length>1?\"e\"+parts[1]:\"\");if(next==69)argText=argText.toUpperCase();if(currArg>=0){if(flagAlwaysSigned){argText=\"+\"+argText}else if(flagPadSign){argText=\" \"+argText}}}while(argText.lengthret.push(chr.charCodeAt(0)));break}case\"s\":{var arg=getNextArg(\"i8*\");var argLength=arg?strLen(arg):\"(null)\".length;if(precisionSet)argLength=Math.min(argLength,precision);if(!flagLeftAlign){while(argLength>>0])}}else{ret=ret.concat(intArrayFromString(\"(null)\".substr(0,argLength),true))}if(flagLeftAlign){while(argLength0){ret.push(32)}if(!flagLeftAlign)ret.push(getNextArg(\"i8\"));break}case\"n\":{var ptr=getNextArg(\"i32*\");HEAP32[ptr>>>2>>>0]=ret.length;break}case\"%\":{ret.push(curr);break}default:{for(var i=startTextIndex;i>>0])}}}textIndex+=2}else{ret.push(curr);textIndex+=1}}return ret};function _emscripten_log(flags,format,varargs){format>>>=0;varargs>>>=0;var result=formatString(format,varargs);var str=UTF8ArrayToString(result,0);emscriptenLog(flags,str)}_emscripten_log.sig=\"vipp\";function _emscripten_get_compiler_setting(name){name>>>=0;throw\"You must build with -sRETAIN_COMPILER_SETTINGS for getCompilerSetting or emscripten_get_compiler_setting to work\"}_emscripten_get_compiler_setting.sig=\"pp\";var _emscripten_has_asyncify=()=>1;_emscripten_has_asyncify.sig=\"i\";function _emscripten_debugger(){debugger}_emscripten_debugger.sig=\"v\";function _emscripten_print_double(x,to,max){to>>>=0;var str=x+\"\";if(to)return stringToUTF8(str,to,max);else return lengthBytesUTF8(str)}_emscripten_print_double.sig=\"idpi\";function _emscripten_asm_const_double(code,sigPtr,argbuf){code>>>=0;sigPtr>>>=0;argbuf>>>=0;return runEmAsmFunction(code,sigPtr,argbuf)}_emscripten_asm_const_double.sig=\"dppp\";var runMainThreadEmAsm=(emAsmAddr,sigPtr,argbuf,sync)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[emAsmAddr](...args)};function _emscripten_asm_const_int_sync_on_main_thread(emAsmAddr,sigPtr,argbuf){emAsmAddr>>>=0;sigPtr>>>=0;argbuf>>>=0;return runMainThreadEmAsm(emAsmAddr,sigPtr,argbuf,1)}_emscripten_asm_const_int_sync_on_main_thread.sig=\"ippp\";function _emscripten_asm_const_ptr_sync_on_main_thread(emAsmAddr,sigPtr,argbuf){emAsmAddr>>>=0;sigPtr>>>=0;argbuf>>>=0;return runMainThreadEmAsm(emAsmAddr,sigPtr,argbuf,1)}_emscripten_asm_const_ptr_sync_on_main_thread.sig=\"pppp\";var _emscripten_asm_const_double_sync_on_main_thread=_emscripten_asm_const_int_sync_on_main_thread;_emscripten_asm_const_double_sync_on_main_thread.sig=\"dppp\";function _emscripten_asm_const_async_on_main_thread(emAsmAddr,sigPtr,argbuf){emAsmAddr>>>=0;sigPtr>>>=0;argbuf>>>=0;return runMainThreadEmAsm(emAsmAddr,sigPtr,argbuf,0)}_emscripten_asm_const_async_on_main_thread.sig=\"vppp\";var jstoi_s=Number;var __Unwind_Backtrace=function(func,arg){func>>>=0;arg>>>=0;var trace=getCallstack();var parts=trace.split(\"\\n\");for(var i=0;i{})(0,arg);if(ret!==0)return}};__Unwind_Backtrace.sig=\"ipp\";function __Unwind_GetIPInfo(context,ipBefore){context>>>=0;ipBefore>>>=0;return abort(\"Unwind_GetIPInfo\")}__Unwind_GetIPInfo.sig=\"ppp\";function __Unwind_FindEnclosingFunction(ip){ip>>>=0;return 0}__Unwind_FindEnclosingFunction.sig=\"pp\";class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>>2>>>0]=type}get_type(){return HEAPU32[this.ptr+4>>>2>>>0]}set_destructor(destructor){HEAPU32[this.ptr+8>>>2>>>0]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>>2>>>0]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12>>>0]=caught}get_caught(){return HEAP8[this.ptr+12>>>0]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>>0]=rethrown}get_rethrown(){return HEAP8[this.ptr+13>>>0]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>>2>>>0]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>>2>>>0]}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){ptr>>>=0;type>>>=0;destructor>>>=0;var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast}___cxa_throw.sig=\"vppp\";function __Unwind_RaiseException(ex){ex>>>=0;err(\"Warning: _Unwind_RaiseException is not correctly implemented\");return ___cxa_throw(ex,0,0)}__Unwind_RaiseException.sig=\"ip\";function __Unwind_DeleteException(ex){ex>>>=0;err(\"TODO: Unwind_DeleteException\")}__Unwind_DeleteException.sig=\"vp\";var listenOnce=(object,event,func)=>{object.addEventListener(event,func,{once:true})};var autoResumeAudioContext=(ctx,elements)=>{if(!elements){elements=[document,document.getElementById(\"canvas\")]}[\"keydown\",\"mousedown\",\"touchstart\"].forEach(event=>{elements.forEach(element=>{if(element){listenOnce(element,event,()=>{if(ctx.state===\"suspended\")ctx.resume()})}})})};var getDynCaller=(sig,ptr)=>(...args)=>dynCall(sig,ptr,args);var _emscripten_exit_with_live_runtime=()=>{runtimeKeepalivePush();throw\"unwind\"};_emscripten_exit_with_live_runtime.sig=\"v\";var _emscripten_force_exit=status=>{__emscripten_runtime_keepalive_clear();_exit(status)};_emscripten_force_exit.sig=\"vi\";function _emscripten_outn(str,len){str>>>=0;len>>>=0;return out(UTF8ToString(str,len))}_emscripten_outn.sig=\"vpp\";function _emscripten_errn(str,len){str>>>=0;len>>>=0;return err(UTF8ToString(str,len))}_emscripten_errn.sig=\"vpp\";var _emscripten_throw_number=number=>{throw number};_emscripten_throw_number.sig=\"vd\";function _emscripten_throw_string(str){str>>>=0;throw UTF8ToString(str)}_emscripten_throw_string.sig=\"vp\";var _emscripten_runtime_keepalive_push=runtimeKeepalivePush;_emscripten_runtime_keepalive_push.sig=\"v\";var _emscripten_runtime_keepalive_pop=runtimeKeepalivePop;_emscripten_runtime_keepalive_pop.sig=\"v\";var _emscripten_runtime_keepalive_check=keepRuntimeAlive;_emscripten_runtime_keepalive_check.sig=\"i\";var asmjsMangle=x=>{if(x==\"__main_argc_argv\"){x=\"main\"}return x.startsWith(\"dynCall_\")?x:\"_\"+x};var ___global_base=1024;function __emscripten_fs_load_embedded_files(ptr){ptr>>>=0;do{var name_addr=HEAPU32[ptr>>>2>>>0];ptr+=4;var len=HEAPU32[ptr>>>2>>>0];ptr+=4;var content=HEAPU32[ptr>>>2>>>0];ptr+=4;var name=UTF8ToString(name_addr);FS.createPath(\"/\",PATH.dirname(name),true,true);FS.createDataFile(name,null,HEAP8.subarray(content>>>0,content+len>>>0),true,true,true)}while(HEAPU32[ptr>>>2>>>0])}__emscripten_fs_load_embedded_files.sig=\"vp\";var POINTER_SIZE=4;function getNativeTypeSize(type){switch(type){case\"i1\":case\"i8\":case\"u8\":return 1;case\"i16\":case\"u16\":return 2;case\"i32\":case\"u32\":return 4;case\"i64\":case\"u64\":return 8;case\"float\":return 4;case\"double\":return 8;default:{if(type[type.length-1]===\"*\"){return POINTER_SIZE}if(type[0]===\"i\"){const bits=Number(type.substr(1));assert(bits%8===0,`getNativeTypeSize invalid bits ${bits}, ${type} type`);return bits/8}return 0}}}var STACK_SIZE=33554432;var STACK_ALIGN=16;var ASSERTIONS=0;var cwrap=(ident,returnType,argTypes,opts)=>{var numericArgs=!argTypes||argTypes.every(type=>type===\"number\"||type===\"boolean\");var numericRet=returnType!==\"string\";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};var removeFunction=index=>{functionsInTableMap.delete(getWasmTableEntry(index));setWasmTableEntry(index,null);freeTableIndexes.push(index)};var _emscripten_math_cbrt=Math.cbrt;_emscripten_math_cbrt.sig=\"dd\";var _emscripten_math_pow=Math.pow;_emscripten_math_pow.sig=\"ddd\";var _emscripten_math_random=Math.random;_emscripten_math_random.sig=\"d\";var _emscripten_math_sign=Math.sign;_emscripten_math_sign.sig=\"dd\";var _emscripten_math_sqrt=Math.sqrt;_emscripten_math_sqrt.sig=\"dd\";var _emscripten_math_exp=Math.exp;_emscripten_math_exp.sig=\"dd\";var _emscripten_math_expm1=Math.expm1;_emscripten_math_expm1.sig=\"dd\";var _emscripten_math_fmod=(x,y)=>x%y;_emscripten_math_fmod.sig=\"ddd\";var _emscripten_math_log=Math.log;_emscripten_math_log.sig=\"dd\";var _emscripten_math_log1p=Math.log1p;_emscripten_math_log1p.sig=\"dd\";var _emscripten_math_log10=Math.log10;_emscripten_math_log10.sig=\"dd\";var _emscripten_math_log2=Math.log2;_emscripten_math_log2.sig=\"dd\";var _emscripten_math_round=Math.round;_emscripten_math_round.sig=\"dd\";var _emscripten_math_acos=Math.acos;_emscripten_math_acos.sig=\"dd\";var _emscripten_math_acosh=Math.acosh;_emscripten_math_acosh.sig=\"dd\";var _emscripten_math_asin=Math.asin;_emscripten_math_asin.sig=\"dd\";var _emscripten_math_asinh=Math.asinh;_emscripten_math_asinh.sig=\"dd\";var _emscripten_math_atan=Math.atan;_emscripten_math_atan.sig=\"dd\";var _emscripten_math_atanh=Math.atanh;_emscripten_math_atanh.sig=\"dd\";var _emscripten_math_atan2=Math.atan2;_emscripten_math_atan2.sig=\"ddd\";var _emscripten_math_cos=Math.cos;_emscripten_math_cos.sig=\"dd\";var _emscripten_math_cosh=Math.cosh;_emscripten_math_cosh.sig=\"dd\";function _emscripten_math_hypot(count,varargs){varargs>>>=0;var args=[];for(var i=0;i>>3>>>0])}return Math.hypot(...args)}_emscripten_math_hypot.sig=\"dip\";var _emscripten_math_sin=Math.sin;_emscripten_math_sin.sig=\"dd\";var _emscripten_math_sinh=Math.sinh;_emscripten_math_sinh.sig=\"dd\";var _emscripten_math_tan=Math.tan;_emscripten_math_tan.sig=\"dd\";var _emscripten_math_tanh=Math.tanh;_emscripten_math_tanh.sig=\"dd\";function intArrayToString(array){var ret=[];for(var i=0;i255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join(\"\")}var AsciiToString=ptr=>{ptr>>>=0;var str=\"\";while(1){var ch=HEAPU8[ptr++>>>0];if(!ch)return str;str+=String.fromCharCode(ch)}};var UTF16Decoder=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf-16le\"):undefined;var UTF16ToString=(ptr,maxBytesToRead)=>{var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx>>>0])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder)return UTF16Decoder.decode(HEAPU8.subarray(ptr>>>0,endPtr>>>0));var str=\"\";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>>1>>>0];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str};var stringToUTF16=(str,outPtr,maxBytesToWrite)=>{maxBytesToWrite??=2147483647;if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>>1>>>0]=codeUnit;outPtr+=2}HEAP16[outPtr>>>1>>>0]=0;return outPtr-startPtr};var lengthBytesUTF16=str=>str.length*2;var UTF32ToString=(ptr,maxBytesToRead)=>{var i=0;var str=\"\";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>>2>>>0];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str};var stringToUTF32=(str,outPtr,maxBytesToWrite)=>{outPtr>>>=0;maxBytesToWrite??=2147483647;if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>>2>>>0]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>>2>>>0]=0;return outPtr-startPtr};var lengthBytesUTF32=str=>{var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len};var stringToNewUTF8=str=>{var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret};var JSEvents={removeAllEventListeners(){while(JSEvents.eventHandlers.length){JSEvents._removeHandler(JSEvents.eventHandlers.length-1)}JSEvents.deferredCalls=[]},registerRemoveEventListeners(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},inEventHandler:0,deferredCalls:[],deferCall(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var call of JSEvents.deferredCalls){if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction,precedence,argsList});JSEvents.deferredCalls.sort((x,y)=>x.precedencecall.targetFunction!=targetFunction)},canPerformEventHandlerRequests(){if(navigator.userActivation){return navigator.userActivation.isActive}return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls(){if(!JSEvents.canPerformEventHandlerRequests()){return}var deferredCalls=JSEvents.deferredCalls;JSEvents.deferredCalls=[];for(var call of deferredCalls){call.targetFunction(...call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:(target,eventTypeString)=>{for(var i=0;icString>2?UTF8ToString(cString):cString;var specialHTMLTargets=[0,document,window];var findEventTarget=target=>{target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||document.querySelector(target);return domElement};var registerKeyEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{JSEvents.keyEvent||=_malloc(160);var keyEventHandlerFunc=e=>{var keyEventData=JSEvents.keyEvent;HEAPF64[keyEventData>>>3>>>0]=e.timeStamp;var idx=keyEventData>>>2;HEAP32[idx+2>>>0]=e.location;HEAP8[keyEventData+12>>>0]=e.ctrlKey;HEAP8[keyEventData+13>>>0]=e.shiftKey;HEAP8[keyEventData+14>>>0]=e.altKey;HEAP8[keyEventData+15>>>0]=e.metaKey;HEAP8[keyEventData+16>>>0]=e.repeat;HEAP32[idx+5>>>0]=e.charCode;HEAP32[idx+6>>>0]=e.keyCode;HEAP32[idx+7>>>0]=e.which;stringToUTF8(e.key||\"\",keyEventData+32,32);stringToUTF8(e.code||\"\",keyEventData+64,32);stringToUTF8(e.char||\"\",keyEventData+96,32);stringToUTF8(e.locale||\"\",keyEventData+128,32);if(((a1,a2,a3)=>{})(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString,callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var findCanvasEventTarget=findEventTarget;function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,\"keypress\",targetThread)}_emscripten_set_keypress_callback_on_thread.sig=\"ippipp\";function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,\"keydown\",targetThread)}_emscripten_set_keydown_callback_on_thread.sig=\"ippipp\";function _emscripten_set_keyup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,\"keyup\",targetThread)}_emscripten_set_keyup_callback_on_thread.sig=\"ippipp\";var getBoundingClientRect=e=>specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{left:0,top:0};var fillMouseEventData=(eventStruct,e,target)=>{HEAPF64[eventStruct>>>3>>>0]=e.timeStamp;var idx=eventStruct>>>2;HEAP32[idx+2>>>0]=e.screenX;HEAP32[idx+3>>>0]=e.screenY;HEAP32[idx+4>>>0]=e.clientX;HEAP32[idx+5>>>0]=e.clientY;HEAP8[eventStruct+24>>>0]=e.ctrlKey;HEAP8[eventStruct+25>>>0]=e.shiftKey;HEAP8[eventStruct+26>>>0]=e.altKey;HEAP8[eventStruct+27>>>0]=e.metaKey;HEAP16[idx*2+14>>>0]=e.button;HEAP16[idx*2+15>>>0]=e.buttons;HEAP32[idx+8>>>0]=e[\"movementX\"];HEAP32[idx+9>>>0]=e[\"movementY\"];var rect=getBoundingClientRect(target);HEAP32[idx+10>>>0]=e.clientX-(rect.left|0);HEAP32[idx+11>>>0]=e.clientY-(rect.top|0)};var registerMouseEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{JSEvents.mouseEvent||=_malloc(64);target=findEventTarget(target);var mouseEventHandlerFunc=(e=event)=>{fillMouseEventData(JSEvents.mouseEvent,e,target);if(((a1,a2,a3)=>{})(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target,allowsDeferredCalls:eventTypeString!=\"mousemove\"&&eventTypeString!=\"mouseenter\"&&eventTypeString!=\"mouseleave\",eventTypeString,callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,\"click\",targetThread)}_emscripten_set_click_callback_on_thread.sig=\"ippipp\";function _emscripten_set_mousedown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,\"mousedown\",targetThread)}_emscripten_set_mousedown_callback_on_thread.sig=\"ippipp\";function _emscripten_set_mouseup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,\"mouseup\",targetThread)}_emscripten_set_mouseup_callback_on_thread.sig=\"ippipp\";function _emscripten_set_dblclick_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,7,\"dblclick\",targetThread)}_emscripten_set_dblclick_callback_on_thread.sig=\"ippipp\";function _emscripten_set_mousemove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,\"mousemove\",targetThread)}_emscripten_set_mousemove_callback_on_thread.sig=\"ippipp\";function _emscripten_set_mouseenter_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,33,\"mouseenter\",targetThread)}_emscripten_set_mouseenter_callback_on_thread.sig=\"ippipp\";function _emscripten_set_mouseleave_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,34,\"mouseleave\",targetThread)}_emscripten_set_mouseleave_callback_on_thread.sig=\"ippipp\";function _emscripten_set_mouseover_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,35,\"mouseover\",targetThread)}_emscripten_set_mouseover_callback_on_thread.sig=\"ippipp\";function _emscripten_set_mouseout_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,36,\"mouseout\",targetThread)}_emscripten_set_mouseout_callback_on_thread.sig=\"ippipp\";function _emscripten_get_mouse_status(mouseState){mouseState>>>=0;if(!JSEvents.mouseEvent)return-7;HEAP8.set(HEAP8.subarray(JSEvents.mouseEvent>>>0,JSEvents.mouseEvent+64>>>0),mouseState>>>0);return 0}_emscripten_get_mouse_status.sig=\"ip\";var registerWheelEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{JSEvents.wheelEvent||=_malloc(96);var wheelHandlerFunc=(e=event)=>{var wheelEvent=JSEvents.wheelEvent;fillMouseEventData(wheelEvent,e,target);HEAPF64[wheelEvent+64>>>3>>>0]=e[\"deltaX\"];HEAPF64[wheelEvent+72>>>3>>>0]=e[\"deltaY\"];HEAPF64[wheelEvent+80>>>3>>>0]=e[\"deltaZ\"];HEAP32[wheelEvent+88>>>2>>>0]=e[\"deltaMode\"];if(((a1,a2,a3)=>{})(eventTypeId,wheelEvent,userData))e.preventDefault()};var eventHandler={target,allowsDeferredCalls:true,eventTypeString,callbackfunc,handlerFunc:wheelHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_wheel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;target=findEventTarget(target);if(!target)return-4;if(typeof target.onwheel!=\"undefined\"){return registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,\"wheel\",targetThread)}else{return-1}}_emscripten_set_wheel_callback_on_thread.sig=\"ippipp\";var registerUiEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{JSEvents.uiEvent||=_malloc(36);target=findEventTarget(target);var uiEventHandlerFunc=(e=event)=>{if(e.target!=target){return}var b=document.body;if(!b){return}var uiEvent=JSEvents.uiEvent;HEAP32[uiEvent>>>2>>>0]=0;HEAP32[uiEvent+4>>>2>>>0]=b.clientWidth;HEAP32[uiEvent+8>>>2>>>0]=b.clientHeight;HEAP32[uiEvent+12>>>2>>>0]=innerWidth;HEAP32[uiEvent+16>>>2>>>0]=innerHeight;HEAP32[uiEvent+20>>>2>>>0]=outerWidth;HEAP32[uiEvent+24>>>2>>>0]=outerHeight;HEAP32[uiEvent+28>>>2>>>0]=pageXOffset|0;HEAP32[uiEvent+32>>>2>>>0]=pageYOffset|0;if(((a1,a2,a3)=>{})(eventTypeId,uiEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,callbackfunc,handlerFunc:uiEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_resize_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerUiEventCallback(target,userData,useCapture,callbackfunc,10,\"resize\",targetThread)}_emscripten_set_resize_callback_on_thread.sig=\"ippipp\";function _emscripten_set_scroll_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerUiEventCallback(target,userData,useCapture,callbackfunc,11,\"scroll\",targetThread)}_emscripten_set_scroll_callback_on_thread.sig=\"ippipp\";var registerFocusEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{JSEvents.focusEvent||=_malloc(256);var focusEventHandlerFunc=(e=event)=>{var nodeName=JSEvents.getNodeNameForTarget(e.target);var id=e.target.id?e.target.id:\"\";var focusEvent=JSEvents.focusEvent;stringToUTF8(nodeName,focusEvent+0,128);stringToUTF8(id,focusEvent+128,128);if(((a1,a2,a3)=>{})(eventTypeId,focusEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString,callbackfunc,handlerFunc:focusEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_blur_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,\"blur\",targetThread)}_emscripten_set_blur_callback_on_thread.sig=\"ippipp\";function _emscripten_set_focus_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,\"focus\",targetThread)}_emscripten_set_focus_callback_on_thread.sig=\"ippipp\";function _emscripten_set_focusin_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerFocusEventCallback(target,userData,useCapture,callbackfunc,14,\"focusin\",targetThread)}_emscripten_set_focusin_callback_on_thread.sig=\"ippipp\";function _emscripten_set_focusout_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerFocusEventCallback(target,userData,useCapture,callbackfunc,15,\"focusout\",targetThread)}_emscripten_set_focusout_callback_on_thread.sig=\"ippipp\";var fillDeviceOrientationEventData=(eventStruct,e,target)=>{HEAPF64[eventStruct>>>3>>>0]=e.alpha;HEAPF64[eventStruct+8>>>3>>>0]=e.beta;HEAPF64[eventStruct+16>>>3>>>0]=e.gamma;HEAP8[eventStruct+24>>>0]=e.absolute};var registerDeviceOrientationEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{JSEvents.deviceOrientationEvent||=_malloc(32);var deviceOrientationEventHandlerFunc=(e=event)=>{fillDeviceOrientationEventData(JSEvents.deviceOrientationEvent,e,target);if(((a1,a2,a3)=>{})(eventTypeId,JSEvents.deviceOrientationEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString,callbackfunc,handlerFunc:deviceOrientationEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_deviceorientation_callback_on_thread(userData,useCapture,callbackfunc,targetThread){userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerDeviceOrientationEventCallback(2,userData,useCapture,callbackfunc,16,\"deviceorientation\",targetThread)}_emscripten_set_deviceorientation_callback_on_thread.sig=\"ipipp\";function _emscripten_get_deviceorientation_status(orientationState){orientationState>>>=0;if(!JSEvents.deviceOrientationEvent)return-7;HEAP32.set(HEAP32.subarray(JSEvents.deviceOrientationEvent>>>0,32>>>0),orientationState>>>0);return 0}_emscripten_get_deviceorientation_status.sig=\"ip\";var fillDeviceMotionEventData=(eventStruct,e,target)=>{var supportedFields=0;var a=e[\"acceleration\"];supportedFields|=a&&1;var ag=e[\"accelerationIncludingGravity\"];supportedFields|=ag&&2;var rr=e[\"rotationRate\"];supportedFields|=rr&&4;a=a||{};ag=ag||{};rr=rr||{};HEAPF64[eventStruct>>>3>>>0]=a[\"x\"];HEAPF64[eventStruct+8>>>3>>>0]=a[\"y\"];HEAPF64[eventStruct+16>>>3>>>0]=a[\"z\"];HEAPF64[eventStruct+24>>>3>>>0]=ag[\"x\"];HEAPF64[eventStruct+32>>>3>>>0]=ag[\"y\"];HEAPF64[eventStruct+40>>>3>>>0]=ag[\"z\"];HEAPF64[eventStruct+48>>>3>>>0]=rr[\"alpha\"];HEAPF64[eventStruct+56>>>3>>>0]=rr[\"beta\"];HEAPF64[eventStruct+64>>>3>>>0]=rr[\"gamma\"]};var registerDeviceMotionEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{JSEvents.deviceMotionEvent||=_malloc(80);var deviceMotionEventHandlerFunc=(e=event)=>{fillDeviceMotionEventData(JSEvents.deviceMotionEvent,e,target);if(((a1,a2,a3)=>{})(eventTypeId,JSEvents.deviceMotionEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString,callbackfunc,handlerFunc:deviceMotionEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_devicemotion_callback_on_thread(userData,useCapture,callbackfunc,targetThread){userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerDeviceMotionEventCallback(2,userData,useCapture,callbackfunc,17,\"devicemotion\",targetThread)}_emscripten_set_devicemotion_callback_on_thread.sig=\"ipipp\";function _emscripten_get_devicemotion_status(motionState){motionState>>>=0;if(!JSEvents.deviceMotionEvent)return-7;HEAP32.set(HEAP32.subarray(JSEvents.deviceMotionEvent>>>0,80>>>0),motionState>>>0);return 0}_emscripten_get_devicemotion_status.sig=\"ip\";var screenOrientation=()=>{if(!window.screen)return undefined;return screen.orientation||screen[\"mozOrientation\"]||screen[\"webkitOrientation\"]};var fillOrientationChangeEventData=eventStruct=>{var orientationsType1=[\"portrait-primary\",\"portrait-secondary\",\"landscape-primary\",\"landscape-secondary\"];var orientationsType2=[\"portrait\",\"portrait\",\"landscape\",\"landscape\"];var orientationIndex=0;var orientationAngle=0;var screenOrientObj=screenOrientation();if(typeof screenOrientObj===\"object\"){orientationIndex=orientationsType1.indexOf(screenOrientObj.type);if(orientationIndex<0){orientationIndex=orientationsType2.indexOf(screenOrientObj.type)}if(orientationIndex>=0){orientationIndex=1<>>2>>>0]=orientationIndex;HEAP32[eventStruct+4>>>2>>>0]=orientationAngle};var registerOrientationChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{JSEvents.orientationChangeEvent||=_malloc(8);var orientationChangeEventHandlerFunc=(e=event)=>{var orientationChangeEvent=JSEvents.orientationChangeEvent;fillOrientationChangeEventData(orientationChangeEvent);if(((a1,a2,a3)=>{})(eventTypeId,orientationChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,callbackfunc,handlerFunc:orientationChangeEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_orientationchange_callback_on_thread(userData,useCapture,callbackfunc,targetThread){userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;if(!window.screen||!screen.orientation)return-1;return registerOrientationChangeEventCallback(screen.orientation,userData,useCapture,callbackfunc,18,\"change\",targetThread)}_emscripten_set_orientationchange_callback_on_thread.sig=\"ipipp\";function _emscripten_get_orientation_status(orientationChangeEvent){orientationChangeEvent>>>=0;if(!screenOrientation()&&typeof orientation==\"undefined\")return-1;fillOrientationChangeEventData(orientationChangeEvent);return 0}_emscripten_get_orientation_status.sig=\"ip\";var _emscripten_lock_orientation=allowedOrientations=>{var orientations=[];if(allowedOrientations&1)orientations.push(\"portrait-primary\");if(allowedOrientations&2)orientations.push(\"portrait-secondary\");if(allowedOrientations&4)orientations.push(\"landscape-primary\");if(allowedOrientations&8)orientations.push(\"landscape-secondary\");var succeeded;if(screen.lockOrientation){succeeded=screen.lockOrientation(orientations)}else if(screen.mozLockOrientation){succeeded=screen.mozLockOrientation(orientations)}else if(screen.webkitLockOrientation){succeeded=screen.webkitLockOrientation(orientations)}else{return-1}if(succeeded){return 0}return-6};_emscripten_lock_orientation.sig=\"ii\";var _emscripten_unlock_orientation=()=>{if(screen.unlockOrientation){screen.unlockOrientation()}else if(screen.mozUnlockOrientation){screen.mozUnlockOrientation()}else if(screen.webkitUnlockOrientation){screen.webkitUnlockOrientation()}else{return-1}return 0};_emscripten_unlock_orientation.sig=\"i\";var fillFullscreenChangeEventData=eventStruct=>{var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP8[eventStruct>>>0]=isFullscreen;HEAP8[eventStruct+1>>>0]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement?.id||\"\";stringToUTF8(nodeName,eventStruct+2,128);stringToUTF8(id,eventStruct+130,128);HEAP32[eventStruct+260>>>2>>>0]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+264>>>2>>>0]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+268>>>2>>>0]=screen.width;HEAP32[eventStruct+272>>>2>>>0]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}};var registerFullscreenChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{JSEvents.fullscreenChangeEvent||=_malloc(276);var fullscreenChangeEventhandlerFunc=(e=event)=>{var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(((a1,a2,a3)=>{})(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,\"webkitfullscreenchange\",targetThread);return registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,\"fullscreenchange\",targetThread)}_emscripten_set_fullscreenchange_callback_on_thread.sig=\"ippipp\";function _emscripten_get_fullscreen_status(fullscreenStatus){fullscreenStatus>>>=0;if(!JSEvents.fullscreenEnabled())return-1;fillFullscreenChangeEventData(fullscreenStatus);return 0}_emscripten_get_fullscreen_status.sig=\"ip\";function _emscripten_get_canvas_element_size(target,width,height){target>>>=0;width>>>=0;height>>>=0;var canvas=findCanvasEventTarget(target);if(!canvas)return-4;HEAP32[width>>>2>>>0]=canvas.width;HEAP32[height>>>2>>>0]=canvas.height}_emscripten_get_canvas_element_size.sig=\"ippp\";var getCanvasElementSize=target=>{var sp=stackSave();var w=stackAlloc(8);var h=w+4;var targetInt=stringToUTF8OnStack(target.id);var ret=_emscripten_get_canvas_element_size(targetInt,w,h);var size=[HEAP32[w>>>2>>>0],HEAP32[h>>>2>>>0]];stackRestore(sp);return size};function _emscripten_set_canvas_element_size(target,width,height){target>>>=0;var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0}_emscripten_set_canvas_element_size.sig=\"ipii\";var setCanvasElementSize=(target,width,height)=>{if(!target.controlTransferredOffscreen){target.width=width;target.height=height}else{var sp=stackSave();var targetInt=stringToUTF8OnStack(target.id);_emscripten_set_canvas_element_size(targetInt,width,height);stackRestore(sp)}};var registerRestoreOldStyle=canvas=>{var canvasSize=getCanvasElementSize(canvas);var oldWidth=canvasSize[0];var oldHeight=canvasSize[1];var oldCssWidth=canvas.style.width;var oldCssHeight=canvas.style.height;var oldBackgroundColor=canvas.style.backgroundColor;var oldDocumentBackgroundColor=document.body.style.backgroundColor;var oldPaddingLeft=canvas.style.paddingLeft;var oldPaddingRight=canvas.style.paddingRight;var oldPaddingTop=canvas.style.paddingTop;var oldPaddingBottom=canvas.style.paddingBottom;var oldMarginLeft=canvas.style.marginLeft;var oldMarginRight=canvas.style.marginRight;var oldMarginTop=canvas.style.marginTop;var oldMarginBottom=canvas.style.marginBottom;var oldDocumentBodyMargin=document.body.style.margin;var oldDocumentOverflow=document.documentElement.style.overflow;var oldDocumentScroll=document.body.scroll;var oldImageRendering=canvas.style.imageRendering;function restoreOldStyle(){var fullscreenElement=document.fullscreenElement||document.webkitFullscreenElement;if(!fullscreenElement){document.removeEventListener(\"fullscreenchange\",restoreOldStyle);document.removeEventListener(\"webkitfullscreenchange\",restoreOldStyle);setCanvasElementSize(canvas,oldWidth,oldHeight);canvas.style.width=oldCssWidth;canvas.style.height=oldCssHeight;canvas.style.backgroundColor=oldBackgroundColor;if(!oldDocumentBackgroundColor)document.body.style.backgroundColor=\"white\";document.body.style.backgroundColor=oldDocumentBackgroundColor;canvas.style.paddingLeft=oldPaddingLeft;canvas.style.paddingRight=oldPaddingRight;canvas.style.paddingTop=oldPaddingTop;canvas.style.paddingBottom=oldPaddingBottom;canvas.style.marginLeft=oldMarginLeft;canvas.style.marginRight=oldMarginRight;canvas.style.marginTop=oldMarginTop;canvas.style.marginBottom=oldMarginBottom;document.body.style.margin=oldDocumentBodyMargin;document.documentElement.style.overflow=oldDocumentOverflow;document.body.scroll=oldDocumentScroll;canvas.style.imageRendering=oldImageRendering;if(canvas.GLctxObject)canvas.GLctxObject.GLctx.viewport(0,0,oldWidth,oldHeight);if(currentFullscreenStrategy.canvasResizedCallback){((a1,a2,a3)=>{})(37,0,currentFullscreenStrategy.canvasResizedCallbackUserData)}}}document.addEventListener(\"fullscreenchange\",restoreOldStyle);document.addEventListener(\"webkitfullscreenchange\",restoreOldStyle);return restoreOldStyle};var setLetterbox=(element,topBottom,leftRight)=>{element.style.paddingLeft=element.style.paddingRight=leftRight+\"px\";element.style.paddingTop=element.style.paddingBottom=topBottom+\"px\"};var JSEvents_resizeCanvasForFullscreen=(target,strategy)=>{var restoreOldStyle=registerRestoreOldStyle(target);var cssWidth=strategy.softFullscreen?innerWidth:screen.width;var cssHeight=strategy.softFullscreen?innerHeight:screen.height;var rect=getBoundingClientRect(target);var windowedCssWidth=rect.width;var windowedCssHeight=rect.height;var canvasSize=getCanvasElementSize(target);var windowedRttWidth=canvasSize[0];var windowedRttHeight=canvasSize[1];if(strategy.scaleMode==3){setLetterbox(target,(cssHeight-windowedCssHeight)/2,(cssWidth-windowedCssWidth)/2);cssWidth=windowedCssWidth;cssHeight=windowedCssHeight}else if(strategy.scaleMode==2){if(cssWidth*windowedRttHeight{if(strategy.scaleMode!=0||strategy.canvasResolutionScaleMode!=0){JSEvents_resizeCanvasForFullscreen(target,strategy)}if(target.requestFullscreen){target.requestFullscreen()}else if(target.webkitRequestFullscreen){target.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}else{return JSEvents.fullscreenEnabled()?-3:-1}currentFullscreenStrategy=strategy;if(strategy.canvasResizedCallback){((a1,a2,a3)=>{})(37,0,strategy.canvasResizedCallbackUserData)}return 0};var hideEverythingExceptGivenElement=onlyVisibleElement=>{var child=onlyVisibleElement;var parent=child.parentNode;var hiddenElements=[];while(child!=document.body){var children=parent.children;for(var i=0;i{for(var elem of hiddenElements){elem.node.style.display=elem.displayState}};var currentFullscreenStrategy={};var restoreOldWindowedStyle=null;var softFullscreenResizeWebGLRenderTarget=()=>{var dpr=devicePixelRatio;var inHiDPIFullscreenMode=currentFullscreenStrategy.canvasResolutionScaleMode==2;var inAspectRatioFixedFullscreenMode=currentFullscreenStrategy.scaleMode==2;var inPixelPerfectFullscreenMode=currentFullscreenStrategy.canvasResolutionScaleMode!=0;var inCenteredWithoutScalingFullscreenMode=currentFullscreenStrategy.scaleMode==3;var screenWidth=inHiDPIFullscreenMode?Math.round(innerWidth*dpr):innerWidth;var screenHeight=inHiDPIFullscreenMode?Math.round(innerHeight*dpr):innerHeight;var w=screenWidth;var h=screenHeight;var canvas=currentFullscreenStrategy.target;var canvasSize=getCanvasElementSize(canvas);var x=canvasSize[0];var y=canvasSize[1];var topMargin;if(inAspectRatioFixedFullscreenMode){if(w*yx*h)w=h*x/y|0;topMargin=(screenHeight-h)/2|0}if(inPixelPerfectFullscreenMode){setCanvasElementSize(canvas,w,h);if(canvas.GLctxObject)canvas.GLctxObject.GLctx.viewport(0,0,w,h)}if(inHiDPIFullscreenMode){topMargin/=dpr;w/=dpr;h/=dpr;w=Math.round(w*1e4)/1e4;h=Math.round(h*1e4)/1e4;topMargin=Math.round(topMargin*1e4)/1e4}if(inCenteredWithoutScalingFullscreenMode){var t=(innerHeight-jstoi_q(canvas.style.height))/2;var b=(innerWidth-jstoi_q(canvas.style.width))/2;setLetterbox(canvas,t,b)}else{canvas.style.width=w+\"px\";canvas.style.height=h+\"px\";var b=(innerWidth-w)/2;setLetterbox(canvas,topMargin,b)}if(!inCenteredWithoutScalingFullscreenMode&¤tFullscreenStrategy.canvasResizedCallback){((a1,a2,a3)=>{})(37,0,currentFullscreenStrategy.canvasResizedCallbackUserData)}};var doRequestFullscreen=(target,strategy)=>{if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;if(!target.requestFullscreen&&!target.webkitRequestFullscreen){return-3}if(!JSEvents.canPerformEventHandlerRequests()){if(strategy.deferUntilInEventHandler){JSEvents.deferCall(JSEvents_requestFullscreen,1,[target,strategy]);return 1}return-2}return JSEvents_requestFullscreen(target,strategy)};function _emscripten_request_fullscreen(target,deferUntilInEventHandler){target>>>=0;var strategy={scaleMode:0,canvasResolutionScaleMode:0,filteringMode:0,deferUntilInEventHandler,canvasResizedCallbackTargetThread:2};return doRequestFullscreen(target,strategy)}_emscripten_request_fullscreen.sig=\"ipi\";function _emscripten_request_fullscreen_strategy(target,deferUntilInEventHandler,fullscreenStrategy){target>>>=0;fullscreenStrategy>>>=0;var strategy={scaleMode:HEAP32[fullscreenStrategy>>>2>>>0],canvasResolutionScaleMode:HEAP32[fullscreenStrategy+4>>>2>>>0],filteringMode:HEAP32[fullscreenStrategy+8>>>2>>>0],deferUntilInEventHandler,canvasResizedCallback:HEAP32[fullscreenStrategy+12>>>2>>>0],canvasResizedCallbackUserData:HEAP32[fullscreenStrategy+16>>>2>>>0]};return doRequestFullscreen(target,strategy)}_emscripten_request_fullscreen_strategy.sig=\"ipip\";function _emscripten_enter_soft_fullscreen(target,fullscreenStrategy){target>>>=0;fullscreenStrategy>>>=0;target=findEventTarget(target);if(!target)return-4;var strategy={scaleMode:HEAP32[fullscreenStrategy>>>2>>>0],canvasResolutionScaleMode:HEAP32[fullscreenStrategy+4>>>2>>>0],filteringMode:HEAP32[fullscreenStrategy+8>>>2>>>0],canvasResizedCallback:HEAP32[fullscreenStrategy+12>>>2>>>0],canvasResizedCallbackUserData:HEAP32[fullscreenStrategy+16>>>2>>>0],target,softFullscreen:true};var restoreOldStyle=JSEvents_resizeCanvasForFullscreen(target,strategy);document.documentElement.style.overflow=\"hidden\";document.body.scroll=\"no\";document.body.style.margin=\"0px\";var hiddenElements=hideEverythingExceptGivenElement(target);function restoreWindowedState(){restoreOldStyle();restoreHiddenElements(hiddenElements);removeEventListener(\"resize\",softFullscreenResizeWebGLRenderTarget);if(strategy.canvasResizedCallback){((a1,a2,a3)=>{})(37,0,strategy.canvasResizedCallbackUserData)}currentFullscreenStrategy=0}restoreOldWindowedStyle=restoreWindowedState;currentFullscreenStrategy=strategy;addEventListener(\"resize\",softFullscreenResizeWebGLRenderTarget);if(strategy.canvasResizedCallback){((a1,a2,a3)=>{})(37,0,strategy.canvasResizedCallbackUserData)}return 0}_emscripten_enter_soft_fullscreen.sig=\"ipp\";var _emscripten_exit_soft_fullscreen=()=>{restoreOldWindowedStyle?.();restoreOldWindowedStyle=null;return 0};_emscripten_exit_soft_fullscreen.sig=\"i\";var _emscripten_exit_fullscreen=()=>{if(!JSEvents.fullscreenEnabled())return-1;JSEvents.removeDeferredCalls(JSEvents_requestFullscreen);var d=specialHTMLTargets[1];if(d.exitFullscreen){d.fullscreenElement&&d.exitFullscreen()}else if(d.webkitExitFullscreen){d.webkitFullscreenElement&&d.webkitExitFullscreen()}else{return-1}return 0};_emscripten_exit_fullscreen.sig=\"i\";var fillPointerlockChangeEventData=eventStruct=>{var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP8[eventStruct>>>0]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement?.id||\"\";stringToUTF8(nodeName,eventStruct+1,128);stringToUTF8(id,eventStruct+129,128)};var registerPointerlockChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{JSEvents.pointerlockChangeEvent||=_malloc(257);var pointerlockChangeEventHandlerFunc=(e=event)=>{var pointerlockChangeEvent=JSEvents.pointerlockChangeEvent;fillPointerlockChangeEventData(pointerlockChangeEvent);if(((a1,a2,a3)=>{})(eventTypeId,pointerlockChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,callbackfunc,handlerFunc:pointerlockChangeEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_pointerlockchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;if(!document||!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}target=findEventTarget(target);if(!target)return-4;registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,\"mozpointerlockchange\",targetThread);registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,\"webkitpointerlockchange\",targetThread);registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,\"mspointerlockchange\",targetThread);return registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,\"pointerlockchange\",targetThread)}_emscripten_set_pointerlockchange_callback_on_thread.sig=\"ippipp\";var registerPointerlockErrorEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var pointerlockErrorEventHandlerFunc=(e=event)=>{if(((a1,a2,a3)=>{})(eventTypeId,0,userData))e.preventDefault()};var eventHandler={target,eventTypeString,callbackfunc,handlerFunc:pointerlockErrorEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_pointerlockerror_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;if(!document||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}target=findEventTarget(target);if(!target)return-4;registerPointerlockErrorEventCallback(target,userData,useCapture,callbackfunc,38,\"mozpointerlockerror\",targetThread);registerPointerlockErrorEventCallback(target,userData,useCapture,callbackfunc,38,\"webkitpointerlockerror\",targetThread);registerPointerlockErrorEventCallback(target,userData,useCapture,callbackfunc,38,\"mspointerlockerror\",targetThread);return registerPointerlockErrorEventCallback(target,userData,useCapture,callbackfunc,38,\"pointerlockerror\",targetThread)}_emscripten_set_pointerlockerror_callback_on_thread.sig=\"ippipp\";function _emscripten_get_pointerlock_status(pointerlockStatus){pointerlockStatus>>>=0;if(pointerlockStatus)fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}_emscripten_get_pointerlock_status.sig=\"ip\";var requestPointerLock=target=>{if(target.requestPointerLock){target.requestPointerLock()}else{if(document.body.requestPointerLock){return-3}return-1}return 0};function _emscripten_request_pointerlock(target,deferUntilInEventHandler){target>>>=0;target=findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock){return-1}if(!JSEvents.canPerformEventHandlerRequests()){if(deferUntilInEventHandler){JSEvents.deferCall(requestPointerLock,2,[target]);return 1}return-2}return requestPointerLock(target)}_emscripten_request_pointerlock.sig=\"ipi\";var _emscripten_exit_pointerlock=()=>{JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else{return-1}return 0};_emscripten_exit_pointerlock.sig=\"i\";var _emscripten_vibrate=msecs=>{if(!navigator.vibrate)return-1;navigator.vibrate(msecs);return 0};_emscripten_vibrate.sig=\"ii\";function _emscripten_vibrate_pattern(msecsArray,numEntries){msecsArray>>>=0;if(!navigator.vibrate)return-1;var vibrateList=[];for(var i=0;i>>2>>>0];vibrateList.push(msecs)}navigator.vibrate(vibrateList);return 0}_emscripten_vibrate_pattern.sig=\"ipi\";var fillVisibilityChangeEventData=eventStruct=>{var visibilityStates=[\"hidden\",\"visible\",\"prerender\",\"unloaded\"];var visibilityState=visibilityStates.indexOf(document.visibilityState);HEAP8[eventStruct>>>0]=document.hidden;HEAP32[eventStruct+4>>>2>>>0]=visibilityState};var registerVisibilityChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{JSEvents.visibilityChangeEvent||=_malloc(8);var visibilityChangeEventHandlerFunc=(e=event)=>{var visibilityChangeEvent=JSEvents.visibilityChangeEvent;fillVisibilityChangeEventData(visibilityChangeEvent);if(((a1,a2,a3)=>{})(eventTypeId,visibilityChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,callbackfunc,handlerFunc:visibilityChangeEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_visibilitychange_callback_on_thread(userData,useCapture,callbackfunc,targetThread){userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerVisibilityChangeEventCallback(specialHTMLTargets[1],userData,useCapture,callbackfunc,21,\"visibilitychange\",targetThread)}_emscripten_set_visibilitychange_callback_on_thread.sig=\"ipipp\";function _emscripten_get_visibility_status(visibilityStatus){visibilityStatus>>>=0;if(typeof document.visibilityState==\"undefined\"&&typeof document.hidden==\"undefined\"){return-1}fillVisibilityChangeEventData(visibilityStatus);return 0}_emscripten_get_visibility_status.sig=\"ip\";var registerTouchEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{JSEvents.touchEvent||=_malloc(1552);target=findEventTarget(target);var touchEventHandlerFunc=e=>{var t,touches={},et=e.touches;for(let t of et){t.isChanged=t.onTarget=0;touches[t.identifier]=t}for(let t of e.changedTouches){t.isChanged=1;touches[t.identifier]=t}for(let t of e.targetTouches){touches[t.identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;HEAPF64[touchEvent>>>3>>>0]=e.timeStamp;HEAP8[touchEvent+12>>>0]=e.ctrlKey;HEAP8[touchEvent+13>>>0]=e.shiftKey;HEAP8[touchEvent+14>>>0]=e.altKey;HEAP8[touchEvent+15>>>0]=e.metaKey;var idx=touchEvent+16;var targetRect=getBoundingClientRect(target);var numTouches=0;for(let t of Object.values(touches)){var idx32=idx>>>2;HEAP32[idx32+0>>>0]=t.identifier;HEAP32[idx32+1>>>0]=t.screenX;HEAP32[idx32+2>>>0]=t.screenY;HEAP32[idx32+3>>>0]=t.clientX;HEAP32[idx32+4>>>0]=t.clientY;HEAP32[idx32+5>>>0]=t.pageX;HEAP32[idx32+6>>>0]=t.pageY;HEAP8[idx+28>>>0]=t.isChanged;HEAP8[idx+29>>>0]=t.onTarget;HEAP32[idx32+8>>>0]=t.clientX-(targetRect.left|0);HEAP32[idx32+9>>>0]=t.clientY-(targetRect.top|0);idx+=48;if(++numTouches>31){break}}HEAP32[touchEvent+8>>>2>>>0]=numTouches;if(((a1,a2,a3)=>{})(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target,allowsDeferredCalls:eventTypeString==\"touchstart\"||eventTypeString==\"touchend\",eventTypeString,callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,\"touchstart\",targetThread)}_emscripten_set_touchstart_callback_on_thread.sig=\"ippipp\";function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,\"touchend\",targetThread)}_emscripten_set_touchend_callback_on_thread.sig=\"ippipp\";function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,\"touchmove\",targetThread)}_emscripten_set_touchmove_callback_on_thread.sig=\"ippipp\";function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,\"touchcancel\",targetThread)}_emscripten_set_touchcancel_callback_on_thread.sig=\"ippipp\";var fillGamepadEventData=(eventStruct,e)=>{HEAPF64[eventStruct>>>3>>>0]=e.timestamp;for(var i=0;i>>3>>>0]=e.axes[i]}for(var i=0;i>>3>>>0]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>>3>>>0]=e.buttons[i]}}for(var i=0;i>>0]=e.buttons[i].pressed}else{HEAP8[eventStruct+i+1040>>>0]=e.buttons[i]==1}}HEAP8[eventStruct+1104>>>0]=e.connected;HEAP32[eventStruct+1108>>>2>>>0]=e.index;HEAP32[eventStruct+8>>>2>>>0]=e.axes.length;HEAP32[eventStruct+12>>>2>>>0]=e.buttons.length;stringToUTF8(e.id,eventStruct+1112,64);stringToUTF8(e.mapping,eventStruct+1176,64)};var registerGamepadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{JSEvents.gamepadEvent||=_malloc(1240);var gamepadEventHandlerFunc=(e=event)=>{var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e[\"gamepad\"]);if(((a1,a2,a3)=>{})(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString,callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_sample_gamepad_data=()=>{try{if(navigator.getGamepads)return(JSEvents.lastGamepadState=navigator.getGamepads())?0:-1}catch(e){navigator.getGamepads=null}return-1};_emscripten_sample_gamepad_data.sig=\"i\";function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,\"gamepadconnected\",targetThread)}_emscripten_set_gamepadconnected_callback_on_thread.sig=\"ipipp\";function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,\"gamepaddisconnected\",targetThread)}_emscripten_set_gamepaddisconnected_callback_on_thread.sig=\"ipipp\";var _emscripten_get_num_gamepads=()=>JSEvents.lastGamepadState.length;_emscripten_get_num_gamepads.sig=\"i\";function _emscripten_get_gamepad_status(index,gamepadState){gamepadState>>>=0;if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}_emscripten_get_gamepad_status.sig=\"iip\";var registerBeforeUnloadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString)=>{var beforeUnloadEventHandlerFunc=(e=event)=>{var confirmationMessage=((a1,a2,a3)=>{})(eventTypeId,0,userData);if(confirmationMessage){confirmationMessage=UTF8ToString(confirmationMessage)}if(confirmationMessage){e.preventDefault();e.returnValue=confirmationMessage;return confirmationMessage}};var eventHandler={target:findEventTarget(target),eventTypeString,callbackfunc,handlerFunc:beforeUnloadEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_beforeunload_callback_on_thread(userData,callbackfunc,targetThread){userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;if(typeof onbeforeunload==\"undefined\")return-1;if(targetThread!==1)return-5;return registerBeforeUnloadEventCallback(2,userData,true,callbackfunc,28,\"beforeunload\")}_emscripten_set_beforeunload_callback_on_thread.sig=\"ippp\";var fillBatteryEventData=(eventStruct,e)=>{HEAPF64[eventStruct>>>3>>>0]=e.chargingTime;HEAPF64[eventStruct+8>>>3>>>0]=e.dischargingTime;HEAPF64[eventStruct+16>>>3>>>0]=e.level;HEAP8[eventStruct+24>>>0]=e.charging};var battery=()=>navigator.battery||navigator.mozBattery||navigator.webkitBattery;var registerBatteryEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{JSEvents.batteryEvent||=_malloc(32);var batteryEventHandlerFunc=(e=event)=>{var batteryEvent=JSEvents.batteryEvent;fillBatteryEventData(batteryEvent,battery());if(((a1,a2,a3)=>{})(eventTypeId,batteryEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString,callbackfunc,handlerFunc:batteryEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_batterychargingchange_callback_on_thread(userData,callbackfunc,targetThread){userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;if(!battery())return-1;return registerBatteryEventCallback(battery(),userData,true,callbackfunc,29,\"chargingchange\",targetThread)}_emscripten_set_batterychargingchange_callback_on_thread.sig=\"ippp\";function _emscripten_set_batterylevelchange_callback_on_thread(userData,callbackfunc,targetThread){userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;if(!battery())return-1;return registerBatteryEventCallback(battery(),userData,true,callbackfunc,30,\"levelchange\",targetThread)}_emscripten_set_batterylevelchange_callback_on_thread.sig=\"ippp\";function _emscripten_get_battery_status(batteryState){batteryState>>>=0;if(!battery())return-1;fillBatteryEventData(batteryState,battery());return 0}_emscripten_get_battery_status.sig=\"ip\";function __emscripten_set_offscreencanvas_size(target,width,height){target>>>=0;return-1}__emscripten_set_offscreencanvas_size.sig=\"ipii\";function _emscripten_set_element_css_size(target,width,height){target>>>=0;target=findEventTarget(target);if(!target)return-4;target.style.width=width+\"px\";target.style.height=height+\"px\";return 0}_emscripten_set_element_css_size.sig=\"ipdd\";function _emscripten_get_element_css_size(target,width,height){target>>>=0;width>>>=0;height>>>=0;target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>>3>>>0]=rect.width;HEAPF64[height>>>3>>>0]=rect.height;return 0}_emscripten_get_element_css_size.sig=\"ippp\";var _emscripten_html5_remove_all_event_listeners=()=>JSEvents.removeAllEventListeners();_emscripten_html5_remove_all_event_listeners.sig=\"v\";var _emscripten_request_animation_frame=function(cb,userData){cb>>>=0;userData>>>=0;return requestAnimationFrame(timeStamp=>((a1,a2)=>{})(timeStamp,userData))};_emscripten_request_animation_frame.sig=\"ipp\";var _emscripten_cancel_animation_frame=id=>cancelAnimationFrame(id);_emscripten_cancel_animation_frame.sig=\"vi\";var _emscripten_request_animation_frame_loop=function(cb,userData){cb>>>=0;userData>>>=0;function tick(timeStamp){if(((a1,a2)=>{})(timeStamp,userData)){requestAnimationFrame(tick)}}return requestAnimationFrame(tick)};_emscripten_request_animation_frame_loop.sig=\"vpp\";var _emscripten_performance_now=()=>performance.now();_emscripten_performance_now.sig=\"d\";var _emscripten_get_device_pixel_ratio=()=>devicePixelRatio;_emscripten_get_device_pixel_ratio.sig=\"d\";function _emscripten_get_callstack(flags,str,maxbytes){str>>>=0;var callstack=getCallstack(flags);if(!str||maxbytes<=0){return lengthBytesUTF8(callstack)+1}var bytesWrittenExcludingNull=stringToUTF8(callstack,str,maxbytes);return bytesWrittenExcludingNull+1}_emscripten_get_callstack.sig=\"iipi\";var convertFrameToPC=frame=>{abort(\"Cannot use convertFrameToPC (needed by __builtin_return_address) without -sUSE_OFFSET_CONVERTER\");return 0};function _emscripten_return_address(level){var callstack=jsStackTrace().split(\"\\n\");if(callstack[0]==\"Error\"){callstack.shift()}var caller=callstack[level+3];return convertFrameToPC(caller)}_emscripten_return_address.sig=\"pi\";var UNWIND_CACHE={};var saveInUnwindCache=callstack=>{callstack.forEach(frame=>{var pc=convertFrameToPC(frame);if(pc){UNWIND_CACHE[pc]=frame}})};function _emscripten_stack_snapshot(){var callstack=jsStackTrace().split(\"\\n\");if(callstack[0]==\"Error\"){callstack.shift()}saveInUnwindCache(callstack);UNWIND_CACHE.last_addr=convertFrameToPC(callstack[3]);UNWIND_CACHE.last_stack=callstack;return UNWIND_CACHE.last_addr}_emscripten_stack_snapshot.sig=\"p\";function _emscripten_stack_unwind_buffer(addr,buffer,count){addr>>>=0;buffer>>>=0;var stack;if(UNWIND_CACHE.last_addr==addr){stack=UNWIND_CACHE.last_stack}else{stack=jsStackTrace().split(\"\\n\");if(stack[0]==\"Error\"){stack.shift()}saveInUnwindCache(stack)}var offset=3;while(stack[offset]&&convertFrameToPC(stack[offset])!=addr){++offset}for(var i=0;i>>2>>>0]=convertFrameToPC(stack[i+offset])}return i}_emscripten_stack_unwind_buffer.sig=\"ippi\";function _emscripten_pc_get_function(pc){pc>>>=0;abort(\"Cannot use emscripten_pc_get_function without -sUSE_OFFSET_CONVERTER\");return 0}_emscripten_pc_get_function.sig=\"pp\";var convertPCtoSourceLocation=pc=>{if(UNWIND_CACHE.last_get_source_pc==pc)return UNWIND_CACHE.last_source;var match;var source;if(!source){var frame=UNWIND_CACHE[pc];if(!frame)return null;if(match=/\\((.*):(\\d+):(\\d+)\\)$/.exec(frame)){source={file:match[1],line:match[2],column:match[3]}}else if(match=/@(.*):(\\d+):(\\d+)/.exec(frame)){source={file:match[1],line:match[2],column:match[3]}}}UNWIND_CACHE.last_get_source_pc=pc;UNWIND_CACHE.last_source=source;return source};function _emscripten_pc_get_file(pc){pc>>>=0;var result=convertPCtoSourceLocation(pc);if(!result)return 0;if(_emscripten_pc_get_file.ret)_free(_emscripten_pc_get_file.ret);_emscripten_pc_get_file.ret=stringToNewUTF8(result.file);return _emscripten_pc_get_file.ret}_emscripten_pc_get_file.sig=\"pp\";function _emscripten_pc_get_line(pc){pc>>>=0;var result=convertPCtoSourceLocation(pc);return result?result.line:0}_emscripten_pc_get_line.sig=\"ip\";function _emscripten_pc_get_column(pc){pc>>>=0;var result=convertPCtoSourceLocation(pc);return result?result.column||0:0}_emscripten_pc_get_column.sig=\"ip\";var _sched_yield=()=>0;Module[\"_sched_yield\"]=_sched_yield;_sched_yield.sig=\"i\";function _random_get(buf,buf_len){buf>>>=0;buf_len>>>=0;try{_getentropy(buf,buf_len);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}_random_get.sig=\"ipp\";var checkWasiClock=clock_id=>clock_id==0||clock_id==1||clock_id==2||clock_id==3;function _clock_time_get(clk_id,ignored_precision_low,ignored_precision_high,ptime){var ignored_precision=convertI32PairToI53Checked(ignored_precision_low,ignored_precision_high);ptime>>>=0;if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=Date.now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP32[ptime>>>2>>>0]=nsec>>>0;HEAP32[ptime+4>>>2>>>0]=nsec/Math.pow(2,32)>>>0;return 0}_clock_time_get.sig=\"iiiip\";function _clock_res_get(clk_id,pres){pres>>>=0;if(!checkWasiClock(clk_id)){return 28}var nsec;if(clk_id===0){nsec=1e3*1e3}else if(nowIsMonotonic){nsec=_emscripten_get_now_res()}else{return 52}HEAP32[pres>>>2>>>0]=nsec>>>0;HEAP32[pres+4>>>2>>>0]=nsec/Math.pow(2,32)>>>0;return 0}_clock_res_get.sig=\"iip\";var wasiRightsToMuslOFlags=rights=>{if(rights&2&&rights&64){return 2}if(rights&2){return 0}if(rights&64){return 1}throw new FS.ErrnoError(28)};var wasiOFlagsToMuslOFlags=oflags=>{var musl_oflags=0;if(oflags&1){musl_oflags|=64}if(oflags&8){musl_oflags|=512}if(oflags&2){musl_oflags|=65536}if(oflags&4){musl_oflags|=128}return musl_oflags};var _emscripten_unwind_to_js_event_loop=()=>{throw\"unwind\"};_emscripten_unwind_to_js_event_loop.sig=\"v\";var safeSetTimeout=(func,timeout)=>{runtimeKeepalivePush();return setTimeout(()=>{runtimeKeepalivePop();callUserCallback(func)},timeout)};var setImmediateWrapped=func=>{setImmediateWrapped.mapping||=[];var id=setImmediateWrapped.mapping.length;setImmediateWrapped.mapping[id]=setImmediate(()=>{setImmediateWrapped.mapping[id]=undefined;func()});return id};var clearImmediateWrapped=id=>{clearImmediate(setImmediateWrapped.mapping[id]);setImmediateWrapped.mapping[id]=undefined};var polyfillSetImmediate=()=>{};var _emscripten_set_immediate=function(cb,userData){cb>>>=0;userData>>>=0;runtimeKeepalivePush();return emSetImmediate(()=>{runtimeKeepalivePop();callUserCallback(()=>(a1=>{})(userData))})};_emscripten_set_immediate.sig=\"ipp\";var _emscripten_clear_immediate=id=>{runtimeKeepalivePop();emClearImmediate(id)};_emscripten_clear_immediate.sig=\"vi\";var _emscripten_set_immediate_loop=function(cb,userData){cb>>>=0;userData>>>=0;function tick(){callUserCallback(()=>{if((a1=>{})(userData)){emSetImmediate(tick)}else{runtimeKeepalivePop()}})}runtimeKeepalivePush();emSetImmediate(tick)};_emscripten_set_immediate_loop.sig=\"vpp\";var _emscripten_set_timeout=function(cb,msecs,userData){cb>>>=0;userData>>>=0;return safeSetTimeout(()=>(a1=>{})(userData),msecs)};_emscripten_set_timeout.sig=\"ipdp\";var _emscripten_clear_timeout=clearTimeout;_emscripten_clear_timeout.sig=\"vi\";var _emscripten_set_timeout_loop=function(cb,msecs,userData){cb>>>=0;userData>>>=0;function tick(){var t=_emscripten_get_now();var n=t+msecs;runtimeKeepalivePop();callUserCallback(()=>{if(((a1,a2)=>{})(t,userData)){runtimeKeepalivePush();setTimeout(tick,n-_emscripten_get_now())}})}runtimeKeepalivePush();return setTimeout(tick,0)};_emscripten_set_timeout_loop.sig=\"vpdp\";var _emscripten_set_interval=function(cb,msecs,userData){cb>>>=0;userData>>>=0;runtimeKeepalivePush();return setInterval(()=>{callUserCallback(()=>(a1=>{})(userData))},msecs)};_emscripten_set_interval.sig=\"ipdp\";var _emscripten_clear_interval=id=>{runtimeKeepalivePop();clearInterval(id)};_emscripten_clear_interval.sig=\"vi\";var idsToPromises=(idBuf,size)=>{var promises=[];for(var i=0;i>>2>>>0];promises[i]=getPromise(id)}return promises};var makePromiseCallback=(callback,userData)=>value=>{runtimeKeepalivePop();var stack=stackSave();var resultPtr=stackAlloc(POINTER_SIZE);HEAPU32[resultPtr>>>2>>>0]=0;try{var result=((a1,a2,a3)=>{})(resultPtr,userData,value);var resultVal=HEAPU32[resultPtr>>>2>>>0]}catch(e){if(typeof e!=\"number\"){throw 0}throw e}finally{stackRestore(stack)}switch(result){case 0:return resultVal;case 1:return getPromise(resultVal);case 2:var ret=getPromise(resultVal);_emscripten_promise_destroy(resultVal);return ret;case 3:throw resultVal}};function _emscripten_promise_then(id,onFulfilled,onRejected,userData){id>>>=0;onFulfilled>>>=0;onRejected>>>=0;userData>>>=0;runtimeKeepalivePush();var promise=getPromise(id);var newId=promiseMap.allocate({promise:promise.then(makePromiseCallback(onFulfilled,userData),makePromiseCallback(onRejected,userData))});return newId}_emscripten_promise_then.sig=\"ppppp\";var _emscripten_promise_all=function(idBuf,resultBuf,size){idBuf>>>=0;resultBuf>>>=0;size>>>=0;var promises=idsToPromises(idBuf,size);var id=promiseMap.allocate({promise:Promise.all(promises).then(results=>{if(resultBuf){for(var i=0;i>>2>>>0]=result}}return resultBuf})});return id};_emscripten_promise_all.sig=\"pppp\";var setPromiseResult=(ptr,fulfill,value)=>{var result=fulfill?0:3;HEAP32[ptr>>>2>>>0]=result;HEAPU32[ptr+4>>>2>>>0]=value};var _emscripten_promise_all_settled=function(idBuf,resultBuf,size){idBuf>>>=0;resultBuf>>>=0;size>>>=0;var promises=idsToPromises(idBuf,size);var id=promiseMap.allocate({promise:Promise.allSettled(promises).then(results=>{if(resultBuf){var offset=resultBuf;for(var i=0;i>>=0;errorBuf>>>=0;size>>>=0;var promises=idsToPromises(idBuf,size);var id=promiseMap.allocate({promise:Promise.any(promises).catch(err=>{if(errorBuf){for(var i=0;i>>2>>>0]=err.errors[i]}}throw errorBuf})});return id};_emscripten_promise_any.sig=\"pppp\";function _emscripten_promise_race(idBuf,size){idBuf>>>=0;size>>>=0;var promises=idsToPromises(idBuf,size);var id=promiseMap.allocate({promise:Promise.race(promises)});return id}_emscripten_promise_race.sig=\"ppp\";var _emscripten_promise_await=function(returnValuePtr,id){returnValuePtr>>>=0;id>>>=0;return Asyncify.handleSleep(wakeUp=>{getPromise(id).then(value=>{setPromiseResult(returnValuePtr,true,value);wakeUp()},value=>{setPromiseResult(returnValuePtr,false,value);wakeUp()})})};_emscripten_promise_await.sig=\"vpp\";_emscripten_promise_await.isAsync=true;function ___resumeException(ptr){ptr>>>=0;if(!exceptionLast){exceptionLast=ptr}throw exceptionLast}___resumeException.sig=\"vp\";var findMatchingCatch=args=>{var thrown=exceptionLast;if(!thrown){setTempRet0(0);return 0}var info=new ExceptionInfo(thrown);info.set_adjusted_ptr(thrown);var thrownType=info.get_type();if(!thrownType){setTempRet0(0);return thrown}for(var caughtType of args){if(caughtType===0||caughtType===thrownType){break}var adjusted_ptr_addr=info.ptr+16;if(___cxa_can_catch(caughtType,thrownType,adjusted_ptr_addr)){setTempRet0(caughtType);return thrown}}setTempRet0(thrownType);return thrown};function ___cxa_find_matching_catch_2(){return findMatchingCatch([])}___cxa_find_matching_catch_2.sig=\"p\";function ___cxa_find_matching_catch_3(arg0){arg0>>>=0;return findMatchingCatch([arg0])}___cxa_find_matching_catch_3.sig=\"pp\";function ___cxa_find_matching_catch_4(arg0,arg1){arg0>>>=0;arg1>>>=0;return findMatchingCatch([arg0,arg1])}___cxa_find_matching_catch_4.sig=\"ppp\";var exceptionCaught=[];var ___cxa_rethrow=()=>{var info=exceptionCaught.pop();if(!info){abort(\"no exception to throw\")}var ptr=info.excPtr;if(!info.get_rethrown()){exceptionCaught.push(info);info.set_rethrown(true);info.set_caught(false);uncaughtExceptionCount++}exceptionLast=ptr;throw exceptionLast};___cxa_rethrow.sig=\"v\";function _llvm_eh_typeid_for(type){type>>>=0;return type}_llvm_eh_typeid_for.sig=\"vp\";function ___cxa_begin_catch(ptr){ptr>>>=0;var info=new ExceptionInfo(ptr);if(!info.get_caught()){info.set_caught(true);uncaughtExceptionCount--}info.set_rethrown(false);exceptionCaught.push(info);___cxa_increment_exception_refcount(ptr);return ___cxa_get_exception_ptr(ptr)}___cxa_begin_catch.sig=\"pp\";var ___cxa_end_catch=()=>{_setThrew(0,0);var info=exceptionCaught.pop();___cxa_decrement_exception_refcount(info.excPtr);exceptionLast=0};___cxa_end_catch.sig=\"v\";var ___cxa_uncaught_exceptions=()=>uncaughtExceptionCount;Module[\"___cxa_uncaught_exceptions\"]=___cxa_uncaught_exceptions;___cxa_uncaught_exceptions.sig=\"i\";function ___cxa_call_unexpected(exception){exception>>>=0;return abort(\"Unexpected exception thrown, this is not properly supported - aborting\")}___cxa_call_unexpected.sig=\"vp\";function ___cxa_current_primary_exception(){if(!exceptionCaught.length){return 0}var info=exceptionCaught[exceptionCaught.length-1];___cxa_increment_exception_refcount(info.excPtr);return info.excPtr}Module[\"___cxa_current_primary_exception\"]=___cxa_current_primary_exception;___cxa_current_primary_exception.sig=\"p\";function ___cxa_rethrow_primary_exception(ptr){ptr>>>=0;if(!ptr)return;var info=new ExceptionInfo(ptr);exceptionCaught.push(info);info.set_rethrown(true);___cxa_rethrow()}Module[\"___cxa_rethrow_primary_exception\"]=___cxa_rethrow_primary_exception;___cxa_rethrow_primary_exception.sig=\"vp\";var _emscripten_set_main_loop_timing=(mode,value)=>{Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(!Browser.mainLoop.running){runtimeKeepalivePush();Browser.mainLoop.running=true}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method=\"timeout\"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method=\"rAF\"}else if(mode==2){if(typeof Browser.setImmediate==\"undefined\"){if(typeof setImmediate==\"undefined\"){var setImmediates=[];var emscriptenMainLoopMessageId=\"setimmediate\";var Browser_setImmediate_messageHandler=event=>{if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener(\"message\",Browser_setImmediate_messageHandler,true);Browser.setImmediate=func=>{setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){Module[\"setImmediates\"]??=[];Module[\"setImmediates\"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,\"*\")}}else{Browser.setImmediate=setImmediate}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){Browser.setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method=\"immediate\"}return 0};_emscripten_set_main_loop_timing.sig=\"iii\";var setMainLoop=(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming)=>{Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}Browser.mainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(Browser.mainLoop.runner,0);return}if(!checkIsRunning())return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}Browser.mainLoop.runIter(browserIterationFunc);if(!checkIsRunning())return;if(typeof SDL==\"object\")SDL.audio?.queueNewAudioData?.();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0){_emscripten_set_main_loop_timing(0,1e3/fps)}else{_emscripten_set_main_loop_timing(1,1)}Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw\"unwind\"}};var Browser={mainLoop:{running:false,scheduler:null,method:\"\",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;setMainLoop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus(){if(Module[\"setStatus\"]){var message=Module[\"statusMessage\"]||\"Please wait...\";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining{var canvas=document.createElement(\"canvas\");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext(\"2d\");ctx.drawImage(img,0,0);preloadedImages[name]=canvas;URL.revokeObjectURL(url);onload?.(byteArray)};img.onerror=event=>{err(`Image ${url} could not be decoded`);onerror?.()};img.src=url};preloadPlugins.push(imagePlugin);var audioPlugin={};audioPlugin[\"canHandle\"]=function audioPlugin_canHandle(name){return!Module[\"noAudioDecoding\"]&&name.substr(-4)in{\".ogg\":1,\".wav\":1,\".mp3\":1}};audioPlugin[\"handle\"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;preloadedAudios[name]=audio;onload?.(byteArray)}function fail(){if(done)return;done=true;preloadedAudios[name]=new Audio;onerror?.()}var b=new Blob([byteArray],{type:Browser.getMimetype(name)});var url=URL.createObjectURL(b);var audio=new Audio;audio.addEventListener(\"canplaythrough\",()=>finish(audio),false);audio.onerror=function audio_onerror(event){if(done)return;err(`warning: browser could not fully decode audio ${name}, trying slower base64 approach`);function encode64(data){var BASE=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";var PAD=\"=\";var ret=\"\";var leftchar=0;var leftbits=0;for(var i=0;i=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src=\"data:audio/x-\"+name.substr(-3)+\";base64,\"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(()=>{finish(audio)},1e4)};preloadPlugins.push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document[\"pointerLockElement\"]===Module[\"canvas\"]||document[\"mozPointerLockElement\"]===Module[\"canvas\"]||document[\"webkitPointerLockElement\"]===Module[\"canvas\"]||document[\"msPointerLockElement\"]===Module[\"canvas\"]}var canvas=Module[\"canvas\"];if(canvas){canvas.requestPointerLock=canvas[\"requestPointerLock\"]||canvas[\"mozRequestPointerLock\"]||canvas[\"webkitRequestPointerLock\"]||canvas[\"msRequestPointerLock\"]||(()=>{});canvas.exitPointerLock=document[\"exitPointerLock\"]||document[\"mozExitPointerLock\"]||document[\"webkitExitPointerLock\"]||document[\"msExitPointerLock\"]||(()=>{});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener(\"pointerlockchange\",pointerLockChange,false);document.addEventListener(\"mozpointerlockchange\",pointerLockChange,false);document.addEventListener(\"webkitpointerlockchange\",pointerLockChange,false);document.addEventListener(\"mspointerlockchange\",pointerLockChange,false);if(Module[\"elementPointerLock\"]){canvas.addEventListener(\"click\",ev=>{if(!Browser.pointerLock&&Module[\"canvas\"].requestPointerLock){Module[\"canvas\"].requestPointerLock();ev.preventDefault()}},false)}}},createContext(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=\"undefined\"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext(\"2d\")}if(!ctx)return null;if(setInModule){Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Browser.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==\"undefined\")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==\"undefined\")Browser.resizeCanvas=false;var canvas=Module[\"canvas\"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document[\"fullscreenElement\"]||document[\"mozFullScreenElement\"]||document[\"msFullscreenElement\"]||document[\"webkitFullscreenElement\"]||document[\"webkitCurrentFullScreenElement\"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}Module[\"onFullScreen\"]?.(Browser.isFullscreen);Module[\"onFullscreen\"]?.(Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener(\"fullscreenchange\",fullscreenChange,false);document.addEventListener(\"mozfullscreenchange\",fullscreenChange,false);document.addEventListener(\"webkitfullscreenchange\",fullscreenChange,false);document.addEventListener(\"MSFullscreenChange\",fullscreenChange,false)}var canvasContainer=document.createElement(\"div\");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer[\"requestFullscreen\"]||canvasContainer[\"mozRequestFullScreen\"]||canvasContainer[\"msRequestFullscreen\"]||(canvasContainer[\"webkitRequestFullscreen\"]?()=>canvasContainer[\"webkitRequestFullscreen\"](Element[\"ALLOW_KEYBOARD_INPUT\"]):null)||(canvasContainer[\"webkitRequestFullScreen\"]?()=>canvasContainer[\"webkitRequestFullScreen\"](Element[\"ALLOW_KEYBOARD_INPUT\"]):null);canvasContainer.requestFullscreen()},exitFullscreen(){if(!Browser.isFullscreen){return false}var CFS=document[\"exitFullscreen\"]||document[\"cancelFullScreen\"]||document[\"mozCancelFullScreen\"]||document[\"msExitFullscreen\"]||document[\"webkitCancelFullScreen\"]||(()=>{});CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame(func){if(typeof requestAnimationFrame==\"function\"){requestAnimationFrame(func);return}var RAF=Browser.fakeRequestAnimationFrame;RAF(func)},safeSetTimeout(func,timeout){return safeSetTimeout(func,timeout)},safeRequestAnimationFrame(func){runtimeKeepalivePush();return Browser.requestAnimationFrame(()=>{runtimeKeepalivePop();callUserCallback(func)})},getMimetype(name){return{jpg:\"image/jpeg\",jpeg:\"image/jpeg\",png:\"image/png\",bmp:\"image/bmp\",ogg:\"audio/ogg\",wav:\"audio/wav\",mp3:\"audio/mpeg\"}[name.substr(name.lastIndexOf(\".\")+1)]},getUserMedia(func){window.getUserMedia||=navigator[\"getUserMedia\"]||navigator[\"mozGetUserMedia\"];window.getUserMedia(func)},getMovementX(event){return event[\"movementX\"]||event[\"mozMovementX\"]||event[\"webkitMovementX\"]||0},getMovementY(event){return event[\"movementY\"]||event[\"mozMovementY\"]||event[\"webkitMovementY\"]||0},getMouseWheelDelta(event){var delta=0;switch(event.type){case\"DOMMouseScroll\":delta=event.detail/3;break;case\"mousewheel\":delta=event.wheelDelta/120;break;case\"wheel\":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw\"unrecognized mouse wheel delta mode: \"+event.deltaMode}break;default:throw\"unrecognized mouse wheel event: \"+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseCoords(pageX,pageY){var rect=Module[\"canvas\"].getBoundingClientRect();var cw=Module[\"canvas\"].width;var ch=Module[\"canvas\"].height;var scrollX=typeof window.scrollX!=\"undefined\"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=\"undefined\"?window.scrollY:window.pageYOffset;var adjustedX=pageX-(scrollX+rect.left);var adjustedY=pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);return{x:adjustedX,y:adjustedY}},setMouseCoords(pageX,pageY){const{x,y}=Browser.calculateMouseCoords(pageX,pageY);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y},calculateMouseEvent(event){if(Browser.pointerLock){if(event.type!=\"mousemove\"&&\"mozMovementX\"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}else{if(event.type===\"touchstart\"||event.type===\"touchend\"||event.type===\"touchmove\"){var touch=event.touch;if(touch===undefined){return}var coords=Browser.calculateMouseCoords(touch.pageX,touch.pageY);if(event.type===\"touchstart\"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type===\"touchend\"||event.type===\"touchmove\"){var last=Browser.touches[touch.identifier];last||=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}Browser.setMouseCoords(event.pageX,event.pageY)}},resizeListeners:[],updateResizeListeners(){var canvas=Module[\"canvas\"];Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize(width,height,noUpdates){var canvas=Module[\"canvas\"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize(){if(typeof SDL!=\"undefined\"){var flags=HEAPU32[SDL.screen>>>2>>>0];flags=flags|8388608;HEAP32[SDL.screen>>>2>>>0]=flags}Browser.updateCanvasDimensions(Module[\"canvas\"]);Browser.updateResizeListeners()},setWindowedCanvasSize(){if(typeof SDL!=\"undefined\"){var flags=HEAPU32[SDL.screen>>>2>>>0];flags=flags&~8388608;HEAP32[SDL.screen>>>2>>>0]=flags}Browser.updateCanvasDimensions(Module[\"canvas\"]);Browser.updateResizeListeners()},updateCanvasDimensions(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module[\"forcedAspectRatio\"]&&Module[\"forcedAspectRatio\"]>0){if(w/h>>=0;onload>>>=0;onerror>>>=0;runtimeKeepalivePush();var _file=UTF8ToString(file);var data=FS.analyzePath(_file);if(!data.exists)return-1;FS.createPreloadedFile(PATH.dirname(_file),PATH.basename(_file),new Uint8Array(data.object.contents),true,true,()=>{runtimeKeepalivePop();if(onload)(a1=>{})(file)},()=>{runtimeKeepalivePop();if(onerror)(a1=>{})(file)},true);return 0};_emscripten_run_preload_plugins.sig=\"ippp\";var Browser_asyncPrepareDataCounter=0;var _emscripten_run_preload_plugins_data=function(data,size,suffix,arg,onload,onerror){data>>>=0;suffix>>>=0;arg>>>=0;onload>>>=0;onerror>>>=0;runtimeKeepalivePush();var _suffix=UTF8ToString(suffix);var name=\"prepare_data_\"+Browser_asyncPrepareDataCounter+++\".\"+_suffix;var cname=stringToNewUTF8(name);FS.createPreloadedFile(\"/\",name,HEAPU8.subarray(data>>>0,data+size>>>0),true,true,()=>{runtimeKeepalivePop();if(onload)((a1,a2)=>{})(arg,cname)},()=>{runtimeKeepalivePop();if(onerror)(a1=>{})(arg)},true)};_emscripten_run_preload_plugins_data.sig=\"vpipppp\";var _emscripten_async_run_script=function(script,millis){script>>>=0;safeSetTimeout(()=>_emscripten_run_script(script),millis)};_emscripten_async_run_script.sig=\"vpi\";var _emscripten_async_load_script=function(url,onload,onerror){url>>>=0;onload>>>=0;onerror>>>=0;url=UTF8ToString(url);runtimeKeepalivePush();var loadDone=()=>{runtimeKeepalivePop();if(onload){var onloadCallback=()=>callUserCallback(()=>{});if(runDependencies>0){dependenciesFulfilled=onloadCallback}else{onloadCallback()}}};var loadError=()=>{runtimeKeepalivePop();if(onerror){callUserCallback(()=>{})}};var script=document.createElement(\"script\");script.onload=loadDone;script.onerror=loadError;script.src=url;document.body.appendChild(script)};_emscripten_async_load_script.sig=\"vppp\";function _emscripten_get_main_loop_timing(mode,value){mode>>>=0;value>>>=0;if(mode)HEAP32[mode>>>2>>>0]=Browser.mainLoop.timingMode;if(value)HEAP32[value>>>2>>>0]=Browser.mainLoop.timingValue}_emscripten_get_main_loop_timing.sig=\"vpp\";var _emscripten_set_main_loop=function(func,fps,simulateInfiniteLoop){func>>>=0;var browserIterationFunc=()=>{};setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)};_emscripten_set_main_loop.sig=\"vpii\";var _emscripten_set_main_loop_arg=function(func,arg,fps,simulateInfiniteLoop){func>>>=0;arg>>>=0;var browserIterationFunc=()=>(a1=>{})(arg);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg)};_emscripten_set_main_loop_arg.sig=\"vppii\";var _emscripten_cancel_main_loop=()=>{Browser.mainLoop.pause();Browser.mainLoop.func=null};_emscripten_cancel_main_loop.sig=\"v\";var _emscripten_pause_main_loop=()=>{Browser.mainLoop.pause()};_emscripten_pause_main_loop.sig=\"v\";var _emscripten_resume_main_loop=()=>{Browser.mainLoop.resume()};_emscripten_resume_main_loop.sig=\"v\";var __emscripten_push_main_loop_blocker=function(func,arg,name){func>>>=0;arg>>>=0;name>>>=0;Browser.mainLoop.queue.push({func:()=>{(a1=>{})(arg)},name:UTF8ToString(name),counted:true});Browser.mainLoop.updateStatus()};__emscripten_push_main_loop_blocker.sig=\"vppp\";var __emscripten_push_uncounted_main_loop_blocker=function(func,arg,name){func>>>=0;arg>>>=0;name>>>=0;Browser.mainLoop.queue.push({func:()=>{(a1=>{})(arg)},name:UTF8ToString(name),counted:false});Browser.mainLoop.updateStatus()};__emscripten_push_uncounted_main_loop_blocker.sig=\"vppp\";var _emscripten_set_main_loop_expected_blockers=num=>{Browser.mainLoop.expectedBlockers=num;Browser.mainLoop.remainingBlockers=num;Browser.mainLoop.updateStatus()};_emscripten_set_main_loop_expected_blockers.sig=\"vi\";var _emscripten_async_call=function(func,arg,millis){func>>>=0;arg>>>=0;function wrapper(){(a1=>{})(arg)}if(millis>=0){safeSetTimeout(wrapper,millis)}else{Browser.safeRequestAnimationFrame(wrapper)}};_emscripten_async_call.sig=\"vppi\";function _emscripten_get_window_title(){var buflen=256;if(!_emscripten_get_window_title.buffer){_emscripten_get_window_title.buffer=_malloc(buflen)}stringToUTF8(document.title,_emscripten_get_window_title.buffer,buflen);return _emscripten_get_window_title.buffer}_emscripten_get_window_title.sig=\"p\";function _emscripten_set_window_title(title){title>>>=0;return document.title=UTF8ToString(title)}_emscripten_set_window_title.sig=\"vp\";function _emscripten_get_screen_size(width,height){width>>>=0;height>>>=0;HEAP32[width>>>2>>>0]=screen.width;HEAP32[height>>>2>>>0]=screen.height}_emscripten_get_screen_size.sig=\"vpp\";var _emscripten_hide_mouse=()=>{var styleSheet=document.styleSheets[0];var rules=styleSheet.cssRules;for(var i=0;i{Browser.setCanvasSize(width,height)};_emscripten_set_canvas_size.sig=\"vii\";function _emscripten_get_canvas_size(width,height,isFullscreen){width>>>=0;height>>>=0;isFullscreen>>>=0;var canvas=Module[\"canvas\"];HEAP32[width>>>2>>>0]=canvas.width;HEAP32[height>>>2>>>0]=canvas.height;HEAP32[isFullscreen>>>2>>>0]=Browser.isFullscreen?1:0}_emscripten_get_canvas_size.sig=\"vppp\";function _emscripten_create_worker(url){url>>>=0;url=UTF8ToString(url);var id=Browser.workers.length;var info={worker:new Worker(url),callbacks:[],awaited:0,buffer:0,bufferSize:0};info.worker.onmessage=function info_worker_onmessage(msg){if(ABORT)return;var info=Browser.workers[id];if(!info)return;var callbackId=msg.data[\"callbackId\"];var callbackInfo=info.callbacks[callbackId];if(!callbackInfo)return;if(msg.data[\"finalResponse\"]){info.awaited--;info.callbacks[callbackId]=null;runtimeKeepalivePop()}var data=msg.data[\"data\"];if(data){if(!data.byteLength)data=new Uint8Array(data);if(!info.buffer||info.bufferSize>>0);callbackInfo.func(info.buffer,data.length,callbackInfo.arg)}else{callbackInfo.func(0,0,callbackInfo.arg)}};Browser.workers.push(info);return id}_emscripten_create_worker.sig=\"ip\";var _emscripten_destroy_worker=id=>{var info=Browser.workers[id];info.worker.terminate();if(info.buffer)_free(info.buffer);Browser.workers[id]=null};_emscripten_destroy_worker.sig=\"vi\";var _emscripten_call_worker=function(id,funcName,data,size,callback,arg){funcName>>>=0;data>>>=0;callback>>>=0;arg>>>=0;funcName=UTF8ToString(funcName);var info=Browser.workers[id];var callbackId=-1;if(callback){runtimeKeepalivePush();callbackId=info.callbacks.length;info.callbacks.push({func:(a1,a2,a3)=>{},arg});info.awaited++}var transferObject={funcName,callbackId,data:data?new Uint8Array(HEAPU8.subarray(data>>>0,data+size>>>0)):0};if(data){info.worker.postMessage(transferObject,[transferObject.data.buffer])}else{info.worker.postMessage(transferObject)}};_emscripten_call_worker.sig=\"vippipp\";var _emscripten_get_worker_queue_size=id=>{var info=Browser.workers[id];if(!info)return-1;return info.awaited};_emscripten_get_worker_queue_size.sig=\"ii\";var getPreloadedImageData=(path,w,h)=>{path=PATH_FS.resolve(path);var canvas=preloadedImages[path];if(!canvas)return 0;var ctx=canvas.getContext(\"2d\");var image=ctx.getImageData(0,0,canvas.width,canvas.height);var buf=_malloc(canvas.width*canvas.height*4);HEAPU8.set(image.data,buf>>>0);HEAP32[w>>>2>>>0]=canvas.width;HEAP32[h>>>2>>>0]=canvas.height;return buf};function _emscripten_get_preloaded_image_data(path,w,h){path>>>=0;w>>>=0;h>>>=0;return getPreloadedImageData(UTF8ToString(path),w,h)}_emscripten_get_preloaded_image_data.sig=\"pppp\";var getPreloadedImageData__data=[\"$PATH_FS\",\"malloc\"];function _emscripten_get_preloaded_image_data_from_FILE(file,w,h){file>>>=0;w>>>=0;h>>>=0;var fd=_fileno(file);var stream=FS.getStream(fd);if(stream){return getPreloadedImageData(stream.path,w,h)}return 0}_emscripten_get_preloaded_image_data_from_FILE.sig=\"pppp\";var wget={wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle(){var handle=wget.nextWgetRequestHandle;wget.nextWgetRequestHandle++;return handle}};var FS_mkdirTree=(path,mode)=>FS.mkdirTree(path,mode);var _emscripten_async_wget=function(url,file,onload,onerror){url>>>=0;file>>>=0;onload>>>=0;onerror>>>=0;runtimeKeepalivePush();var _url=UTF8ToString(url);var _file=UTF8ToString(file);_file=PATH_FS.resolve(_file);function doCallback(callback){if(callback){runtimeKeepalivePop();callUserCallback(()=>{var sp=stackSave();(a1=>{})(stringToUTF8OnStack(_file));stackRestore(sp)})}}var destinationDirectory=PATH.dirname(_file);FS_createPreloadedFile(destinationDirectory,PATH.basename(_file),_url,true,true,()=>doCallback(onload),()=>doCallback(onerror),false,false,()=>{try{FS_unlink(_file)}catch(e){}FS_mkdirTree(destinationDirectory)})};_emscripten_async_wget.sig=\"vpppp\";var _emscripten_async_wget_data=function(url,userdata,onload,onerror){url>>>=0;userdata>>>=0;onload>>>=0;onerror>>>=0;runtimeKeepalivePush();asyncLoad(UTF8ToString(url),byteArray=>{runtimeKeepalivePop();callUserCallback(()=>{var buffer=_malloc(byteArray.length);HEAPU8.set(byteArray,buffer>>>0);((a1,a2,a3)=>{})(userdata,buffer,byteArray.length);_free(buffer)})},()=>{if(onerror){runtimeKeepalivePop();callUserCallback(()=>{(a1=>{})(userdata)})}},true)};_emscripten_async_wget_data.sig=\"vpppp\";var _emscripten_async_wget2=function(url,file,request,param,userdata,onload,onerror,onprogress){url>>>=0;file>>>=0;request>>>=0;param>>>=0;userdata>>>=0;onload>>>=0;onerror>>>=0;onprogress>>>=0;runtimeKeepalivePush();var _url=UTF8ToString(url);var _file=UTF8ToString(file);_file=PATH_FS.resolve(_file);var _request=UTF8ToString(request);var _param=UTF8ToString(param);var index=_file.lastIndexOf(\"/\");var http=new XMLHttpRequest;http.open(_request,_url,true);http.responseType=\"arraybuffer\";var handle=wget.getNextWgetRequestHandle();var destinationDirectory=PATH.dirname(_file);http.onload=e=>{runtimeKeepalivePop();if(http.status>=200&&http.status<300){try{FS.unlink(_file)}catch(e){}FS.mkdirTree(destinationDirectory);FS.createDataFile(_file.substr(0,index),_file.substr(index+1),new Uint8Array(http.response),true,true,false);if(onload){var sp=stackSave();((a1,a2,a3)=>{})(handle,userdata,stringToUTF8OnStack(_file));stackRestore(sp)}}else{if(onerror)((a1,a2,a3)=>{})(handle,userdata,http.status)}delete wget.wgetRequests[handle]};http.onerror=e=>{runtimeKeepalivePop();if(onerror)((a1,a2,a3)=>{})(handle,userdata,http.status);delete wget.wgetRequests[handle]};http.onprogress=e=>{if(e.lengthComputable||e.lengthComputable===undefined&&e.total!=0){var percentComplete=e.loaded/e.total*100;if(onprogress)((a1,a2,a3)=>{})(handle,userdata,percentComplete)}};http.onabort=e=>{runtimeKeepalivePop();delete wget.wgetRequests[handle]};if(_request==\"POST\"){http.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded\");http.send(_param)}else{http.send(null)}wget.wgetRequests[handle]=http;return handle};_emscripten_async_wget2.sig=\"ipppppppp\";function _emscripten_async_wget2_data(url,request,param,userdata,free,onload,onerror,onprogress){url>>>=0;request>>>=0;param>>>=0;userdata>>>=0;onload>>>=0;onerror>>>=0;onprogress>>>=0;var _url=UTF8ToString(url);var _request=UTF8ToString(request);var _param=UTF8ToString(param);var http=new XMLHttpRequest;http.open(_request,_url,true);http.responseType=\"arraybuffer\";var handle=wget.getNextWgetRequestHandle();function onerrorjs(){if(onerror){var sp=stackSave();var statusText=0;if(http.statusText){statusText=stringToUTF8OnStack(http.statusText)}((a1,a2,a3,a4)=>{})(handle,userdata,http.status,statusText);stackRestore(sp)}}http.onload=e=>{if(http.status>=200&&http.status<300||http.status===0&&_url.substr(0,4).toLowerCase()!=\"http\"){var byteArray=new Uint8Array(http.response);var buffer=_malloc(byteArray.length);HEAPU8.set(byteArray,buffer>>>0);if(onload)((a1,a2,a3,a4)=>{})(handle,userdata,buffer,byteArray.length);if(free)_free(buffer)}else{onerrorjs()}delete wget.wgetRequests[handle]};http.onerror=e=>{onerrorjs();delete wget.wgetRequests[handle]};http.onprogress=e=>{if(onprogress)((a1,a2,a3,a4)=>{})(handle,userdata,e.loaded,e.lengthComputable||e.lengthComputable===undefined?e.total:0)};http.onabort=e=>{delete wget.wgetRequests[handle]};if(_request==\"POST\"){http.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded\");http.send(_param)}else{http.send(null)}wget.wgetRequests[handle]=http;return handle}_emscripten_async_wget2_data.sig=\"ippppippp\";var _emscripten_async_wget2_abort=handle=>{var http=wget.wgetRequests[handle];http?.abort()};_emscripten_async_wget2_abort.sig=\"vi\";function ___asctime_r(tmPtr,buf){tmPtr>>>=0;buf>>>=0;var date={tm_sec:HEAP32[tmPtr>>>2>>>0],tm_min:HEAP32[tmPtr+4>>>2>>>0],tm_hour:HEAP32[tmPtr+8>>>2>>>0],tm_mday:HEAP32[tmPtr+12>>>2>>>0],tm_mon:HEAP32[tmPtr+16>>>2>>>0],tm_year:HEAP32[tmPtr+20>>>2>>>0],tm_wday:HEAP32[tmPtr+24>>>2>>>0]};var days=[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"];var months=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];var s=days[date.tm_wday]+\" \"+months[date.tm_mon]+(date.tm_mday<10?\" \":\" \")+date.tm_mday+(date.tm_hour<10?\" 0\":\" \")+date.tm_hour+(date.tm_min<10?\":0\":\":\")+date.tm_min+(date.tm_sec<10?\":0\":\":\")+date.tm_sec+\" \"+(1900+date.tm_year)+\"\\n\";stringToUTF8(s,buf,26);return buf}___asctime_r.sig=\"ppp\";function _strptime_l(buf,format,tm,locale){buf>>>=0;format>>>=0;tm>>>=0;locale>>>=0;return _strptime(buf,format,tm)}_strptime_l.sig=\"ppppp\";function ___syscall_shutdown(fd,how){try{getSocketFromFD(fd);return-52}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}Module[\"___syscall_shutdown\"]=___syscall_shutdown;___syscall_shutdown.sig=\"iiiiiii\";function __dlsym_catchup_js(handle,symbolIndex){handle>>>=0;var lib=LDSO.loadedLibsByHandle[handle];var symDict=lib.exports;var symName=Object.keys(symDict)[symbolIndex];var sym=symDict[symName];var result=addFunction(sym,sym.sig);return result}__dlsym_catchup_js.sig=\"ppi\";var FS_readFile=FS.readFile;var _setNetworkCallback=(event,userData,callback)=>{function _callback(data){try{if(event===\"error\"){var sp=stackSave();var msg=stringToUTF8OnStack(data[2]);((a1,a2,a3,a4)=>{})(data[0],data[1],msg,userData);stackRestore(sp)}else{((a1,a2)=>{})(data,userData)}}catch(e){if(!(e instanceof ExitStatus)){if(e&&typeof e==\"object\"&&e.stack)err(\"exception thrown: \"+[e,e.stack]);throw e}}}runtimeKeepalivePush();Module[\"websocket\"][\"on\"](event,callback?_callback:null)};function _emscripten_set_socket_error_callback(userData,callback){userData>>>=0;callback>>>=0;_setNetworkCallback(\"error\",userData,callback)}_emscripten_set_socket_error_callback.sig=\"vpp\";function _emscripten_set_socket_open_callback(userData,callback){userData>>>=0;callback>>>=0;_setNetworkCallback(\"open\",userData,callback)}_emscripten_set_socket_open_callback.sig=\"vpp\";function _emscripten_set_socket_listen_callback(userData,callback){userData>>>=0;callback>>>=0;_setNetworkCallback(\"listen\",userData,callback)}_emscripten_set_socket_listen_callback.sig=\"vpp\";function _emscripten_set_socket_connection_callback(userData,callback){userData>>>=0;callback>>>=0;_setNetworkCallback(\"connection\",userData,callback)}_emscripten_set_socket_connection_callback.sig=\"vpp\";function _emscripten_set_socket_message_callback(userData,callback){userData>>>=0;callback>>>=0;_setNetworkCallback(\"message\",userData,callback)}_emscripten_set_socket_message_callback.sig=\"vpp\";function _emscripten_set_socket_close_callback(userData,callback){userData>>>=0;callback>>>=0;_setNetworkCallback(\"close\",userData,callback)}_emscripten_set_socket_close_callback.sig=\"vpp\";var _emscripten_sleep=ms=>Asyncify.handleSleep(wakeUp=>safeSetTimeout(wakeUp,ms));_emscripten_sleep.sig=\"vi\";_emscripten_sleep.isAsync=true;var _emscripten_wget_data=function(url,pbuffer,pnum,perror){url>>>=0;pbuffer>>>=0;pnum>>>=0;perror>>>=0;return Asyncify.handleSleep(wakeUp=>{asyncLoad(UTF8ToString(url),byteArray=>{var buffer=_malloc(byteArray.length);HEAPU8.set(byteArray,buffer>>>0);HEAPU32[pbuffer>>>2>>>0]=buffer;HEAP32[pnum>>>2>>>0]=byteArray.length;HEAP32[perror>>>2>>>0]=0;wakeUp()},()=>{HEAP32[perror>>>2>>>0]=1;wakeUp()},true)})};_emscripten_wget_data.sig=\"vpppp\";_emscripten_wget_data.isAsync=true;var _emscripten_scan_registers=function(func){func>>>=0;return Asyncify.handleSleep(wakeUp=>{safeSetTimeout(()=>{var stackBegin=Asyncify.currData+12;var stackEnd=HEAPU32[Asyncify.currData>>>2>>>0];((a1,a2)=>{})(stackBegin,stackEnd);wakeUp()},0)})};_emscripten_scan_registers.sig=\"vp\";_emscripten_scan_registers.isAsync=true;var _emscripten_lazy_load_code=()=>Asyncify.handleSleep(wakeUp=>{wasmBinaryFile+=\".lazy.wasm\";dependenciesFulfilled=wakeUp;createWasm()});_emscripten_lazy_load_code.sig=\"v\";_emscripten_lazy_load_code.isAsync=true;async function __load_secondary_module(){wasmExports[\"load_secondary_module_status\"].value=1;var imports={primary:wasmExports};var deferred=wasmBinaryFile.slice(0,-5)+\".deferred.wasm\";await new Promise(resolve=>{instantiateAsync(null,deferred,imports,resolve)})}__load_secondary_module.sig=\"v\";__load_secondary_module.isAsync=true;var Fibers={nextFiber:0,trampolineRunning:false,trampoline(){if(!Fibers.trampolineRunning&&Fibers.nextFiber){Fibers.trampolineRunning=true;do{var fiber=Fibers.nextFiber;Fibers.nextFiber=0;Fibers.finishContextSwitch(fiber)}while(Fibers.nextFiber);Fibers.trampolineRunning=false}},finishContextSwitch(newFiber){var stack_base=HEAPU32[newFiber>>>2>>>0];var stack_max=HEAPU32[newFiber+4>>>2>>>0];_emscripten_stack_set_limits(stack_base,stack_max);stackRestore(HEAPU32[newFiber+8>>>2>>>0]);var entryPoint=HEAPU32[newFiber+12>>>2>>>0];if(entryPoint!==0){Asyncify.currData=null;HEAPU32[newFiber+12>>>2>>>0]=0;var userData=HEAPU32[newFiber+16>>>2>>>0];(a1=>{})(userData)}else{var asyncifyData=newFiber+20;Asyncify.currData=asyncifyData;Asyncify.state=Asyncify.State.Rewinding;_asyncify_start_rewind(asyncifyData);Asyncify.doRewind(asyncifyData)}}};function _emscripten_fiber_swap(oldFiber,newFiber){oldFiber>>>=0;newFiber>>>=0;if(ABORT)return;if(Asyncify.state===Asyncify.State.Normal){Asyncify.state=Asyncify.State.Unwinding;var asyncifyData=oldFiber+20;Asyncify.setDataRewindFunc(asyncifyData);Asyncify.currData=asyncifyData;_asyncify_start_unwind(asyncifyData);var stackTop=stackSave();HEAPU32[oldFiber+8>>>2>>>0]=stackTop;Fibers.nextFiber=newFiber}else{Asyncify.state=Asyncify.State.Normal;_asyncify_stop_rewind();Asyncify.currData=null}}_emscripten_fiber_swap.sig=\"vpp\";_emscripten_fiber_swap.isAsync=true;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var allocate=(slab,allocator)=>{var ret;if(allocator==ALLOC_STACK){ret=stackAlloc(slab.length)}else{ret=_malloc(slab.length)}if(!slab.subarray&&!slab.slice){slab=new Uint8Array(slab)}HEAPU8.set(slab,ret>>>0);return ret};var writeStringToMemory=(string,buffer,dontAddNull)=>{warnOnce(\"writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!\");var lastChar,end;if(dontAddNull){end=buffer+lengthBytesUTF8(string);lastChar=HEAP8[end>>>0]}stringToUTF8(string,buffer,Infinity);if(dontAddNull)HEAP8[end>>>0]=lastChar};var writeAsciiToMemory=(str,buffer,dontAddNull)=>{for(var i=0;i>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>>0]=0};var allocateUTF8=stringToNewUTF8;var allocateUTF8OnStack=stringToUTF8OnStack;var setErrNo=value=>{HEAP32[___errno_location()>>>2>>>0]=value;return value};var demangle=func=>{demangle.recursionGuard=(demangle.recursionGuard|0)+1;if(demangle.recursionGuard>1)return func;return withStackSave(()=>{try{var s=func;if(s.startsWith(\"__Z\"))s=s.substr(1);var buf=stringToUTF8OnStack(s);var status=stackAlloc(4);var ret=___cxa_demangle(buf,0,0,status);if(HEAP32[status>>>2>>>0]===0&&ret){return UTF8ToString(ret)}}catch(e){}finally{_free(ret);if(demangle.recursionGuard<2)--demangle.recursionGuard}return func})};function stackTrace(){var js=jsStackTrace();if(Module[\"extraStackTrace\"])js+=\"\\n\"+Module[\"extraStackTrace\"]();return js}var print=out;var printErr=err;var _emscripten_is_main_browser_thread=()=>!ENVIRONMENT_IS_WORKER;registerWasmPlugin();FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();Module[\"FS_createPath\"]=FS.createPath;Module[\"FS_createDataFile\"]=FS.createDataFile;Module[\"FS_createPreloadedFile\"]=FS.createPreloadedFile;Module[\"FS_unlink\"]=FS.unlink;Module[\"FS_createLazyFile\"]=FS.createLazyFile;Module[\"FS_createDevice\"]=FS.createDevice;var emSetImmediate;var emClearImmediate;if(typeof setImmediate!=\"undefined\"){emSetImmediate=setImmediateWrapped;emClearImmediate=clearImmediateWrapped}else if(typeof addEventListener==\"function\"){var __setImmediate_id_counter=0;var __setImmediate_queue=[];var __setImmediate_message_id=\"_si\";var __setImmediate_cb=e=>{if(e.data===__setImmediate_message_id){e.stopPropagation();__setImmediate_queue.shift()();++__setImmediate_id_counter}};addEventListener(\"message\",__setImmediate_cb,true);emSetImmediate=func=>{postMessage(__setImmediate_message_id,\"*\");return __setImmediate_id_counter+__setImmediate_queue.push(func)-1};emClearImmediate=id=>{var index=id-__setImmediate_id_counter;if(index>=0&&index<__setImmediate_queue.length)__setImmediate_queue[index]=()=>{}}}Module[\"requestFullscreen\"]=Browser.requestFullscreen;Module[\"requestAnimationFrame\"]=Browser.requestAnimationFrame;Module[\"setCanvasSize\"]=Browser.setCanvasSize;Module[\"pauseMainLoop\"]=Browser.mainLoop.pause;Module[\"resumeMainLoop\"]=Browser.mainLoop.resume;Module[\"getUserMedia\"]=Browser.getUserMedia;Module[\"createContext\"]=Browser.createContext;var preloadedImages={};var preloadedAudios={};var wasmImports={UTF8ToHtml:_UTF8ToHtml,UTF8Toisolat1:_UTF8Toisolat1,_Unwind_Backtrace:__Unwind_Backtrace,_Unwind_DeleteException:__Unwind_DeleteException,_Unwind_FindEnclosingFunction:__Unwind_FindEnclosingFunction,_Unwind_GetIPInfo:__Unwind_GetIPInfo,_Unwind_RaiseException:__Unwind_RaiseException,__asctime_r:___asctime_r,__assert_fail:___assert_fail,__asyncify_data:___asyncify_data,__asyncify_state:___asyncify_state,__asyncjs__pdo_pglite_real_doer,__asyncjs__pdo_pglite_real_handle_begin,__asyncjs__pdo_pglite_real_handle_commit,__asyncjs__pdo_pglite_real_handle_rollback,__asyncjs__pdo_pglite_real_last_insert_id,__asyncjs__pdo_pglite_real_stmt_execute,__asyncjs__php_stream_fetch_real_open,__asyncjs__vrzno_await_internal,__call_sighandler:___call_sighandler,__cxa_begin_catch:___cxa_begin_catch,__cxa_call_unexpected:___cxa_call_unexpected,__cxa_end_catch:___cxa_end_catch,__cxa_find_matching_catch_2:___cxa_find_matching_catch_2,__cxa_find_matching_catch_3:___cxa_find_matching_catch_3,__cxa_find_matching_catch_4:___cxa_find_matching_catch_4,__cxa_rethrow:___cxa_rethrow,__cxa_throw:___cxa_throw,__global_base:___global_base,__heap_base:___heap_base,__indirect_function_table:wasmTable,__memory_base:___memory_base,__resumeException:___resumeException,__stack_high:___stack_high,__stack_low:___stack_low,__stack_pointer:___stack_pointer,__syscall__newselect:___syscall__newselect,__syscall_accept4:___syscall_accept4,__syscall_bind:___syscall_bind,__syscall_chdir:___syscall_chdir,__syscall_chmod:___syscall_chmod,__syscall_connect:___syscall_connect,__syscall_dup:___syscall_dup,__syscall_dup3:___syscall_dup3,__syscall_faccessat:___syscall_faccessat,__syscall_fadvise64:___syscall_fadvise64,__syscall_fallocate:___syscall_fallocate,__syscall_fchdir:___syscall_fchdir,__syscall_fchmod:___syscall_fchmod,__syscall_fchmodat2:___syscall_fchmodat2,__syscall_fchown32:___syscall_fchown32,__syscall_fchownat:___syscall_fchownat,__syscall_fcntl64:___syscall_fcntl64,__syscall_fdatasync:___syscall_fdatasync,__syscall_fstat64:___syscall_fstat64,__syscall_fstatfs64:___syscall_fstatfs64,__syscall_ftruncate64:___syscall_ftruncate64,__syscall_getcwd:___syscall_getcwd,__syscall_getdents64:___syscall_getdents64,__syscall_getpeername:___syscall_getpeername,__syscall_getsockname:___syscall_getsockname,__syscall_getsockopt:___syscall_getsockopt,__syscall_ioctl:___syscall_ioctl,__syscall_listen:___syscall_listen,__syscall_lstat64:___syscall_lstat64,__syscall_mkdirat:___syscall_mkdirat,__syscall_mknodat:___syscall_mknodat,__syscall_newfstatat:___syscall_newfstatat,__syscall_openat:___syscall_openat,__syscall_pipe:___syscall_pipe,__syscall_poll:___syscall_poll,__syscall_readlinkat:___syscall_readlinkat,__syscall_recvfrom:___syscall_recvfrom,__syscall_recvmsg:___syscall_recvmsg,__syscall_renameat:___syscall_renameat,__syscall_rmdir:___syscall_rmdir,__syscall_sendmsg:___syscall_sendmsg,__syscall_sendto:___syscall_sendto,__syscall_socket:___syscall_socket,__syscall_stat64:___syscall_stat64,__syscall_statfs64:___syscall_statfs64,__syscall_symlink:___syscall_symlink,__syscall_symlinkat:___syscall_symlinkat,__syscall_truncate64:___syscall_truncate64,__syscall_unlinkat:___syscall_unlinkat,__syscall_utimensat:___syscall_utimensat,__table_base:___table_base,__xmlOutputBufferCreateFilename:___xmlOutputBufferCreateFilename,__xmlParserInputBufferCreateFilename:___xmlParserInputBufferCreateFilename,__xmlRegisterCallbacks:___xmlRegisterCallbacks,_abort_js:__abort_js,_dlopen_js:__dlopen_js,_dlsym_catchup_js:__dlsym_catchup_js,_dlsym_js:__dlsym_js,_emscripten_dlopen_js:__emscripten_dlopen_js,_emscripten_fs_load_embedded_files:__emscripten_fs_load_embedded_files,_emscripten_get_now_is_monotonic:__emscripten_get_now_is_monotonic,_emscripten_get_progname:__emscripten_get_progname,_emscripten_lookup_name:__emscripten_lookup_name,_emscripten_memcpy_js:__emscripten_memcpy_js,_emscripten_push_main_loop_blocker:__emscripten_push_main_loop_blocker,_emscripten_push_uncounted_main_loop_blocker:__emscripten_push_uncounted_main_loop_blocker,_emscripten_runtime_keepalive_clear:__emscripten_runtime_keepalive_clear,_emscripten_set_offscreencanvas_size:__emscripten_set_offscreencanvas_size,_emscripten_system:__emscripten_system,_emscripten_throw_longjmp:__emscripten_throw_longjmp,_gmtime_js:__gmtime_js,_load_secondary_module:__load_secondary_module,_localtime_js:__localtime_js,_mktime_js:__mktime_js,_mmap_js:__mmap_js,_msync_js:__msync_js,_munmap_js:__munmap_js,_setitimer_js:__setitimer_js,_timegm_js:__timegm_js,_tzset_js:__tzset_js,clock_res_get:_clock_res_get,clock_time_get:_clock_time_get,docbDefaultSAXHandler:_docbDefaultSAXHandler,emscripten_asm_const_async_on_main_thread:_emscripten_asm_const_async_on_main_thread,emscripten_asm_const_double:_emscripten_asm_const_double,emscripten_asm_const_double_sync_on_main_thread:_emscripten_asm_const_double_sync_on_main_thread,emscripten_asm_const_int:_emscripten_asm_const_int,emscripten_asm_const_int_sync_on_main_thread:_emscripten_asm_const_int_sync_on_main_thread,emscripten_asm_const_ptr:_emscripten_asm_const_ptr,emscripten_asm_const_ptr_sync_on_main_thread:_emscripten_asm_const_ptr_sync_on_main_thread,emscripten_async_call:_emscripten_async_call,emscripten_async_load_script:_emscripten_async_load_script,emscripten_async_run_script:_emscripten_async_run_script,emscripten_async_wget:_emscripten_async_wget,emscripten_async_wget2:_emscripten_async_wget2,emscripten_async_wget2_abort:_emscripten_async_wget2_abort,emscripten_async_wget2_data:_emscripten_async_wget2_data,emscripten_async_wget_data:_emscripten_async_wget_data,emscripten_call_worker:_emscripten_call_worker,emscripten_cancel_animation_frame:_emscripten_cancel_animation_frame,emscripten_cancel_main_loop:_emscripten_cancel_main_loop,emscripten_clear_immediate:_emscripten_clear_immediate,emscripten_clear_interval:_emscripten_clear_interval,emscripten_clear_timeout:_emscripten_clear_timeout,emscripten_console_error:_emscripten_console_error,emscripten_console_log:_emscripten_console_log,emscripten_console_trace:_emscripten_console_trace,emscripten_console_warn:_emscripten_console_warn,emscripten_create_worker:_emscripten_create_worker,emscripten_date_now:_emscripten_date_now,emscripten_debugger:_emscripten_debugger,emscripten_destroy_worker:_emscripten_destroy_worker,emscripten_enter_soft_fullscreen:_emscripten_enter_soft_fullscreen,emscripten_err:_emscripten_err,emscripten_errn:_emscripten_errn,emscripten_exit_fullscreen:_emscripten_exit_fullscreen,emscripten_exit_pointerlock:_emscripten_exit_pointerlock,emscripten_exit_soft_fullscreen:_emscripten_exit_soft_fullscreen,emscripten_exit_with_live_runtime:_emscripten_exit_with_live_runtime,emscripten_fiber_swap:_emscripten_fiber_swap,emscripten_force_exit:_emscripten_force_exit,emscripten_get_battery_status:_emscripten_get_battery_status,emscripten_get_callstack:_emscripten_get_callstack,emscripten_get_canvas_element_size:_emscripten_get_canvas_element_size,emscripten_get_canvas_size:_emscripten_get_canvas_size,emscripten_get_compiler_setting:_emscripten_get_compiler_setting,emscripten_get_device_pixel_ratio:_emscripten_get_device_pixel_ratio,emscripten_get_devicemotion_status:_emscripten_get_devicemotion_status,emscripten_get_deviceorientation_status:_emscripten_get_deviceorientation_status,emscripten_get_element_css_size:_emscripten_get_element_css_size,emscripten_get_fullscreen_status:_emscripten_get_fullscreen_status,emscripten_get_gamepad_status:_emscripten_get_gamepad_status,emscripten_get_heap_max:_emscripten_get_heap_max,emscripten_get_main_loop_timing:_emscripten_get_main_loop_timing,emscripten_get_mouse_status:_emscripten_get_mouse_status,emscripten_get_now:_emscripten_get_now,emscripten_get_now_res:_emscripten_get_now_res,emscripten_get_num_gamepads:_emscripten_get_num_gamepads,emscripten_get_orientation_status:_emscripten_get_orientation_status,emscripten_get_pointerlock_status:_emscripten_get_pointerlock_status,emscripten_get_preloaded_image_data:_emscripten_get_preloaded_image_data,emscripten_get_preloaded_image_data_from_FILE:_emscripten_get_preloaded_image_data_from_FILE,emscripten_get_screen_size:_emscripten_get_screen_size,emscripten_get_visibility_status:_emscripten_get_visibility_status,emscripten_get_window_title:_emscripten_get_window_title,emscripten_get_worker_queue_size:_emscripten_get_worker_queue_size,emscripten_has_asyncify:_emscripten_has_asyncify,emscripten_hide_mouse:_emscripten_hide_mouse,emscripten_html5_remove_all_event_listeners:_emscripten_html5_remove_all_event_listeners,emscripten_is_main_browser_thread:_emscripten_is_main_browser_thread,emscripten_lazy_load_code:_emscripten_lazy_load_code,emscripten_lock_orientation:_emscripten_lock_orientation,emscripten_log:_emscripten_log,emscripten_math_acos:_emscripten_math_acos,emscripten_math_acosh:_emscripten_math_acosh,emscripten_math_asin:_emscripten_math_asin,emscripten_math_asinh:_emscripten_math_asinh,emscripten_math_atan:_emscripten_math_atan,emscripten_math_atan2:_emscripten_math_atan2,emscripten_math_atanh:_emscripten_math_atanh,emscripten_math_cbrt:_emscripten_math_cbrt,emscripten_math_cos:_emscripten_math_cos,emscripten_math_cosh:_emscripten_math_cosh,emscripten_math_exp:_emscripten_math_exp,emscripten_math_expm1:_emscripten_math_expm1,emscripten_math_fmod:_emscripten_math_fmod,emscripten_math_hypot:_emscripten_math_hypot,emscripten_math_log:_emscripten_math_log,emscripten_math_log10:_emscripten_math_log10,emscripten_math_log1p:_emscripten_math_log1p,emscripten_math_log2:_emscripten_math_log2,emscripten_math_pow:_emscripten_math_pow,emscripten_math_random:_emscripten_math_random,emscripten_math_round:_emscripten_math_round,emscripten_math_sign:_emscripten_math_sign,emscripten_math_sin:_emscripten_math_sin,emscripten_math_sinh:_emscripten_math_sinh,emscripten_math_sqrt:_emscripten_math_sqrt,emscripten_math_tan:_emscripten_math_tan,emscripten_math_tanh:_emscripten_math_tanh,emscripten_notify_memory_growth:_emscripten_notify_memory_growth,emscripten_out:_emscripten_out,emscripten_outn:_emscripten_outn,emscripten_pause_main_loop:_emscripten_pause_main_loop,emscripten_pc_get_column:_emscripten_pc_get_column,emscripten_pc_get_file:_emscripten_pc_get_file,emscripten_pc_get_function:_emscripten_pc_get_function,emscripten_pc_get_line:_emscripten_pc_get_line,emscripten_performance_now:_emscripten_performance_now,emscripten_print_double:_emscripten_print_double,emscripten_promise_all:_emscripten_promise_all,emscripten_promise_all_settled:_emscripten_promise_all_settled,emscripten_promise_any:_emscripten_promise_any,emscripten_promise_await:_emscripten_promise_await,emscripten_promise_create:_emscripten_promise_create,emscripten_promise_destroy:_emscripten_promise_destroy,emscripten_promise_race:_emscripten_promise_race,emscripten_promise_resolve:_emscripten_promise_resolve,emscripten_promise_then:_emscripten_promise_then,emscripten_random:_emscripten_random,emscripten_request_animation_frame:_emscripten_request_animation_frame,emscripten_request_animation_frame_loop:_emscripten_request_animation_frame_loop,emscripten_request_fullscreen:_emscripten_request_fullscreen,emscripten_request_fullscreen_strategy:_emscripten_request_fullscreen_strategy,emscripten_request_pointerlock:_emscripten_request_pointerlock,emscripten_resize_heap:_emscripten_resize_heap,emscripten_resume_main_loop:_emscripten_resume_main_loop,emscripten_return_address:_emscripten_return_address,emscripten_run_preload_plugins:_emscripten_run_preload_plugins,emscripten_run_preload_plugins_data:_emscripten_run_preload_plugins_data,emscripten_run_script:_emscripten_run_script,emscripten_run_script_int:_emscripten_run_script_int,emscripten_run_script_string:_emscripten_run_script_string,emscripten_runtime_keepalive_check:_emscripten_runtime_keepalive_check,emscripten_runtime_keepalive_pop:_emscripten_runtime_keepalive_pop,emscripten_runtime_keepalive_push:_emscripten_runtime_keepalive_push,emscripten_sample_gamepad_data:_emscripten_sample_gamepad_data,emscripten_scan_registers:_emscripten_scan_registers,emscripten_set_batterychargingchange_callback_on_thread:_emscripten_set_batterychargingchange_callback_on_thread,emscripten_set_batterylevelchange_callback_on_thread:_emscripten_set_batterylevelchange_callback_on_thread,emscripten_set_beforeunload_callback_on_thread:_emscripten_set_beforeunload_callback_on_thread,emscripten_set_blur_callback_on_thread:_emscripten_set_blur_callback_on_thread,emscripten_set_canvas_element_size:_emscripten_set_canvas_element_size,emscripten_set_canvas_size:_emscripten_set_canvas_size,emscripten_set_click_callback_on_thread:_emscripten_set_click_callback_on_thread,emscripten_set_dblclick_callback_on_thread:_emscripten_set_dblclick_callback_on_thread,emscripten_set_devicemotion_callback_on_thread:_emscripten_set_devicemotion_callback_on_thread,emscripten_set_deviceorientation_callback_on_thread:_emscripten_set_deviceorientation_callback_on_thread,emscripten_set_element_css_size:_emscripten_set_element_css_size,emscripten_set_focus_callback_on_thread:_emscripten_set_focus_callback_on_thread,emscripten_set_focusin_callback_on_thread:_emscripten_set_focusin_callback_on_thread,emscripten_set_focusout_callback_on_thread:_emscripten_set_focusout_callback_on_thread,emscripten_set_fullscreenchange_callback_on_thread:_emscripten_set_fullscreenchange_callback_on_thread,emscripten_set_gamepadconnected_callback_on_thread:_emscripten_set_gamepadconnected_callback_on_thread,emscripten_set_gamepaddisconnected_callback_on_thread:_emscripten_set_gamepaddisconnected_callback_on_thread,emscripten_set_immediate:_emscripten_set_immediate,emscripten_set_immediate_loop:_emscripten_set_immediate_loop,emscripten_set_interval:_emscripten_set_interval,emscripten_set_keydown_callback_on_thread:_emscripten_set_keydown_callback_on_thread,emscripten_set_keypress_callback_on_thread:_emscripten_set_keypress_callback_on_thread,emscripten_set_keyup_callback_on_thread:_emscripten_set_keyup_callback_on_thread,emscripten_set_main_loop:_emscripten_set_main_loop,emscripten_set_main_loop_arg:_emscripten_set_main_loop_arg,emscripten_set_main_loop_expected_blockers:_emscripten_set_main_loop_expected_blockers,emscripten_set_main_loop_timing:_emscripten_set_main_loop_timing,emscripten_set_mousedown_callback_on_thread:_emscripten_set_mousedown_callback_on_thread,emscripten_set_mouseenter_callback_on_thread:_emscripten_set_mouseenter_callback_on_thread,emscripten_set_mouseleave_callback_on_thread:_emscripten_set_mouseleave_callback_on_thread,emscripten_set_mousemove_callback_on_thread:_emscripten_set_mousemove_callback_on_thread,emscripten_set_mouseout_callback_on_thread:_emscripten_set_mouseout_callback_on_thread,emscripten_set_mouseover_callback_on_thread:_emscripten_set_mouseover_callback_on_thread,emscripten_set_mouseup_callback_on_thread:_emscripten_set_mouseup_callback_on_thread,emscripten_set_orientationchange_callback_on_thread:_emscripten_set_orientationchange_callback_on_thread,emscripten_set_pointerlockchange_callback_on_thread:_emscripten_set_pointerlockchange_callback_on_thread,emscripten_set_pointerlockerror_callback_on_thread:_emscripten_set_pointerlockerror_callback_on_thread,emscripten_set_resize_callback_on_thread:_emscripten_set_resize_callback_on_thread,emscripten_set_scroll_callback_on_thread:_emscripten_set_scroll_callback_on_thread,emscripten_set_socket_close_callback:_emscripten_set_socket_close_callback,emscripten_set_socket_connection_callback:_emscripten_set_socket_connection_callback,emscripten_set_socket_error_callback:_emscripten_set_socket_error_callback,emscripten_set_socket_listen_callback:_emscripten_set_socket_listen_callback,emscripten_set_socket_message_callback:_emscripten_set_socket_message_callback,emscripten_set_socket_open_callback:_emscripten_set_socket_open_callback,emscripten_set_timeout:_emscripten_set_timeout,emscripten_set_timeout_loop:_emscripten_set_timeout_loop,emscripten_set_touchcancel_callback_on_thread:_emscripten_set_touchcancel_callback_on_thread,emscripten_set_touchend_callback_on_thread:_emscripten_set_touchend_callback_on_thread,emscripten_set_touchmove_callback_on_thread:_emscripten_set_touchmove_callback_on_thread,emscripten_set_touchstart_callback_on_thread:_emscripten_set_touchstart_callback_on_thread,emscripten_set_visibilitychange_callback_on_thread:_emscripten_set_visibilitychange_callback_on_thread,emscripten_set_wheel_callback_on_thread:_emscripten_set_wheel_callback_on_thread,emscripten_set_window_title:_emscripten_set_window_title,emscripten_sleep:_emscripten_sleep,emscripten_stack_snapshot:_emscripten_stack_snapshot,emscripten_stack_unwind_buffer:_emscripten_stack_unwind_buffer,emscripten_throw_number:_emscripten_throw_number,emscripten_throw_string:_emscripten_throw_string,emscripten_unlock_orientation:_emscripten_unlock_orientation,emscripten_unwind_to_js_event_loop:_emscripten_unwind_to_js_event_loop,emscripten_vibrate:_emscripten_vibrate,emscripten_vibrate_pattern:_emscripten_vibrate_pattern,emscripten_wget_data:_emscripten_wget_data,endprotoent:_endprotoent,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,exit:_exit,fd_close:_fd_close,fd_fdstat_get:_fd_fdstat_get,fd_pread:_fd_pread,fd_pwrite:_fd_pwrite,fd_read:_fd_read,fd_seek:_fd_seek,fd_sync:_fd_sync,fd_write:_fd_write,getaddrinfo:_getaddrinfo,getcontext:_getcontext,getdtablesize:_getdtablesize,getentropy:_getentropy,getnameinfo:_getnameinfo,getprotobyname:_getprotobyname,getprotobynumber:_getprotobynumber,getprotoent:_getprotoent,htmlDefaultSAXHandler:_htmlDefaultSAXHandler,invoke_i,invoke_ii,invoke_iii,invoke_iiii,invoke_iiiii,invoke_iiiiii,invoke_iiiiiii,invoke_iiiiiiii,invoke_iiiiiiiiii,invoke_v,invoke_vi,invoke_vii,invoke_viii,invoke_viiii,invoke_viiiiii,isolat1ToUTF8:_isolat1ToUTF8,llvm_eh_typeid_for:_llvm_eh_typeid_for,makecontext:_makecontext,memory:wasmMemory,oldXMLWDcompatibility:_oldXMLWDcompatibility,posix_spawnp:_posix_spawnp,proc_exit:_proc_exit,random_get:_random_get,setNetworkCallback:_setNetworkCallback,setprotoent:_setprotoent,stackAlloc:_stackAlloc,stackRestore:_stackRestore,stackSave:_stackSave,strptime:_strptime,strptime_l:_strptime_l,swapcontext:_swapcontext,xmlAllocOutputBuffer:_xmlAllocOutputBuffer,xmlAllocParserInputBuffer:_xmlAllocParserInputBuffer,xmlBufferAllocScheme:_xmlBufferAllocScheme,xmlCopyError:_xmlCopyError,xmlDefaultBufferSize:_xmlDefaultBufferSize,xmlDefaultSAXHandler:_xmlDefaultSAXHandler,xmlDefaultSAXLocator:_xmlDefaultSAXLocator,xmlDeregisterNodeDefaultValue:_xmlDeregisterNodeDefaultValue,xmlDictOwns:_xmlDictOwns,xmlDoValidityCheckingDefaultValue:_xmlDoValidityCheckingDefaultValue,xmlFileClose:_xmlFileClose,xmlFileMatch:_xmlFileMatch,xmlFileOpen:_xmlFileOpen,xmlFileRead:_xmlFileRead,xmlFree:_xmlFree,xmlFreeDoc:_xmlFreeDoc,xmlFreeNode:_xmlFreeNode,xmlFreeNodeList:_xmlFreeNodeList,xmlFreeNs:_xmlFreeNs,xmlFreeParserInputBuffer:_xmlFreeParserInputBuffer,xmlFreeProp:_xmlFreeProp,xmlFreeURI:_xmlFreeURI,xmlGenericError:_xmlGenericError,xmlGenericErrorContext:_xmlGenericErrorContext,xmlGenericErrorDefaultFunc:_xmlGenericErrorDefaultFunc,xmlGetExternalEntityLoader:_xmlGetExternalEntityLoader,xmlGetLastError:_xmlGetLastError,xmlGetWarningsDefaultValue:_xmlGetWarningsDefaultValue,xmlHashDefaultDeallocator:_xmlHashDefaultDeallocator,xmlHashLookup:_xmlHashLookup,xmlHashRemoveEntry:_xmlHashRemoveEntry,xmlHashScan:_xmlHashScan,xmlIndentTreeOutput:_xmlIndentTreeOutput,xmlInitParser:_xmlInitParser,xmlInputReadCallbackNop:_xmlInputReadCallbackNop,xmlIsBaseCharGroup:_xmlIsBaseCharGroup,xmlIsCombiningGroup:_xmlIsCombiningGroup,xmlIsDigitGroup:_xmlIsDigitGroup,xmlIsExtenderGroup:_xmlIsExtenderGroup,xmlIsPubidChar_tab:_xmlIsPubidChar_tab,xmlKeepBlanksDefaultValue:_xmlKeepBlanksDefaultValue,xmlLastError:_xmlLastError,xmlLineNumbersDefaultValue:_xmlLineNumbersDefaultValue,xmlLoadExtDtdDefaultValue:_xmlLoadExtDtdDefaultValue,xmlMalloc:_xmlMalloc,xmlMallocAtomic:_xmlMallocAtomic,xmlMemStrdup:_xmlMemStrdup,xmlNewIOInputStream:_xmlNewIOInputStream,xmlNewInputFromFile:_xmlNewInputFromFile,xmlOutputBufferCreateFilenameDefault:_xmlOutputBufferCreateFilenameDefault,xmlOutputBufferCreateFilenameValue:_xmlOutputBufferCreateFilenameValue,xmlParseCharEncoding:_xmlParseCharEncoding,xmlParseURI:_xmlParseURI,xmlParserDebugEntities:_xmlParserDebugEntities,xmlParserError:_xmlParserError,xmlParserInputBufferCreateFilenameDefault:_xmlParserInputBufferCreateFilenameDefault,xmlParserInputBufferCreateFilenameValue:_xmlParserInputBufferCreateFilenameValue,xmlParserMaxDepth:_xmlParserMaxDepth,xmlParserValidityError:_xmlParserValidityError,xmlParserValidityWarning:_xmlParserValidityWarning,xmlParserVersion:_xmlParserVersion,xmlParserWarning:_xmlParserWarning,xmlPedanticParserDefaultValue:_xmlPedanticParserDefaultValue,xmlRealloc:_xmlRealloc,xmlReconciliateNs:_xmlReconciliateNs,xmlRegisterNodeDefaultValue:_xmlRegisterNodeDefaultValue,xmlRelaxNGCleanupTypes:_xmlRelaxNGCleanupTypes,xmlRemoveID:_xmlRemoveID,xmlResetError:_xmlResetError,xmlResetLastError:_xmlResetLastError,xmlSAX2AttributeDecl:_xmlSAX2AttributeDecl,xmlSAX2CDataBlock:_xmlSAX2CDataBlock,xmlSAX2Characters:_xmlSAX2Characters,xmlSAX2Comment:_xmlSAX2Comment,xmlSAX2ElementDecl:_xmlSAX2ElementDecl,xmlSAX2EndDocument:_xmlSAX2EndDocument,xmlSAX2EndElement:_xmlSAX2EndElement,xmlSAX2EndElementNs:_xmlSAX2EndElementNs,xmlSAX2EntityDecl:_xmlSAX2EntityDecl,xmlSAX2ExternalSubset:_xmlSAX2ExternalSubset,xmlSAX2GetColumnNumber:_xmlSAX2GetColumnNumber,xmlSAX2GetEntity:_xmlSAX2GetEntity,xmlSAX2GetLineNumber:_xmlSAX2GetLineNumber,xmlSAX2GetParameterEntity:_xmlSAX2GetParameterEntity,xmlSAX2GetPublicId:_xmlSAX2GetPublicId,xmlSAX2GetSystemId:_xmlSAX2GetSystemId,xmlSAX2HasExternalSubset:_xmlSAX2HasExternalSubset,xmlSAX2HasInternalSubset:_xmlSAX2HasInternalSubset,xmlSAX2IgnorableWhitespace:_xmlSAX2IgnorableWhitespace,xmlSAX2InternalSubset:_xmlSAX2InternalSubset,xmlSAX2IsStandalone:_xmlSAX2IsStandalone,xmlSAX2NotationDecl:_xmlSAX2NotationDecl,xmlSAX2ProcessingInstruction:_xmlSAX2ProcessingInstruction,xmlSAX2Reference:_xmlSAX2Reference,xmlSAX2ResolveEntity:_xmlSAX2ResolveEntity,xmlSAX2SetDocumentLocator:_xmlSAX2SetDocumentLocator,xmlSAX2StartDocument:_xmlSAX2StartDocument,xmlSAX2StartElement:_xmlSAX2StartElement,xmlSAX2StartElementNs:_xmlSAX2StartElementNs,xmlSAX2UnparsedEntityDecl:_xmlSAX2UnparsedEntityDecl,xmlSaveNoEmptyTags:_xmlSaveNoEmptyTags,xmlSetExternalEntityLoader:_xmlSetExternalEntityLoader,xmlSetGenericErrorFunc:_xmlSetGenericErrorFunc,xmlSetStructuredErrorFunc:_xmlSetStructuredErrorFunc,xmlStrdup:_xmlStrdup,xmlStringComment:_xmlStringComment,xmlStringText:_xmlStringText,xmlStringTextNoenc:_xmlStringTextNoenc,xmlStrncmp:_xmlStrncmp,xmlStructuredError:_xmlStructuredError,xmlStructuredErrorContext:_xmlStructuredErrorContext,xmlSubstituteEntitiesDefaultValue:_xmlSubstituteEntitiesDefaultValue,xmlTreeIndentString:_xmlTreeIndentString,xmlUCSIsAegeanNumbers:_xmlUCSIsAegeanNumbers,xmlUCSIsAlphabeticPresentationForms:_xmlUCSIsAlphabeticPresentationForms,xmlUCSIsArabic:_xmlUCSIsArabic,xmlUCSIsArabicPresentationFormsA:_xmlUCSIsArabicPresentationFormsA,xmlUCSIsArabicPresentationFormsB:_xmlUCSIsArabicPresentationFormsB,xmlUCSIsArmenian:_xmlUCSIsArmenian,xmlUCSIsArrows:_xmlUCSIsArrows,xmlUCSIsBasicLatin:_xmlUCSIsBasicLatin,xmlUCSIsBengali:_xmlUCSIsBengali,xmlUCSIsBlockElements:_xmlUCSIsBlockElements,xmlUCSIsBopomofo:_xmlUCSIsBopomofo,xmlUCSIsBopomofoExtended:_xmlUCSIsBopomofoExtended,xmlUCSIsBoxDrawing:_xmlUCSIsBoxDrawing,xmlUCSIsBraillePatterns:_xmlUCSIsBraillePatterns,xmlUCSIsBuhid:_xmlUCSIsBuhid,xmlUCSIsByzantineMusicalSymbols:_xmlUCSIsByzantineMusicalSymbols,xmlUCSIsCJKCompatibility:_xmlUCSIsCJKCompatibility,xmlUCSIsCJKCompatibilityForms:_xmlUCSIsCJKCompatibilityForms,xmlUCSIsCJKCompatibilityIdeographs:_xmlUCSIsCJKCompatibilityIdeographs,xmlUCSIsCJKCompatibilityIdeographsSupplement:_xmlUCSIsCJKCompatibilityIdeographsSupplement,xmlUCSIsCJKRadicalsSupplement:_xmlUCSIsCJKRadicalsSupplement,xmlUCSIsCJKSymbolsandPunctuation:_xmlUCSIsCJKSymbolsandPunctuation,xmlUCSIsCJKUnifiedIdeographs:_xmlUCSIsCJKUnifiedIdeographs,xmlUCSIsCJKUnifiedIdeographsExtensionA:_xmlUCSIsCJKUnifiedIdeographsExtensionA,xmlUCSIsCJKUnifiedIdeographsExtensionB:_xmlUCSIsCJKUnifiedIdeographsExtensionB,xmlUCSIsCatC:_xmlUCSIsCatC,xmlUCSIsCatCc:_xmlUCSIsCatCc,xmlUCSIsCatCf:_xmlUCSIsCatCf,xmlUCSIsCatCo:_xmlUCSIsCatCo,xmlUCSIsCatCs:_xmlUCSIsCatCs,xmlUCSIsCatL:_xmlUCSIsCatL,xmlUCSIsCatLl:_xmlUCSIsCatLl,xmlUCSIsCatLm:_xmlUCSIsCatLm,xmlUCSIsCatLo:_xmlUCSIsCatLo,xmlUCSIsCatLt:_xmlUCSIsCatLt,xmlUCSIsCatLu:_xmlUCSIsCatLu,xmlUCSIsCatM:_xmlUCSIsCatM,xmlUCSIsCatMc:_xmlUCSIsCatMc,xmlUCSIsCatMe:_xmlUCSIsCatMe,xmlUCSIsCatMn:_xmlUCSIsCatMn,xmlUCSIsCatN:_xmlUCSIsCatN,xmlUCSIsCatNd:_xmlUCSIsCatNd,xmlUCSIsCatNl:_xmlUCSIsCatNl,xmlUCSIsCatNo:_xmlUCSIsCatNo,xmlUCSIsCatP:_xmlUCSIsCatP,xmlUCSIsCatPc:_xmlUCSIsCatPc,xmlUCSIsCatPd:_xmlUCSIsCatPd,xmlUCSIsCatPe:_xmlUCSIsCatPe,xmlUCSIsCatPf:_xmlUCSIsCatPf,xmlUCSIsCatPi:_xmlUCSIsCatPi,xmlUCSIsCatPo:_xmlUCSIsCatPo,xmlUCSIsCatPs:_xmlUCSIsCatPs,xmlUCSIsCatS:_xmlUCSIsCatS,xmlUCSIsCatSc:_xmlUCSIsCatSc,xmlUCSIsCatSk:_xmlUCSIsCatSk,xmlUCSIsCatSm:_xmlUCSIsCatSm,xmlUCSIsCatSo:_xmlUCSIsCatSo,xmlUCSIsCatZ:_xmlUCSIsCatZ,xmlUCSIsCatZl:_xmlUCSIsCatZl,xmlUCSIsCatZp:_xmlUCSIsCatZp,xmlUCSIsCatZs:_xmlUCSIsCatZs,xmlUCSIsCherokee:_xmlUCSIsCherokee,xmlUCSIsCombiningDiacriticalMarks:_xmlUCSIsCombiningDiacriticalMarks,xmlUCSIsCombiningDiacriticalMarksforSymbols:_xmlUCSIsCombiningDiacriticalMarksforSymbols,xmlUCSIsCombiningHalfMarks:_xmlUCSIsCombiningHalfMarks,xmlUCSIsCombiningMarksforSymbols:_xmlUCSIsCombiningMarksforSymbols,xmlUCSIsControlPictures:_xmlUCSIsControlPictures,xmlUCSIsCurrencySymbols:_xmlUCSIsCurrencySymbols,xmlUCSIsCypriotSyllabary:_xmlUCSIsCypriotSyllabary,xmlUCSIsCyrillic:_xmlUCSIsCyrillic,xmlUCSIsCyrillicSupplement:_xmlUCSIsCyrillicSupplement,xmlUCSIsDeseret:_xmlUCSIsDeseret,xmlUCSIsDevanagari:_xmlUCSIsDevanagari,xmlUCSIsDingbats:_xmlUCSIsDingbats,xmlUCSIsEnclosedAlphanumerics:_xmlUCSIsEnclosedAlphanumerics,xmlUCSIsEnclosedCJKLettersandMonths:_xmlUCSIsEnclosedCJKLettersandMonths,xmlUCSIsEthiopic:_xmlUCSIsEthiopic,xmlUCSIsGeneralPunctuation:_xmlUCSIsGeneralPunctuation,xmlUCSIsGeometricShapes:_xmlUCSIsGeometricShapes,xmlUCSIsGeorgian:_xmlUCSIsGeorgian,xmlUCSIsGothic:_xmlUCSIsGothic,xmlUCSIsGreek:_xmlUCSIsGreek,xmlUCSIsGreekExtended:_xmlUCSIsGreekExtended,xmlUCSIsGreekandCoptic:_xmlUCSIsGreekandCoptic,xmlUCSIsGujarati:_xmlUCSIsGujarati,xmlUCSIsGurmukhi:_xmlUCSIsGurmukhi,xmlUCSIsHalfwidthandFullwidthForms:_xmlUCSIsHalfwidthandFullwidthForms,xmlUCSIsHangulCompatibilityJamo:_xmlUCSIsHangulCompatibilityJamo,xmlUCSIsHangulJamo:_xmlUCSIsHangulJamo,xmlUCSIsHangulSyllables:_xmlUCSIsHangulSyllables,xmlUCSIsHanunoo:_xmlUCSIsHanunoo,xmlUCSIsHebrew:_xmlUCSIsHebrew,xmlUCSIsHighPrivateUseSurrogates:_xmlUCSIsHighPrivateUseSurrogates,xmlUCSIsHighSurrogates:_xmlUCSIsHighSurrogates,xmlUCSIsHiragana:_xmlUCSIsHiragana,xmlUCSIsIPAExtensions:_xmlUCSIsIPAExtensions,xmlUCSIsIdeographicDescriptionCharacters:_xmlUCSIsIdeographicDescriptionCharacters,xmlUCSIsKanbun:_xmlUCSIsKanbun,xmlUCSIsKangxiRadicals:_xmlUCSIsKangxiRadicals,xmlUCSIsKannada:_xmlUCSIsKannada,xmlUCSIsKatakana:_xmlUCSIsKatakana,xmlUCSIsKatakanaPhoneticExtensions:_xmlUCSIsKatakanaPhoneticExtensions,xmlUCSIsKhmer:_xmlUCSIsKhmer,xmlUCSIsKhmerSymbols:_xmlUCSIsKhmerSymbols,xmlUCSIsLao:_xmlUCSIsLao,xmlUCSIsLatin1Supplement:_xmlUCSIsLatin1Supplement,xmlUCSIsLatinExtendedA:_xmlUCSIsLatinExtendedA,xmlUCSIsLatinExtendedAdditional:_xmlUCSIsLatinExtendedAdditional,xmlUCSIsLatinExtendedB:_xmlUCSIsLatinExtendedB,xmlUCSIsLetterlikeSymbols:_xmlUCSIsLetterlikeSymbols,xmlUCSIsLimbu:_xmlUCSIsLimbu,xmlUCSIsLinearBIdeograms:_xmlUCSIsLinearBIdeograms,xmlUCSIsLinearBSyllabary:_xmlUCSIsLinearBSyllabary,xmlUCSIsLowSurrogates:_xmlUCSIsLowSurrogates,xmlUCSIsMalayalam:_xmlUCSIsMalayalam,xmlUCSIsMathematicalAlphanumericSymbols:_xmlUCSIsMathematicalAlphanumericSymbols,xmlUCSIsMathematicalOperators:_xmlUCSIsMathematicalOperators,xmlUCSIsMiscellaneousMathematicalSymbolsA:_xmlUCSIsMiscellaneousMathematicalSymbolsA,xmlUCSIsMiscellaneousMathematicalSymbolsB:_xmlUCSIsMiscellaneousMathematicalSymbolsB,xmlUCSIsMiscellaneousSymbols:_xmlUCSIsMiscellaneousSymbols,xmlUCSIsMiscellaneousSymbolsandArrows:_xmlUCSIsMiscellaneousSymbolsandArrows,xmlUCSIsMiscellaneousTechnical:_xmlUCSIsMiscellaneousTechnical,xmlUCSIsMongolian:_xmlUCSIsMongolian,xmlUCSIsMusicalSymbols:_xmlUCSIsMusicalSymbols,xmlUCSIsMyanmar:_xmlUCSIsMyanmar,xmlUCSIsNumberForms:_xmlUCSIsNumberForms,xmlUCSIsOgham:_xmlUCSIsOgham,xmlUCSIsOldItalic:_xmlUCSIsOldItalic,xmlUCSIsOpticalCharacterRecognition:_xmlUCSIsOpticalCharacterRecognition,xmlUCSIsOriya:_xmlUCSIsOriya,xmlUCSIsOsmanya:_xmlUCSIsOsmanya,xmlUCSIsPhoneticExtensions:_xmlUCSIsPhoneticExtensions,xmlUCSIsPrivateUse:_xmlUCSIsPrivateUse,xmlUCSIsPrivateUseArea:_xmlUCSIsPrivateUseArea,xmlUCSIsRunic:_xmlUCSIsRunic,xmlUCSIsShavian:_xmlUCSIsShavian,xmlUCSIsSinhala:_xmlUCSIsSinhala,xmlUCSIsSmallFormVariants:_xmlUCSIsSmallFormVariants,xmlUCSIsSpacingModifierLetters:_xmlUCSIsSpacingModifierLetters,xmlUCSIsSpecials:_xmlUCSIsSpecials,xmlUCSIsSuperscriptsandSubscripts:_xmlUCSIsSuperscriptsandSubscripts,xmlUCSIsSupplementalArrowsA:_xmlUCSIsSupplementalArrowsA,xmlUCSIsSupplementalArrowsB:_xmlUCSIsSupplementalArrowsB,xmlUCSIsSupplementalMathematicalOperators:_xmlUCSIsSupplementalMathematicalOperators,xmlUCSIsSupplementaryPrivateUseAreaA:_xmlUCSIsSupplementaryPrivateUseAreaA,xmlUCSIsSupplementaryPrivateUseAreaB:_xmlUCSIsSupplementaryPrivateUseAreaB,xmlUCSIsSyriac:_xmlUCSIsSyriac,xmlUCSIsTagalog:_xmlUCSIsTagalog,xmlUCSIsTagbanwa:_xmlUCSIsTagbanwa,xmlUCSIsTags:_xmlUCSIsTags,xmlUCSIsTaiLe:_xmlUCSIsTaiLe,xmlUCSIsTaiXuanJingSymbols:_xmlUCSIsTaiXuanJingSymbols,xmlUCSIsTamil:_xmlUCSIsTamil,xmlUCSIsTelugu:_xmlUCSIsTelugu,xmlUCSIsThaana:_xmlUCSIsThaana,xmlUCSIsThai:_xmlUCSIsThai,xmlUCSIsTibetan:_xmlUCSIsTibetan,xmlUCSIsUgaritic:_xmlUCSIsUgaritic,xmlUCSIsUnifiedCanadianAboriginalSyllabics:_xmlUCSIsUnifiedCanadianAboriginalSyllabics,xmlUCSIsVariationSelectors:_xmlUCSIsVariationSelectors,xmlUCSIsVariationSelectorsSupplement:_xmlUCSIsVariationSelectorsSupplement,xmlUCSIsYiRadicals:_xmlUCSIsYiRadicals,xmlUCSIsYiSyllables:_xmlUCSIsYiSyllables,xmlUCSIsYijingHexagramSymbols:_xmlUCSIsYijingHexagramSymbols,xmlURIUnescapeString:_xmlURIUnescapeString,xmlUnlinkNode:_xmlUnlinkNode,xmlXPathBooleanFunction:_xmlXPathBooleanFunction,xmlXPathCeilingFunction:_xmlXPathCeilingFunction,xmlXPathConcatFunction:_xmlXPathConcatFunction,xmlXPathContainsFunction:_xmlXPathContainsFunction,xmlXPathCountFunction:_xmlXPathCountFunction,xmlXPathFalseFunction:_xmlXPathFalseFunction,xmlXPathFloorFunction:_xmlXPathFloorFunction,xmlXPathIdFunction:_xmlXPathIdFunction,xmlXPathLangFunction:_xmlXPathLangFunction,xmlXPathLastFunction:_xmlXPathLastFunction,xmlXPathLocalNameFunction:_xmlXPathLocalNameFunction,xmlXPathNAN:_xmlXPathNAN,xmlXPathNINF:_xmlXPathNINF,xmlXPathNamespaceURIFunction:_xmlXPathNamespaceURIFunction,xmlXPathNextAncestor:_xmlXPathNextAncestor,xmlXPathNextAncestorOrSelf:_xmlXPathNextAncestorOrSelf,xmlXPathNextAttribute:_xmlXPathNextAttribute,xmlXPathNextChild:_xmlXPathNextChild,xmlXPathNextDescendant:_xmlXPathNextDescendant,xmlXPathNextDescendantOrSelf:_xmlXPathNextDescendantOrSelf,xmlXPathNextFollowing:_xmlXPathNextFollowing,xmlXPathNextFollowingSibling:_xmlXPathNextFollowingSibling,xmlXPathNextNamespace:_xmlXPathNextNamespace,xmlXPathNextParent:_xmlXPathNextParent,xmlXPathNextPrecedingSibling:_xmlXPathNextPrecedingSibling,xmlXPathNextSelf:_xmlXPathNextSelf,xmlXPathNormalizeFunction:_xmlXPathNormalizeFunction,xmlXPathNotFunction:_xmlXPathNotFunction,xmlXPathNumberFunction:_xmlXPathNumberFunction,xmlXPathPINF:_xmlXPathPINF,xmlXPathPositionFunction:_xmlXPathPositionFunction,xmlXPathRoundFunction:_xmlXPathRoundFunction,xmlXPathStartsWithFunction:_xmlXPathStartsWithFunction,xmlXPathStringFunction:_xmlXPathStringFunction,xmlXPathStringLengthFunction:_xmlXPathStringLengthFunction,xmlXPathSubstringAfterFunction:_xmlXPathSubstringAfterFunction,xmlXPathSubstringBeforeFunction:_xmlXPathSubstringBeforeFunction,xmlXPathSubstringFunction:_xmlXPathSubstringFunction,xmlXPathSumFunction:_xmlXPathSumFunction,xmlXPathTranslateFunction:_xmlXPathTranslateFunction,xmlXPathTrueFunction:_xmlXPathTrueFunction};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports[\"__wasm_call_ctors\"])();var ___wasm_apply_data_relocs=()=>(___wasm_apply_data_relocs=wasmExports[\"__wasm_apply_data_relocs\"])();var _time=a0=>(_time=wasmExports[\"time\"])(a0);var _strlen=a0=>(_strlen=wasmExports[\"strlen\"])(a0);var _memcmp=(a0,a1,a2)=>(_memcmp=wasmExports[\"memcmp\"])(a0,a1,a2);var _strcmp=(a0,a1)=>(_strcmp=wasmExports[\"strcmp\"])(a0,a1);var _free=a0=>(_free=wasmExports[\"free\"])(a0);var _strchr=(a0,a1)=>(_strchr=wasmExports[\"strchr\"])(a0,a1);var ___errno_location=()=>(___errno_location=wasmExports[\"__errno_location\"])();var _snprintf=(a0,a1,a2,a3)=>(_snprintf=wasmExports[\"snprintf\"])(a0,a1,a2,a3);var _toupper=a0=>(_toupper=wasmExports[\"toupper\"])(a0);var _malloc=a0=>(_malloc=wasmExports[\"malloc\"])(a0);var _memchr=(a0,a1,a2)=>(_memchr=wasmExports[\"memchr\"])(a0,a1,a2);var _strcpy=(a0,a1)=>(_strcpy=wasmExports[\"strcpy\"])(a0,a1);var _stat=(a0,a1)=>(_stat=wasmExports[\"stat\"])(a0,a1);var _strncmp=(a0,a1,a2)=>(_strncmp=wasmExports[\"strncmp\"])(a0,a1,a2);var _strncpy=(a0,a1,a2)=>(_strncpy=wasmExports[\"strncpy\"])(a0,a1,a2);var _main=Module[\"_main\"]=(a0,a1)=>(_main=Module[\"_main\"]=wasmExports[\"main\"])(a0,a1);var _pib_init=Module[\"_pib_init\"]=()=>(_pib_init=Module[\"_pib_init\"]=wasmExports[\"pib_init\"])();var _pib_storage_init=Module[\"_pib_storage_init\"]=()=>(_pib_storage_init=Module[\"_pib_storage_init\"]=wasmExports[\"pib_storage_init\"])();var _pib_refresh=Module[\"_pib_refresh\"]=()=>(_pib_refresh=Module[\"_pib_refresh\"]=wasmExports[\"pib_refresh\"])();var _pib_flush=Module[\"_pib_flush\"]=()=>(_pib_flush=Module[\"_pib_flush\"]=wasmExports[\"pib_flush\"])();var _pib_exec=Module[\"_pib_exec\"]=a0=>(_pib_exec=Module[\"_pib_exec\"]=wasmExports[\"pib_exec\"])(a0);var _pib_run=Module[\"_pib_run\"]=a0=>(_pib_run=Module[\"_pib_run\"]=wasmExports[\"pib_run\"])(a0);var _pib_php_version=Module[\"_pib_php_version\"]=()=>(_pib_php_version=Module[\"_pib_php_version\"]=wasmExports[\"pib_php_version\"])();var _pib_php_ext_api_version=Module[\"_pib_php_ext_api_version\"]=()=>(_pib_php_ext_api_version=Module[\"_pib_php_ext_api_version\"]=wasmExports[\"pib_php_ext_api_version\"])();var _pib_tokenize=Module[\"_pib_tokenize\"]=a0=>(_pib_tokenize=Module[\"_pib_tokenize\"]=wasmExports[\"pib_tokenize\"])(a0);var _close=a0=>(_close=wasmExports[\"close\"])(a0);var _open=(a0,a1,a2)=>(_open=wasmExports[\"open\"])(a0,a1,a2);var _strerror=a0=>(_strerror=wasmExports[\"strerror\"])(a0);var _read=(a0,a1,a2)=>(_read=wasmExports[\"read\"])(a0,a1,a2);var _write=(a0,a1,a2)=>(_write=wasmExports[\"write\"])(a0,a1,a2);var _realloc=(a0,a1)=>(_realloc=wasmExports[\"realloc\"])(a0,a1);var _strcat=(a0,a1)=>(_strcat=wasmExports[\"strcat\"])(a0,a1);var _htonl=a0=>(_htonl=wasmExports[\"htonl\"])(a0);var _getenv=a0=>(_getenv=wasmExports[\"getenv\"])(a0);var _ntohs=a0=>(_ntohs=wasmExports[\"ntohs\"])(a0);var _htons=a0=>(_htons=wasmExports[\"htons\"])(a0);var _fopen=(a0,a1)=>(_fopen=wasmExports[\"fopen\"])(a0,a1);var _getcwd=(a0,a1)=>(_getcwd=wasmExports[\"getcwd\"])(a0,a1);var _dlopen=(a0,a1)=>(_dlopen=wasmExports[\"dlopen\"])(a0,a1);var _dlerror=()=>(_dlerror=wasmExports[\"dlerror\"])();var _dlsym=(a0,a1)=>(_dlsym=wasmExports[\"dlsym\"])(a0,a1);var _dlclose=a0=>(_dlclose=wasmExports[\"dlclose\"])(a0);var _fclose=a0=>(_fclose=wasmExports[\"fclose\"])(a0);var _sscanf=(a0,a1,a2)=>(_sscanf=wasmExports[\"sscanf\"])(a0,a1,a2);var _fileno=a0=>(_fileno=wasmExports[\"fileno\"])(a0);var _fprintf=(a0,a1,a2)=>(_fprintf=wasmExports[\"fprintf\"])(a0,a1,a2);var _vrzno_expose_gc_ptr=Module[\"_vrzno_expose_gc_ptr\"]=a0=>(_vrzno_expose_gc_ptr=Module[\"_vrzno_expose_gc_ptr\"]=wasmExports[\"vrzno_expose_gc_ptr\"])(a0);var _vrzno_expose_inc_refcount=Module[\"_vrzno_expose_inc_refcount\"]=a0=>(_vrzno_expose_inc_refcount=Module[\"_vrzno_expose_inc_refcount\"]=wasmExports[\"vrzno_expose_inc_refcount\"])(a0);var _vrzno_expose_dec_refcount=Module[\"_vrzno_expose_dec_refcount\"]=a0=>(_vrzno_expose_dec_refcount=Module[\"_vrzno_expose_dec_refcount\"]=wasmExports[\"vrzno_expose_dec_refcount\"])(a0);var _vrzno_expose_refcount=Module[\"_vrzno_expose_refcount\"]=a0=>(_vrzno_expose_refcount=Module[\"_vrzno_expose_refcount\"]=wasmExports[\"vrzno_expose_refcount\"])(a0);var _vrzno_expose_efree=Module[\"_vrzno_expose_efree\"]=a0=>(_vrzno_expose_efree=Module[\"_vrzno_expose_efree\"]=wasmExports[\"vrzno_expose_efree\"])(a0);var _vrzno_expose_create_bool=Module[\"_vrzno_expose_create_bool\"]=(a0,a1)=>(_vrzno_expose_create_bool=Module[\"_vrzno_expose_create_bool\"]=wasmExports[\"vrzno_expose_create_bool\"])(a0,a1);var _vrzno_expose_create_null=Module[\"_vrzno_expose_create_null\"]=a0=>(_vrzno_expose_create_null=Module[\"_vrzno_expose_create_null\"]=wasmExports[\"vrzno_expose_create_null\"])(a0);var _vrzno_expose_create_undef=Module[\"_vrzno_expose_create_undef\"]=a0=>(_vrzno_expose_create_undef=Module[\"_vrzno_expose_create_undef\"]=wasmExports[\"vrzno_expose_create_undef\"])(a0);var _vrzno_expose_create_long=Module[\"_vrzno_expose_create_long\"]=(a0,a1)=>(_vrzno_expose_create_long=Module[\"_vrzno_expose_create_long\"]=wasmExports[\"vrzno_expose_create_long\"])(a0,a1);var _vrzno_expose_create_double=Module[\"_vrzno_expose_create_double\"]=(a0,a1)=>(_vrzno_expose_create_double=Module[\"_vrzno_expose_create_double\"]=wasmExports[\"vrzno_expose_create_double\"])(a0,a1);var _vrzno_expose_create_string=Module[\"_vrzno_expose_create_string\"]=(a0,a1)=>(_vrzno_expose_create_string=Module[\"_vrzno_expose_create_string\"]=wasmExports[\"vrzno_expose_create_string\"])(a0,a1);var _vrzno_expose_create_object_for_target=Module[\"_vrzno_expose_create_object_for_target\"]=(a0,a1,a2,a3)=>(_vrzno_expose_create_object_for_target=Module[\"_vrzno_expose_create_object_for_target\"]=wasmExports[\"vrzno_expose_create_object_for_target\"])(a0,a1,a2,a3);var _vrzno_expose_create_params=Module[\"_vrzno_expose_create_params\"]=a0=>(_vrzno_expose_create_params=Module[\"_vrzno_expose_create_params\"]=wasmExports[\"vrzno_expose_create_params\"])(a0);var _vrzno_expose_object_keys=Module[\"_vrzno_expose_object_keys\"]=a0=>(_vrzno_expose_object_keys=Module[\"_vrzno_expose_object_keys\"]=wasmExports[\"vrzno_expose_object_keys\"])(a0);var _vrzno_expose_array_keys=Module[\"_vrzno_expose_array_keys\"]=a0=>(_vrzno_expose_array_keys=Module[\"_vrzno_expose_array_keys\"]=wasmExports[\"vrzno_expose_array_keys\"])(a0);var _vrzno_expose_zval_deref=Module[\"_vrzno_expose_zval_deref\"]=a0=>(_vrzno_expose_zval_deref=Module[\"_vrzno_expose_zval_deref\"]=wasmExports[\"vrzno_expose_zval_deref\"])(a0);var _vrzno_expose_zval_dump=Module[\"_vrzno_expose_zval_dump\"]=(a0,a1)=>(_vrzno_expose_zval_dump=Module[\"_vrzno_expose_zval_dump\"]=wasmExports[\"vrzno_expose_zval_dump\"])(a0,a1);var _vrzno_expose_type=Module[\"_vrzno_expose_type\"]=a0=>(_vrzno_expose_type=Module[\"_vrzno_expose_type\"]=wasmExports[\"vrzno_expose_type\"])(a0);var _vrzno_expose_array_length=Module[\"_vrzno_expose_array_length\"]=a0=>(_vrzno_expose_array_length=Module[\"_vrzno_expose_array_length\"]=wasmExports[\"vrzno_expose_array_length\"])(a0);var _vrzno_expose_zval_target=Module[\"_vrzno_expose_zval_target\"]=a0=>(_vrzno_expose_zval_target=Module[\"_vrzno_expose_zval_target\"]=wasmExports[\"vrzno_expose_zval_target\"])(a0);var _vrzno_expose_target=Module[\"_vrzno_expose_target\"]=a0=>(_vrzno_expose_target=Module[\"_vrzno_expose_target\"]=wasmExports[\"vrzno_expose_target\"])(a0);var _vrzno_expose_callable=Module[\"_vrzno_expose_callable\"]=a0=>(_vrzno_expose_callable=Module[\"_vrzno_expose_callable\"]=wasmExports[\"vrzno_expose_callable\"])(a0);var _vrzno_expose_long=Module[\"_vrzno_expose_long\"]=a0=>(_vrzno_expose_long=Module[\"_vrzno_expose_long\"]=wasmExports[\"vrzno_expose_long\"])(a0);var _vrzno_expose_double=Module[\"_vrzno_expose_double\"]=a0=>(_vrzno_expose_double=Module[\"_vrzno_expose_double\"]=wasmExports[\"vrzno_expose_double\"])(a0);var _vrzno_expose_string=Module[\"_vrzno_expose_string\"]=a0=>(_vrzno_expose_string=Module[\"_vrzno_expose_string\"]=wasmExports[\"vrzno_expose_string\"])(a0);var _vrzno_expose_object=Module[\"_vrzno_expose_object\"]=a0=>(_vrzno_expose_object=Module[\"_vrzno_expose_object\"]=wasmExports[\"vrzno_expose_object\"])(a0);var _vrzno_expose_array=Module[\"_vrzno_expose_array\"]=a0=>(_vrzno_expose_array=Module[\"_vrzno_expose_array\"]=wasmExports[\"vrzno_expose_array\"])(a0);var _vrzno_expose_closure=Module[\"_vrzno_expose_closure\"]=a0=>(_vrzno_expose_closure=Module[\"_vrzno_expose_closure\"]=wasmExports[\"vrzno_expose_closure\"])(a0);var _vrzno_expose_key_pointer=Module[\"_vrzno_expose_key_pointer\"]=(a0,a1)=>(_vrzno_expose_key_pointer=Module[\"_vrzno_expose_key_pointer\"]=wasmExports[\"vrzno_expose_key_pointer\"])(a0,a1);var _vrzno_expose_property_pointer=Module[\"_vrzno_expose_property_pointer\"]=(a0,a1)=>(_vrzno_expose_property_pointer=Module[\"_vrzno_expose_property_pointer\"]=wasmExports[\"vrzno_expose_property_pointer\"])(a0,a1);var _vrzno_expose_dimension_pointer=Module[\"_vrzno_expose_dimension_pointer\"]=(a0,a1)=>(_vrzno_expose_dimension_pointer=Module[\"_vrzno_expose_dimension_pointer\"]=wasmExports[\"vrzno_expose_dimension_pointer\"])(a0,a1);var _vrzno_expose_method_pointer=Module[\"_vrzno_expose_method_pointer\"]=(a0,a1)=>(_vrzno_expose_method_pointer=Module[\"_vrzno_expose_method_pointer\"]=wasmExports[\"vrzno_expose_method_pointer\"])(a0,a1);var _vrzno_exec_callback=Module[\"_vrzno_exec_callback\"]=(a0,a1,a2,a3)=>(_vrzno_exec_callback=Module[\"_vrzno_exec_callback\"]=wasmExports[\"vrzno_exec_callback\"])(a0,a1,a2,a3);var _vrzno_del_callback=Module[\"_vrzno_del_callback\"]=a0=>(_vrzno_del_callback=Module[\"_vrzno_del_callback\"]=wasmExports[\"vrzno_del_callback\"])(a0);var _fwrite=(a0,a1,a2,a3)=>(_fwrite=wasmExports[\"fwrite\"])(a0,a1,a2,a3);var _fflush=a0=>(_fflush=wasmExports[\"fflush\"])(a0);var _fread=(a0,a1,a2,a3)=>(_fread=wasmExports[\"fread\"])(a0,a1,a2,a3);var _memset=(a0,a1,a2)=>(_memset=wasmExports[\"memset\"])(a0,a1,a2);var ___funcs_on_exit=()=>(___funcs_on_exit=wasmExports[\"__funcs_on_exit\"])();var _vsnprintf=(a0,a1,a2,a3)=>(_vsnprintf=wasmExports[\"vsnprintf\"])(a0,a1,a2,a3);var ___dl_seterr=(a0,a1)=>(___dl_seterr=wasmExports[\"__dl_seterr\"])(a0,a1);var _calloc=(a0,a1)=>(_calloc=wasmExports[\"calloc\"])(a0,a1);var _memcpy=(a0,a1,a2)=>(_memcpy=wasmExports[\"memcpy\"])(a0,a1,a2);var _memmove=(a0,a1,a2)=>(_memmove=wasmExports[\"memmove\"])(a0,a1,a2);var _ferror=a0=>(_ferror=wasmExports[\"ferror\"])(a0);var _fmod=(a0,a1)=>(_fmod=wasmExports[\"fmod\"])(a0,a1);var _vfprintf=(a0,a1,a2)=>(_vfprintf=wasmExports[\"vfprintf\"])(a0,a1,a2);var _fiprintf=(a0,a1,a2)=>(_fiprintf=wasmExports[\"fiprintf\"])(a0,a1,a2);var ___small_fprintf=(a0,a1,a2)=>(___small_fprintf=wasmExports[\"__small_fprintf\"])(a0,a1,a2);var _fputc=(a0,a1)=>(_fputc=wasmExports[\"fputc\"])(a0,a1);var _fputs=(a0,a1)=>(_fputs=wasmExports[\"fputs\"])(a0,a1);var _iconv_open=(a0,a1)=>(_iconv_open=wasmExports[\"iconv_open\"])(a0,a1);var _iconv=(a0,a1,a2,a3,a4)=>(_iconv=wasmExports[\"iconv\"])(a0,a1,a2,a3,a4);var _iconv_close=a0=>(_iconv_close=wasmExports[\"iconv_close\"])(a0);var _log10=a0=>(_log10=wasmExports[\"log10\"])(a0);var _emscripten_builtin_memalign=(a0,a1)=>(_emscripten_builtin_memalign=wasmExports[\"emscripten_builtin_memalign\"])(a0,a1);var _pow=(a0,a1)=>(_pow=wasmExports[\"pow\"])(a0,a1);var _puts=a0=>(_puts=wasmExports[\"puts\"])(a0);var _rand_r=a0=>(_rand_r=wasmExports[\"rand_r\"])(a0);var __emscripten_timeout=(a0,a1)=>(__emscripten_timeout=wasmExports[\"_emscripten_timeout\"])(a0,a1);var _setThrew=(a0,a1)=>(_setThrew=wasmExports[\"setThrew\"])(a0,a1);var __emscripten_tempret_set=a0=>(__emscripten_tempret_set=wasmExports[\"_emscripten_tempret_set\"])(a0);var __emscripten_tempret_get=()=>(__emscripten_tempret_get=wasmExports[\"_emscripten_tempret_get\"])();var ___get_temp_ret=()=>(___get_temp_ret=wasmExports[\"__get_temp_ret\"])();var ___set_temp_ret=a0=>(___set_temp_ret=wasmExports[\"__set_temp_ret\"])(a0);var _getTempRet0=()=>(_getTempRet0=wasmExports[\"getTempRet0\"])();var _emscripten_stack_set_limits=(a0,a1)=>(_emscripten_stack_set_limits=wasmExports[\"emscripten_stack_set_limits\"])(a0,a1);var __emscripten_stack_restore=a0=>(__emscripten_stack_restore=wasmExports[\"_emscripten_stack_restore\"])(a0);var __emscripten_stack_alloc=a0=>(__emscripten_stack_alloc=wasmExports[\"_emscripten_stack_alloc\"])(a0);var _emscripten_stack_get_current=()=>(_emscripten_stack_get_current=wasmExports[\"emscripten_stack_get_current\"])();var ___cxa_demangle=(a0,a1,a2,a3)=>(___cxa_demangle=wasmExports[\"__cxa_demangle\"])(a0,a1,a2,a3);var ___cxa_increment_exception_refcount=a0=>(___cxa_increment_exception_refcount=wasmExports[\"__cxa_increment_exception_refcount\"])(a0);var ___cxa_decrement_exception_refcount=a0=>(___cxa_decrement_exception_refcount=wasmExports[\"__cxa_decrement_exception_refcount\"])(a0);var ___cxa_can_catch=(a0,a1,a2)=>(___cxa_can_catch=wasmExports[\"__cxa_can_catch\"])(a0,a1,a2);var ___cxa_get_exception_ptr=a0=>(___cxa_get_exception_ptr=wasmExports[\"__cxa_get_exception_ptr\"])(a0);var _asyncify_start_unwind=a0=>(_asyncify_start_unwind=wasmExports[\"asyncify_start_unwind\"])(a0);var _asyncify_stop_unwind=()=>(_asyncify_stop_unwind=wasmExports[\"asyncify_stop_unwind\"])();var _asyncify_start_rewind=a0=>(_asyncify_start_rewind=wasmExports[\"asyncify_start_rewind\"])(a0);var _asyncify_stop_rewind=()=>(_asyncify_stop_rewind=wasmExports[\"asyncify_stop_rewind\"])();var _stdin=Module[\"_stdin\"]=1316144;var _stdout=Module[\"_stdout\"]=1316296;var _stderr=Module[\"_stderr\"]=1315992;function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return Module[\"dynCall_iiii\"](index,a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{Module[\"dynCall_vi\"](index,a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_v(index){var sp=stackSave();try{Module[\"dynCall_v\"](index)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_i(index){var sp=stackSave();try{return Module[\"dynCall_i\"](index)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return Module[\"dynCall_iii\"](index,a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{Module[\"dynCall_viii\"](index,a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{Module[\"dynCall_vii\"](index,a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{Module[\"dynCall_viiii\"](index,a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return Module[\"dynCall_ii\"](index,a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return Module[\"dynCall_iiiii\"](index,a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{Module[\"dynCall_viiiiii\"](index,a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return Module[\"dynCall_iiiiii\"](index,a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{return Module[\"dynCall_iiiiiiiiii\"](index,a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return Module[\"dynCall_iiiiiiii\"](index,a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return Module[\"dynCall_iiiiiii\"](index,a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function applySignatureConversions(wasmExports){wasmExports=Object.assign({},wasmExports);var makeWrapper_p=f=>()=>f()>>>0;var makeWrapper_pp=f=>a0=>f(a0)>>>0;var makeWrapper_p_=f=>a0=>f(a0)>>>0;var makeWrapper_pppp=f=>(a0,a1,a2)=>f(a0,a1,a2)>>>0;var makeWrapper_ppp=f=>(a0,a1)=>f(a0,a1)>>>0;var makeWrapper_pP=f=>a0=>f(a0)>>>0;wasmExports[\"__errno_location\"]=makeWrapper_p(wasmExports[\"__errno_location\"]);wasmExports[\"malloc\"]=makeWrapper_pp(wasmExports[\"malloc\"]);wasmExports[\"strerror\"]=makeWrapper_p_(wasmExports[\"strerror\"]);wasmExports[\"emscripten_builtin_malloc\"]=makeWrapper_pp(wasmExports[\"emscripten_builtin_malloc\"]);wasmExports[\"memcpy\"]=makeWrapper_pppp(wasmExports[\"memcpy\"]);wasmExports[\"calloc\"]=makeWrapper_ppp(wasmExports[\"calloc\"]);wasmExports[\"emscripten_stack_get_base\"]=makeWrapper_p(wasmExports[\"emscripten_stack_get_base\"]);wasmExports[\"emscripten_stack_get_end\"]=makeWrapper_p(wasmExports[\"emscripten_stack_get_end\"]);wasmExports[\"emscripten_builtin_memalign\"]=makeWrapper_ppp(wasmExports[\"emscripten_builtin_memalign\"]);wasmExports[\"emscripten_stack_get_current\"]=makeWrapper_p(wasmExports[\"emscripten_stack_get_current\"]);wasmExports[\"pthread_self\"]=makeWrapper_p(wasmExports[\"pthread_self\"]);wasmExports[\"emscripten_main_runtime_thread_id\"]=makeWrapper_p(wasmExports[\"emscripten_main_runtime_thread_id\"]);wasmExports[\"sbrk\"]=makeWrapper_pP(wasmExports[\"sbrk\"]);wasmExports[\"memalign\"]=makeWrapper_ppp(wasmExports[\"memalign\"]);wasmExports[\"emscripten_builtin_calloc\"]=makeWrapper_ppp(wasmExports[\"emscripten_builtin_calloc\"]);wasmExports[\"_emscripten_stack_alloc\"]=makeWrapper_pp(wasmExports[\"_emscripten_stack_alloc\"]);wasmExports[\"__cxa_get_exception_ptr\"]=makeWrapper_pp(wasmExports[\"__cxa_get_exception_ptr\"]);return wasmExports}Module[\"addRunDependency\"]=addRunDependency;Module[\"removeRunDependency\"]=removeRunDependency;Module[\"ENV\"]=ENV;Module[\"ccall\"]=ccall;Module[\"getValue\"]=getValue;Module[\"UTF8ToString\"]=UTF8ToString;Module[\"lengthBytesUTF8\"]=lengthBytesUTF8;Module[\"FS_createPreloadedFile\"]=FS_createPreloadedFile;Module[\"FS_unlink\"]=FS_unlink;Module[\"FS_createPath\"]=FS_createPath;Module[\"FS_createDevice\"]=FS_createDevice;Module[\"FS\"]=FS;Module[\"FS_createDataFile\"]=FS_createDataFile;Module[\"FS_createLazyFile\"]=FS_createLazyFile;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args=[]){var entryFunction=resolveGlobalSymbol(\"main\").sym;if(!entryFunction)return;args.unshift(thisProgram);var argc=args.length;var argv=stackAlloc((argc+1)*4);var argv_ptr=argv;args.forEach(arg=>{HEAPU32[argv_ptr>>>2>>>0]=stringToUTF8OnStack(arg);argv_ptr+=4});HEAPU32[argv_ptr>>>2>>>0]=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(args=arguments_){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);Module[\"onRuntimeInitialized\"]?.();if(shouldRunNow)callMain(args);postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(()=>{setTimeout(()=>Module[\"setStatus\"](\"\"),1);doRun()},1)}else{doRun()}}if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}var shouldRunNow=false;if(Module[\"noInitialRun\"])shouldRunNow=false;run();moduleRtn=readyPromise;\n\n\n return moduleRtn;\n}\n);\n})();\nexport default PHP;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + {\"40\":\"9229f9f2\",\"45\":\"cc3e5604\",\"97\":\"c6261c0f\",\"330\":\"c76e5618\",\"331\":\"875cb278\",\"450\":\"5d59c362\",\"574\":\"49428a7c\",\"675\":\"42a30c6f\",\"835\":\"ba3f1ffc\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"demo-source:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/php-wasm/\";","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkdemo_source\"] = self[\"webpackChunkdemo_source\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Pop = \"POP\",\n\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Push = \"PUSH\",\n\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n /**\n * A URL pathname, beginning with a /.\n */\n pathname: string;\n\n /**\n * A URL search string, beginning with a ?.\n */\n search: string;\n\n /**\n * A URL fragment identifier, beginning with a #.\n */\n hash: string;\n}\n\n// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location extends Path {\n /**\n * A value of arbitrary data associated with this location.\n */\n state: State;\n\n /**\n * A unique string associated with this location. May be used to safely store\n * and retrieve data in some other storage API, like `localStorage`.\n *\n * Note: This value is always \"default\" on the initial location.\n */\n key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n /**\n * The action that triggered the change.\n */\n action: Action;\n\n /**\n * The new location.\n */\n location: Location;\n\n /**\n * The delta between this location and the former location in the history stack\n */\n delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. This may be either a URL or the pieces\n * of a URL path.\n */\nexport type To = string | Partial;\n\n/**\n * A history is an interface to the navigation stack. The history serves as the\n * source of truth for the current location, as well as provides a set of\n * methods that may be used to change it.\n *\n * It is similar to the DOM's `window.history` object, but with a smaller, more\n * focused API.\n */\nexport interface History {\n /**\n * The last action that modified the current location. This will always be\n * Action.Pop when a history instance is first created. This value is mutable.\n */\n readonly action: Action;\n\n /**\n * The current location. This value is mutable.\n */\n readonly location: Location;\n\n /**\n * Returns a valid href for the given `to` value that may be used as\n * the value of an attribute.\n *\n * @param to - The destination URL\n */\n createHref(to: To): string;\n\n /**\n * Returns a URL for the given `to` value\n *\n * @param to - The destination URL\n */\n createURL(to: To): URL;\n\n /**\n * Encode a location the same way window.history would do (no-op for memory\n * history) so we ensure our PUSH/REPLACE navigations for data routers\n * behave the same as POP\n *\n * @param to Unencoded path\n */\n encodeLocation(to: To): Path;\n\n /**\n * Pushes a new location onto the history stack, increasing its length by one.\n * If there were any entries in the stack after the current one, they are\n * lost.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n push(to: To, state?: any): void;\n\n /**\n * Replaces the current location in the history stack with a new one. The\n * location that was replaced will no longer be available.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n replace(to: To, state?: any): void;\n\n /**\n * Navigates `n` entries backward/forward in the history stack relative to the\n * current index. For example, a \"back\" navigation would use go(-1).\n *\n * @param delta - The delta in the stack index\n */\n go(delta: number): void;\n\n /**\n * Sets up a listener that will be called whenever the current location\n * changes.\n *\n * @param listener - A function that will be called when the location changes\n * @returns unlisten - A function that may be used to stop listening\n */\n listen(listener: Listener): () => void;\n}\n\ntype HistoryState = {\n usr: any;\n key?: string;\n idx: number;\n};\n\nconst PopStateEventType = \"popstate\";\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Memory History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A user-supplied object that describes a location. Used when providing\n * entries to `createMemoryHistory` via its `initialEntries` option.\n */\nexport type InitialEntry = string | Partial;\n\nexport type MemoryHistoryOptions = {\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n v5Compat?: boolean;\n};\n\n/**\n * A memory history stores locations in memory. This is useful in stateful\n * environments where there is no web browser, such as node tests or React\n * Native.\n */\nexport interface MemoryHistory extends History {\n /**\n * The current index in the history stack.\n */\n readonly index: number;\n}\n\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nexport function createMemoryHistory(\n options: MemoryHistoryOptions = {}\n): MemoryHistory {\n let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n let entries: Location[]; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) =>\n createMemoryLocation(\n entry,\n typeof entry === \"string\" ? null : entry.state,\n index === 0 ? \"default\" : undefined\n )\n );\n let index = clampIndex(\n initialIndex == null ? entries.length - 1 : initialIndex\n );\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n function clampIndex(n: number): number {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation(): Location {\n return entries[index];\n }\n function createMemoryLocation(\n to: To,\n state: any = null,\n key?: string\n ): Location {\n let location = createLocation(\n entries ? getCurrentLocation().pathname : \"/\",\n to,\n state,\n key\n );\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in memory history: ${JSON.stringify(\n to\n )}`\n );\n return location;\n }\n\n function createHref(to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n let history: MemoryHistory = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to: To) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\",\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 1 });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 0 });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({ action, location: nextLocation, delta });\n }\n },\n listen(fn: Listener) {\n listener = fn;\n return () => {\n listener = null;\n };\n },\n };\n\n return history;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Browser History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A browser history stores the current location in regular URLs in a web\n * browser environment. This is the standard for most web apps and provides the\n * cleanest URLs the browser's address bar.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#browserhistory\n */\nexport interface BrowserHistory extends UrlHistory {}\n\nexport type BrowserHistoryOptions = UrlHistoryOptions;\n\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nexport function createBrowserHistory(\n options: BrowserHistoryOptions = {}\n): BrowserHistory {\n function createBrowserLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let { pathname, search, hash } = window.location;\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createBrowserHref(window: Window, to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n return getUrlBasedHistory(\n createBrowserLocation,\n createBrowserHref,\n null,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hash History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A hash history stores the current location in the fragment identifier portion\n * of the URL in a web browser environment.\n *\n * This is ideal for apps that do not control the server for some reason\n * (because the fragment identifier is never sent to the server), including some\n * shared hosting environments that do not provide fine-grained controls over\n * which pages are served at which URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#hashhistory\n */\nexport interface HashHistory extends UrlHistory {}\n\nexport type HashHistoryOptions = UrlHistoryOptions;\n\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nexport function createHashHistory(\n options: HashHistoryOptions = {}\n): HashHistory {\n function createHashLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n } = parsePath(window.location.hash.substr(1));\n\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createHashHref(window: Window, to: To) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n\n function validateHashLocation(location: Location, to: To) {\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in hash history.push(${JSON.stringify(\n to\n )})`\n );\n }\n\n return getUrlBasedHistory(\n createHashLocation,\n createHashHref,\n validateHashLocation,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region UTILS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nexport function invariant(value: boolean, message?: string): asserts value;\nexport function invariant(\n value: T | null | undefined,\n message?: string\n): asserts value is T;\nexport function invariant(value: any, message?: string) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\n\nexport function warning(cond: any, message: string) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience, so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location: Location, index: number): HistoryState {\n return {\n usr: location.state,\n key: location.key,\n idx: index,\n };\n}\n\n/**\n * Creates a Location object with a unique key from the given Path\n */\nexport function createLocation(\n current: string | Location,\n to: To,\n state: any = null,\n key?: string\n): Readonly {\n let location: Readonly = {\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\",\n ...(typeof to === \"string\" ? parsePath(to) : to),\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: (to && (to as Location).key) || key || createKey(),\n };\n return location;\n}\n\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nexport function createPath({\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n}: Partial) {\n if (search && search !== \"?\")\n pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\")\n pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nexport function parsePath(path: string): Partial {\n let parsedPath: Partial = {};\n\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n\n if (path) {\n parsedPath.pathname = path;\n }\n }\n\n return parsedPath;\n}\n\nexport interface UrlHistory extends History {}\n\nexport type UrlHistoryOptions = {\n window?: Window;\n v5Compat?: boolean;\n};\n\nfunction getUrlBasedHistory(\n getLocation: (window: Window, globalHistory: Window[\"history\"]) => Location,\n createHref: (window: Window, to: To) => string,\n validateLocation: ((location: Location, to: To) => void) | null,\n options: UrlHistoryOptions = {}\n): UrlHistory {\n let { window = document.defaultView!, v5Compat = false } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n let index = getIndex()!;\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n }\n\n function getIndex(): number {\n let state = globalHistory.state || { idx: null };\n return state.idx;\n }\n\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({ action, location: history.location, delta });\n }\n }\n\n function push(to: To, state?: any) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 1 });\n }\n }\n\n function replace(to: To, state?: any) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 0 });\n }\n }\n\n function createURL(to: To): URL {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base =\n window.location.origin !== \"null\"\n ? window.location.origin\n : window.location.href;\n\n let href = typeof to === \"string\" ? to : createPath(to);\n // Treating this as a full URL will strip any trailing spaces so we need to\n // pre-encode them since they might be part of a matching splat param from\n // an ancestor route\n href = href.replace(/ $/, \"%20\");\n invariant(\n base,\n `No window.location.(origin|href) available to create URL for href: ${href}`\n );\n return new URL(href, base);\n }\n\n let history: History = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn: Listener) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n },\n };\n\n return history;\n}\n\n//#endregion\n","import type { Location, Path, To } from \"./history\";\nimport { invariant, parsePath, warning } from \"./history\";\n\n/**\n * Map of routeId -> data returned from a loader/action/error\n */\nexport interface RouteData {\n [routeId: string]: any;\n}\n\nexport enum ResultType {\n data = \"data\",\n deferred = \"deferred\",\n redirect = \"redirect\",\n error = \"error\",\n}\n\n/**\n * Successful result from a loader or action\n */\nexport interface SuccessResult {\n type: ResultType.data;\n data: unknown;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Successful defer() result from a loader or action\n */\nexport interface DeferredResult {\n type: ResultType.deferred;\n deferredData: DeferredData;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Redirect result from a loader or action\n */\nexport interface RedirectResult {\n type: ResultType.redirect;\n // We keep the raw Response for redirects so we can return it verbatim\n response: Response;\n}\n\n/**\n * Unsuccessful result from a loader or action\n */\nexport interface ErrorResult {\n type: ResultType.error;\n error: unknown;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Result from a loader or action - potentially successful or unsuccessful\n */\nexport type DataResult =\n | SuccessResult\n | DeferredResult\n | RedirectResult\n | ErrorResult;\n\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase;\n\n/**\n * Users can specify either lowercase or uppercase form methods on `