diff --git a/dingus/codemirror/codemirror.css b/dingus/codemirror/codemirror.css new file mode 100644 index 0000000..f4d5718 --- /dev/null +++ b/dingus/codemirror/codemirror.css @@ -0,0 +1,344 @@ +/* BASICS */ + +.CodeMirror { + /* Set height, width, borders, and global font properties here */ + font-family: monospace; + height: 300px; + color: black; + direction: ltr; +} + +/* PADDING */ + +.CodeMirror-lines { + padding: 4px 0; /* Vertical padding around content */ +} +.CodeMirror pre.CodeMirror-line, +.CodeMirror pre.CodeMirror-line-like { + padding: 0 4px; /* Horizontal padding of content */ +} + +.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + background-color: white; /* The little square between H and V scrollbars */ +} + +/* GUTTER */ + +.CodeMirror-gutters { + border-right: 1px solid #ddd; + background-color: #f7f7f7; + white-space: nowrap; +} +.CodeMirror-linenumbers {} +.CodeMirror-linenumber { + padding: 0 3px 0 5px; + min-width: 20px; + text-align: right; + color: #999; + white-space: nowrap; +} + +.CodeMirror-guttermarker { color: black; } +.CodeMirror-guttermarker-subtle { color: #999; } + +/* CURSOR */ + +.CodeMirror-cursor { + border-left: 1px solid black; + border-right: none; + width: 0; +} +/* Shown when moving in bi-directional text */ +.CodeMirror div.CodeMirror-secondarycursor { + border-left: 1px solid silver; +} +.cm-fat-cursor .CodeMirror-cursor { + width: auto; + border: 0 !important; + background: #7e7; +} +.cm-fat-cursor div.CodeMirror-cursors { + z-index: 1; +} +.cm-fat-cursor .CodeMirror-line::selection, +.cm-fat-cursor .CodeMirror-line > span::selection, +.cm-fat-cursor .CodeMirror-line > span > span::selection { background: transparent; } +.cm-fat-cursor .CodeMirror-line::-moz-selection, +.cm-fat-cursor .CodeMirror-line > span::-moz-selection, +.cm-fat-cursor .CodeMirror-line > span > span::-moz-selection { background: transparent; } +.cm-fat-cursor { caret-color: transparent; } +@-moz-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@-webkit-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} + +/* Can style cursor different in overwrite (non-insert) mode */ +.CodeMirror-overwrite .CodeMirror-cursor {} + +.cm-tab { display: inline-block; text-decoration: inherit; } + +.CodeMirror-rulers { + position: absolute; + left: 0; right: 0; top: -50px; bottom: 0; + overflow: hidden; +} +.CodeMirror-ruler { + border-left: 1px solid #ccc; + top: 0; bottom: 0; + position: absolute; +} + +/* DEFAULT THEME */ + +.cm-s-default .cm-header {color: blue;} +.cm-s-default .cm-quote {color: #090;} +.cm-negative {color: #d44;} +.cm-positive {color: #292;} +.cm-header, .cm-strong {font-weight: bold;} +.cm-em {font-style: italic;} +.cm-link {text-decoration: underline;} +.cm-strikethrough {text-decoration: line-through;} + +.cm-s-default .cm-keyword {color: #708;} +.cm-s-default .cm-atom {color: #219;} +.cm-s-default .cm-number {color: #164;} +.cm-s-default .cm-def {color: #00f;} +.cm-s-default .cm-variable, +.cm-s-default .cm-punctuation, +.cm-s-default .cm-property, +.cm-s-default .cm-operator {} +.cm-s-default .cm-variable-2 {color: #05a;} +.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;} +.cm-s-default .cm-comment {color: #a50;} +.cm-s-default .cm-string {color: #a11;} +.cm-s-default .cm-string-2 {color: #f50;} +.cm-s-default .cm-meta {color: #555;} +.cm-s-default .cm-qualifier {color: #555;} +.cm-s-default .cm-builtin {color: #30a;} +.cm-s-default .cm-bracket {color: #997;} +.cm-s-default .cm-tag {color: #170;} +.cm-s-default .cm-attribute {color: #00c;} +.cm-s-default .cm-hr {color: #999;} +.cm-s-default .cm-link {color: #00c;} + +.cm-s-default .cm-error {color: #f00;} +.cm-invalidchar {color: #f00;} + +.CodeMirror-composing { border-bottom: 2px solid; } + +/* Default styles for common addons */ + +div.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;} +div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;} +.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } +.CodeMirror-activeline-background {background: #e8f2ff;} + +/* STOP */ + +/* The rest of this file contains styles related to the mechanics of + the editor. You probably shouldn't touch them. */ + +.CodeMirror { + position: relative; + overflow: hidden; + background: white; +} + +.CodeMirror-scroll { + overflow: scroll !important; /* Things will break if this is overridden */ + /* 50px is the magic margin used to hide the element's real scrollbars */ + /* See overflow: hidden in .CodeMirror */ + margin-bottom: -50px; margin-right: -50px; + padding-bottom: 50px; + height: 100%; + outline: none; /* Prevent dragging from highlighting the element */ + position: relative; + z-index: 0; +} +.CodeMirror-sizer { + position: relative; + border-right: 50px solid transparent; +} + +/* The fake, visible scrollbars. Used to force redraw during scrolling + before actual scrolling happens, thus preventing shaking and + flickering artifacts. */ +.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + position: absolute; + z-index: 6; + display: none; + outline: none; +} +.CodeMirror-vscrollbar { + right: 0; top: 0; + overflow-x: hidden; + overflow-y: scroll; +} +.CodeMirror-hscrollbar { + bottom: 0; left: 0; + overflow-y: hidden; + overflow-x: scroll; +} +.CodeMirror-scrollbar-filler { + right: 0; bottom: 0; +} +.CodeMirror-gutter-filler { + left: 0; bottom: 0; +} + +.CodeMirror-gutters { + position: absolute; left: 0; top: 0; + min-height: 100%; + z-index: 3; +} +.CodeMirror-gutter { + white-space: normal; + height: 100%; + display: inline-block; + vertical-align: top; + margin-bottom: -50px; +} +.CodeMirror-gutter-wrapper { + position: absolute; + z-index: 4; + background: none !important; + border: none !important; +} +.CodeMirror-gutter-background { + position: absolute; + top: 0; bottom: 0; + z-index: 4; +} +.CodeMirror-gutter-elt { + position: absolute; + cursor: default; + z-index: 4; +} +.CodeMirror-gutter-wrapper ::selection { background-color: transparent } +.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent } + +.CodeMirror-lines { + cursor: text; + min-height: 1px; /* prevents collapsing before first draw */ +} +.CodeMirror pre.CodeMirror-line, +.CodeMirror pre.CodeMirror-line-like { + /* Reset some styles that the rest of the page might have set */ + -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; + border-width: 0; + background: transparent; + font-family: inherit; + font-size: inherit; + margin: 0; + white-space: pre; + word-wrap: normal; + line-height: inherit; + color: inherit; + z-index: 2; + position: relative; + overflow: visible; + -webkit-tap-highlight-color: transparent; + -webkit-font-variant-ligatures: contextual; + font-variant-ligatures: contextual; +} +.CodeMirror-wrap pre.CodeMirror-line, +.CodeMirror-wrap pre.CodeMirror-line-like { + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal; +} + +.CodeMirror-linebackground { + position: absolute; + left: 0; right: 0; top: 0; bottom: 0; + z-index: 0; +} + +.CodeMirror-linewidget { + position: relative; + z-index: 2; + padding: 0.1px; /* Force widget margins to stay inside of the container */ +} + +.CodeMirror-widget {} + +.CodeMirror-rtl pre { direction: rtl; } + +.CodeMirror-code { + outline: none; +} + +/* Force content-box sizing for the elements where we expect it */ +.CodeMirror-scroll, +.CodeMirror-sizer, +.CodeMirror-gutter, +.CodeMirror-gutters, +.CodeMirror-linenumber { + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.CodeMirror-measure { + position: absolute; + width: 100%; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.CodeMirror-cursor { + position: absolute; + pointer-events: none; +} +.CodeMirror-measure pre { position: static; } + +div.CodeMirror-cursors { + visibility: hidden; + position: relative; + z-index: 3; +} +div.CodeMirror-dragcursors { + visibility: visible; +} + +.CodeMirror-focused div.CodeMirror-cursors { + visibility: visible; +} + +.CodeMirror-selected { background: #d9d9d9; } +.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } +.CodeMirror-crosshair { cursor: crosshair; } +.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; } +.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; } + +.cm-searching { + background-color: #ffa; + background-color: rgba(255, 255, 0, .4); +} + +/* Used to force a border model for a node */ +.cm-force-border { padding-right: .1px; } + +@media print { + /* Hide the cursor when printing */ + .CodeMirror div.CodeMirror-cursors { + visibility: hidden; + } +} + +/* See issue #2901 */ +.cm-tab-wrap-hack:after { content: ''; } + +/* Help users use markselection to safely style text background */ +span.CodeMirror-selectedtext { background: none; } diff --git a/dingus/codemirror/codemirror.js b/dingus/codemirror/codemirror.js new file mode 100644 index 0000000..e42b63b --- /dev/null +++ b/dingus/codemirror/codemirror.js @@ -0,0 +1,9884 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/5/LICENSE + +// This is CodeMirror (https://codemirror.net/5), a code editor +// implemented in JavaScript on top of the browser's DOM. +// +// You can find some technical background for some of the code below +// at http://marijnhaverbeke.nl/blog/#cm-internals . + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.CodeMirror = factory()); +}(this, (function () { 'use strict'; + + // Kludges for bugs and behavior differences that can't be feature + // detected are enabled based on userAgent etc sniffing. + var userAgent = navigator.userAgent; + var platform = navigator.platform; + + var gecko = /gecko\/\d/i.test(userAgent); + var ie_upto10 = /MSIE \d/.test(userAgent); + var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent); + var edge = /Edge\/(\d+)/.exec(userAgent); + var ie = ie_upto10 || ie_11up || edge; + var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]); + var webkit = !edge && /WebKit\//.test(userAgent); + var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent); + var chrome = !edge && /Chrome\/(\d+)/.exec(userAgent); + var chrome_version = chrome && +chrome[1]; + var presto = /Opera\//.test(userAgent); + var safari = /Apple Computer/.test(navigator.vendor); + var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent); + var phantom = /PhantomJS/.test(userAgent); + + var ios = safari && (/Mobile\/\w+/.test(userAgent) || navigator.maxTouchPoints > 2); + var android = /Android/.test(userAgent); + // This is woefully incomplete. Suggestions for alternative methods welcome. + var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent); + var mac = ios || /Mac/.test(platform); + var chromeOS = /\bCrOS\b/.test(userAgent); + var windows = /win/i.test(platform); + + var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/); + if (presto_version) { presto_version = Number(presto_version[1]); } + if (presto_version && presto_version >= 15) { presto = false; webkit = true; } + // Some browsers use the wrong event properties to signal cmd/ctrl on OS X + var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); + var captureRightClick = gecko || (ie && ie_version >= 9); + + function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") } + + var rmClass = function(node, cls) { + var current = node.className; + var match = classTest(cls).exec(current); + if (match) { + var after = current.slice(match.index + match[0].length); + node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); + } + }; + + function removeChildren(e) { + for (var count = e.childNodes.length; count > 0; --count) + { e.removeChild(e.firstChild); } + return e + } + + function removeChildrenAndAdd(parent, e) { + return removeChildren(parent).appendChild(e) + } + + function elt(tag, content, className, style) { + var e = document.createElement(tag); + if (className) { e.className = className; } + if (style) { e.style.cssText = style; } + if (typeof content == "string") { e.appendChild(document.createTextNode(content)); } + else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } } + return e + } + // wrapper for elt, which removes the elt from the accessibility tree + function eltP(tag, content, className, style) { + var e = elt(tag, content, className, style); + e.setAttribute("role", "presentation"); + return e + } + + var range; + if (document.createRange) { range = function(node, start, end, endNode) { + var r = document.createRange(); + r.setEnd(endNode || node, end); + r.setStart(node, start); + return r + }; } + else { range = function(node, start, end) { + var r = document.body.createTextRange(); + try { r.moveToElementText(node.parentNode); } + catch(e) { return r } + r.collapse(true); + r.moveEnd("character", end); + r.moveStart("character", start); + return r + }; } + + function contains(parent, child) { + if (child.nodeType == 3) // Android browser always returns false when child is a textnode + { child = child.parentNode; } + if (parent.contains) + { return parent.contains(child) } + do { + if (child.nodeType == 11) { child = child.host; } + if (child == parent) { return true } + } while (child = child.parentNode) + } + + function activeElt(rootNode) { + // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement. + // IE < 10 will throw when accessed while the page is loading or in an iframe. + // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable. + var doc = rootNode.ownerDocument || rootNode; + var activeElement; + try { + activeElement = rootNode.activeElement; + } catch(e) { + activeElement = doc.body || null; + } + while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) + { activeElement = activeElement.shadowRoot.activeElement; } + return activeElement + } + + function addClass(node, cls) { + var current = node.className; + if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls; } + } + function joinClasses(a, b) { + var as = a.split(" "); + for (var i = 0; i < as.length; i++) + { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i]; } } + return b + } + + var selectInput = function(node) { node.select(); }; + if (ios) // Mobile Safari apparently has a bug where select() is broken. + { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; } + else if (ie) // Suppress mysterious IE10 errors + { selectInput = function(node) { try { node.select(); } catch(_e) {} }; } + + function doc(cm) { return cm.display.wrapper.ownerDocument } + + function root(cm) { + return rootNode(cm.display.wrapper) + } + + function rootNode(element) { + // Detect modern browsers (2017+). + return element.getRootNode ? element.getRootNode() : element.ownerDocument + } + + function win(cm) { return doc(cm).defaultView } + + function bind(f) { + var args = Array.prototype.slice.call(arguments, 1); + return function(){return f.apply(null, args)} + } + + function copyObj(obj, target, overwrite) { + if (!target) { target = {}; } + for (var prop in obj) + { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) + { target[prop] = obj[prop]; } } + return target + } + + // Counts the column offset in a string, taking tabs into account. + // Used mostly to find indentation. + function countColumn(string, end, tabSize, startIndex, startValue) { + if (end == null) { + end = string.search(/[^\s\u00a0]/); + if (end == -1) { end = string.length; } + } + for (var i = startIndex || 0, n = startValue || 0;;) { + var nextTab = string.indexOf("\t", i); + if (nextTab < 0 || nextTab >= end) + { return n + (end - i) } + n += nextTab - i; + n += tabSize - (n % tabSize); + i = nextTab + 1; + } + } + + var Delayed = function() { + this.id = null; + this.f = null; + this.time = 0; + this.handler = bind(this.onTimeout, this); + }; + Delayed.prototype.onTimeout = function (self) { + self.id = 0; + if (self.time <= +new Date) { + self.f(); + } else { + setTimeout(self.handler, self.time - +new Date); + } + }; + Delayed.prototype.set = function (ms, f) { + this.f = f; + var time = +new Date + ms; + if (!this.id || time < this.time) { + clearTimeout(this.id); + this.id = setTimeout(this.handler, ms); + this.time = time; + } + }; + + function indexOf(array, elt) { + for (var i = 0; i < array.length; ++i) + { if (array[i] == elt) { return i } } + return -1 + } + + // Number of pixels added to scroller and sizer to hide scrollbar + var scrollerGap = 50; + + // Returned or thrown by various protocols to signal 'I'm not + // handling this'. + var Pass = {toString: function(){return "CodeMirror.Pass"}}; + + // Reused option objects for setSelection & friends + var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"}; + + // The inverse of countColumn -- find the offset that corresponds to + // a particular column. + function findColumn(string, goal, tabSize) { + for (var pos = 0, col = 0;;) { + var nextTab = string.indexOf("\t", pos); + if (nextTab == -1) { nextTab = string.length; } + var skipped = nextTab - pos; + if (nextTab == string.length || col + skipped >= goal) + { return pos + Math.min(skipped, goal - col) } + col += nextTab - pos; + col += tabSize - (col % tabSize); + pos = nextTab + 1; + if (col >= goal) { return pos } + } + } + + var spaceStrs = [""]; + function spaceStr(n) { + while (spaceStrs.length <= n) + { spaceStrs.push(lst(spaceStrs) + " "); } + return spaceStrs[n] + } + + function lst(arr) { return arr[arr.length-1] } + + function map(array, f) { + var out = []; + for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); } + return out + } + + function insertSorted(array, value, score) { + var pos = 0, priority = score(value); + while (pos < array.length && score(array[pos]) <= priority) { pos++; } + array.splice(pos, 0, value); + } + + function nothing() {} + + function createObj(base, props) { + var inst; + if (Object.create) { + inst = Object.create(base); + } else { + nothing.prototype = base; + inst = new nothing(); + } + if (props) { copyObj(props, inst); } + return inst + } + + var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; + function isWordCharBasic(ch) { + return /\w/.test(ch) || ch > "\x80" && + (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)) + } + function isWordChar(ch, helper) { + if (!helper) { return isWordCharBasic(ch) } + if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true } + return helper.test(ch) + } + + function isEmpty(obj) { + for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } } + return true + } + + // Extending unicode characters. A series of a non-extending char + + // any number of extending chars is treated as a single unit as far + // as editing and measuring is concerned. This is not fully correct, + // since some scripts/fonts/browsers also treat other configurations + // of code points as a group. + var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; + function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) } + + // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range. + function skipExtendingChars(str, pos, dir) { + while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; } + return pos + } + + // Returns the value from the range [`from`; `to`] that satisfies + // `pred` and is closest to `from`. Assumes that at least `to` + // satisfies `pred`. Supports `from` being greater than `to`. + function findFirst(pred, from, to) { + // At any point we are certain `to` satisfies `pred`, don't know + // whether `from` does. + var dir = from > to ? -1 : 1; + for (;;) { + if (from == to) { return from } + var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF); + if (mid == from) { return pred(mid) ? from : to } + if (pred(mid)) { to = mid; } + else { from = mid + dir; } + } + } + + // BIDI HELPERS + + function iterateBidiSections(order, from, to, f) { + if (!order) { return f(from, to, "ltr", 0) } + var found = false; + for (var i = 0; i < order.length; ++i) { + var part = order[i]; + if (part.from < to && part.to > from || from == to && part.to == from) { + f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i); + found = true; + } + } + if (!found) { f(from, to, "ltr"); } + } + + var bidiOther = null; + function getBidiPartAt(order, ch, sticky) { + var found; + bidiOther = null; + for (var i = 0; i < order.length; ++i) { + var cur = order[i]; + if (cur.from < ch && cur.to > ch) { return i } + if (cur.to == ch) { + if (cur.from != cur.to && sticky == "before") { found = i; } + else { bidiOther = i; } + } + if (cur.from == ch) { + if (cur.from != cur.to && sticky != "before") { found = i; } + else { bidiOther = i; } + } + } + return found != null ? found : bidiOther + } + + // Bidirectional ordering algorithm + // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm + // that this (partially) implements. + + // One-char codes used for character types: + // L (L): Left-to-Right + // R (R): Right-to-Left + // r (AL): Right-to-Left Arabic + // 1 (EN): European Number + // + (ES): European Number Separator + // % (ET): European Number Terminator + // n (AN): Arabic Number + // , (CS): Common Number Separator + // m (NSM): Non-Spacing Mark + // b (BN): Boundary Neutral + // s (B): Paragraph Separator + // t (S): Segment Separator + // w (WS): Whitespace + // N (ON): Other Neutrals + + // Returns null if characters are ordered as they appear + // (left-to-right), or an array of sections ({from, to, level} + // objects) in the order in which they occur visually. + var bidiOrdering = (function() { + // Character types for codepoints 0 to 0xff + var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; + // Character types for codepoints 0x600 to 0x6f9 + var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111"; + function charType(code) { + if (code <= 0xf7) { return lowTypes.charAt(code) } + else if (0x590 <= code && code <= 0x5f4) { return "R" } + else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) } + else if (0x6ee <= code && code <= 0x8ac) { return "r" } + else if (0x2000 <= code && code <= 0x200b) { return "w" } + else if (code == 0x200c) { return "b" } + else { return "L" } + } + + var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; + var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; + + function BidiSpan(level, from, to) { + this.level = level; + this.from = from; this.to = to; + } + + return function(str, direction) { + var outerType = direction == "ltr" ? "L" : "R"; + + if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { return false } + var len = str.length, types = []; + for (var i = 0; i < len; ++i) + { types.push(charType(str.charCodeAt(i))); } + + // W1. Examine each non-spacing mark (NSM) in the level run, and + // change the type of the NSM to the type of the previous + // character. If the NSM is at the start of the level run, it will + // get the type of sor. + for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) { + var type = types[i$1]; + if (type == "m") { types[i$1] = prev; } + else { prev = type; } + } + + // W2. Search backwards from each instance of a European number + // until the first strong type (R, L, AL, or sor) is found. If an + // AL is found, change the type of the European number to Arabic + // number. + // W3. Change all ALs to R. + for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) { + var type$1 = types[i$2]; + if (type$1 == "1" && cur == "r") { types[i$2] = "n"; } + else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "R"; } } + } + + // W4. A single European separator between two European numbers + // changes to a European number. A single common separator between + // two numbers of the same type changes to that type. + for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) { + var type$2 = types[i$3]; + if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1"; } + else if (type$2 == "," && prev$1 == types[i$3+1] && + (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1; } + prev$1 = type$2; + } + + // W5. A sequence of European terminators adjacent to European + // numbers changes to all European numbers. + // W6. Otherwise, separators and terminators change to Other + // Neutral. + for (var i$4 = 0; i$4 < len; ++i$4) { + var type$3 = types[i$4]; + if (type$3 == ",") { types[i$4] = "N"; } + else if (type$3 == "%") { + var end = (void 0); + for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {} + var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"; + for (var j = i$4; j < end; ++j) { types[j] = replace; } + i$4 = end - 1; + } + } + + // W7. Search backwards from each instance of a European number + // until the first strong type (R, L, or sor) is found. If an L is + // found, then change the type of the European number to L. + for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) { + var type$4 = types[i$5]; + if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L"; } + else if (isStrong.test(type$4)) { cur$1 = type$4; } + } + + // N1. A sequence of neutrals takes the direction of the + // surrounding strong text if the text on both sides has the same + // direction. European and Arabic numbers act as if they were R in + // terms of their influence on neutrals. Start-of-level-run (sor) + // and end-of-level-run (eor) are used at level run boundaries. + // N2. Any remaining neutrals take the embedding direction. + for (var i$6 = 0; i$6 < len; ++i$6) { + if (isNeutral.test(types[i$6])) { + var end$1 = (void 0); + for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {} + var before = (i$6 ? types[i$6-1] : outerType) == "L"; + var after = (end$1 < len ? types[end$1] : outerType) == "L"; + var replace$1 = before == after ? (before ? "L" : "R") : outerType; + for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; } + i$6 = end$1 - 1; + } + } + + // Here we depart from the documented algorithm, in order to avoid + // building up an actual levels array. Since there are only three + // levels (0, 1, 2) in an implementation that doesn't take + // explicit embedding into account, we can build up the order on + // the fly, without following the level-based algorithm. + var order = [], m; + for (var i$7 = 0; i$7 < len;) { + if (countsAsLeft.test(types[i$7])) { + var start = i$7; + for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {} + order.push(new BidiSpan(0, start, i$7)); + } else { + var pos = i$7, at = order.length, isRTL = direction == "rtl" ? 1 : 0; + for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {} + for (var j$2 = pos; j$2 < i$7;) { + if (countsAsNum.test(types[j$2])) { + if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; } + var nstart = j$2; + for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {} + order.splice(at, 0, new BidiSpan(2, nstart, j$2)); + at += isRTL; + pos = j$2; + } else { ++j$2; } + } + if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); } + } + } + if (direction == "ltr") { + if (order[0].level == 1 && (m = str.match(/^\s+/))) { + order[0].from = m[0].length; + order.unshift(new BidiSpan(0, 0, m[0].length)); + } + if (lst(order).level == 1 && (m = str.match(/\s+$/))) { + lst(order).to -= m[0].length; + order.push(new BidiSpan(0, len - m[0].length, len)); + } + } + + return direction == "rtl" ? order.reverse() : order + } + })(); + + // Get the bidi ordering for the given line (and cache it). Returns + // false for lines that are fully left-to-right, and an array of + // BidiSpan objects otherwise. + function getOrder(line, direction) { + var order = line.order; + if (order == null) { order = line.order = bidiOrdering(line.text, direction); } + return order + } + + // EVENT HANDLING + + // Lightweight event framework. on/off also work on DOM nodes, + // registering native DOM handlers. + + var noHandlers = []; + + var on = function(emitter, type, f) { + if (emitter.addEventListener) { + emitter.addEventListener(type, f, false); + } else if (emitter.attachEvent) { + emitter.attachEvent("on" + type, f); + } else { + var map = emitter._handlers || (emitter._handlers = {}); + map[type] = (map[type] || noHandlers).concat(f); + } + }; + + function getHandlers(emitter, type) { + return emitter._handlers && emitter._handlers[type] || noHandlers + } + + function off(emitter, type, f) { + if (emitter.removeEventListener) { + emitter.removeEventListener(type, f, false); + } else if (emitter.detachEvent) { + emitter.detachEvent("on" + type, f); + } else { + var map = emitter._handlers, arr = map && map[type]; + if (arr) { + var index = indexOf(arr, f); + if (index > -1) + { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); } + } + } + } + + function signal(emitter, type /*, values...*/) { + var handlers = getHandlers(emitter, type); + if (!handlers.length) { return } + var args = Array.prototype.slice.call(arguments, 2); + for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); } + } + + // The DOM events that CodeMirror handles can be overridden by + // registering a (non-DOM) handler on the editor for the event name, + // and preventDefault-ing the event in that handler. + function signalDOMEvent(cm, e, override) { + if (typeof e == "string") + { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; } + signal(cm, override || e.type, cm, e); + return e_defaultPrevented(e) || e.codemirrorIgnore + } + + function signalCursorActivity(cm) { + var arr = cm._handlers && cm._handlers.cursorActivity; + if (!arr) { return } + var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); + for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1) + { set.push(arr[i]); } } + } + + function hasHandler(emitter, type) { + return getHandlers(emitter, type).length > 0 + } + + // Add on and off methods to a constructor's prototype, to make + // registering events on such objects more convenient. + function eventMixin(ctor) { + ctor.prototype.on = function(type, f) {on(this, type, f);}; + ctor.prototype.off = function(type, f) {off(this, type, f);}; + } + + // Due to the fact that we still support jurassic IE versions, some + // compatibility wrappers are needed. + + function e_preventDefault(e) { + if (e.preventDefault) { e.preventDefault(); } + else { e.returnValue = false; } + } + function e_stopPropagation(e) { + if (e.stopPropagation) { e.stopPropagation(); } + else { e.cancelBubble = true; } + } + function e_defaultPrevented(e) { + return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false + } + function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);} + + function e_target(e) {return e.target || e.srcElement} + function e_button(e) { + var b = e.which; + if (b == null) { + if (e.button & 1) { b = 1; } + else if (e.button & 2) { b = 3; } + else if (e.button & 4) { b = 2; } + } + if (mac && e.ctrlKey && b == 1) { b = 3; } + return b + } + + // Detect drag-and-drop + var dragAndDrop = function() { + // There is *some* kind of drag-and-drop support in IE6-8, but I + // couldn't get it to work yet. + if (ie && ie_version < 9) { return false } + var div = elt('div'); + return "draggable" in div || "dragDrop" in div + }(); + + var zwspSupported; + function zeroWidthElement(measure) { + if (zwspSupported == null) { + var test = elt("span", "\u200b"); + removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); + if (measure.firstChild.offsetHeight != 0) + { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); } + } + var node = zwspSupported ? elt("span", "\u200b") : + elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); + node.setAttribute("cm-text", ""); + return node + } + + // Feature-detect IE's crummy client rect reporting for bidi text + var badBidiRects; + function hasBadBidiRects(measure) { + if (badBidiRects != null) { return badBidiRects } + var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); + var r0 = range(txt, 0, 1).getBoundingClientRect(); + var r1 = range(txt, 1, 2).getBoundingClientRect(); + removeChildren(measure); + if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780) + return badBidiRects = (r1.right - r0.right < 3) + } + + // See if "".split is the broken IE version, if so, provide an + // alternative way to split lines. + var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) { + var pos = 0, result = [], l = string.length; + while (pos <= l) { + var nl = string.indexOf("\n", pos); + if (nl == -1) { nl = string.length; } + var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); + var rt = line.indexOf("\r"); + if (rt != -1) { + result.push(line.slice(0, rt)); + pos += rt + 1; + } else { + result.push(line); + pos = nl + 1; + } + } + return result + } : function (string) { return string.split(/\r\n?|\n/); }; + + var hasSelection = window.getSelection ? function (te) { + try { return te.selectionStart != te.selectionEnd } + catch(e) { return false } + } : function (te) { + var range; + try {range = te.ownerDocument.selection.createRange();} + catch(e) {} + if (!range || range.parentElement() != te) { return false } + return range.compareEndPoints("StartToEnd", range) != 0 + }; + + var hasCopyEvent = (function () { + var e = elt("div"); + if ("oncopy" in e) { return true } + e.setAttribute("oncopy", "return;"); + return typeof e.oncopy == "function" + })(); + + var badZoomedRects = null; + function hasBadZoomedRects(measure) { + if (badZoomedRects != null) { return badZoomedRects } + var node = removeChildrenAndAdd(measure, elt("span", "x")); + var normal = node.getBoundingClientRect(); + var fromRange = range(node, 0, 1).getBoundingClientRect(); + return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1 + } + + // Known modes, by name and by MIME + var modes = {}, mimeModes = {}; + + // Extra arguments are stored as the mode's dependencies, which is + // used by (legacy) mechanisms like loadmode.js to automatically + // load a mode. (Preferred mechanism is the require/define calls.) + function defineMode(name, mode) { + if (arguments.length > 2) + { mode.dependencies = Array.prototype.slice.call(arguments, 2); } + modes[name] = mode; + } + + function defineMIME(mime, spec) { + mimeModes[mime] = spec; + } + + // Given a MIME type, a {name, ...options} config object, or a name + // string, return a mode config object. + function resolveMode(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { + spec = mimeModes[spec]; + } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { + var found = mimeModes[spec.name]; + if (typeof found == "string") { found = {name: found}; } + spec = createObj(found, spec); + spec.name = found.name; + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { + return resolveMode("application/xml") + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) { + return resolveMode("application/json") + } + if (typeof spec == "string") { return {name: spec} } + else { return spec || {name: "null"} } + } + + // Given a mode spec (anything that resolveMode accepts), find and + // initialize an actual mode object. + function getMode(options, spec) { + spec = resolveMode(spec); + var mfactory = modes[spec.name]; + if (!mfactory) { return getMode(options, "text/plain") } + var modeObj = mfactory(options, spec); + if (modeExtensions.hasOwnProperty(spec.name)) { + var exts = modeExtensions[spec.name]; + for (var prop in exts) { + if (!exts.hasOwnProperty(prop)) { continue } + if (modeObj.hasOwnProperty(prop)) { modeObj["_" + prop] = modeObj[prop]; } + modeObj[prop] = exts[prop]; + } + } + modeObj.name = spec.name; + if (spec.helperType) { modeObj.helperType = spec.helperType; } + if (spec.modeProps) { for (var prop$1 in spec.modeProps) + { modeObj[prop$1] = spec.modeProps[prop$1]; } } + + return modeObj + } + + // This can be used to attach properties to mode objects from + // outside the actual mode definition. + var modeExtensions = {}; + function extendMode(mode, properties) { + var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); + copyObj(properties, exts); + } + + function copyState(mode, state) { + if (state === true) { return state } + if (mode.copyState) { return mode.copyState(state) } + var nstate = {}; + for (var n in state) { + var val = state[n]; + if (val instanceof Array) { val = val.concat([]); } + nstate[n] = val; + } + return nstate + } + + // Given a mode and a state (for that mode), find the inner mode and + // state at the position that the state refers to. + function innerMode(mode, state) { + var info; + while (mode.innerMode) { + info = mode.innerMode(state); + if (!info || info.mode == mode) { break } + state = info.state; + mode = info.mode; + } + return info || {mode: mode, state: state} + } + + function startState(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true + } + + // STRING STREAM + + // Fed to the mode parsers, provides helper functions to make + // parsers more succinct. + + var StringStream = function(string, tabSize, lineOracle) { + this.pos = this.start = 0; + this.string = string; + this.tabSize = tabSize || 8; + this.lastColumnPos = this.lastColumnValue = 0; + this.lineStart = 0; + this.lineOracle = lineOracle; + }; + + StringStream.prototype.eol = function () {return this.pos >= this.string.length}; + StringStream.prototype.sol = function () {return this.pos == this.lineStart}; + StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined}; + StringStream.prototype.next = function () { + if (this.pos < this.string.length) + { return this.string.charAt(this.pos++) } + }; + StringStream.prototype.eat = function (match) { + var ch = this.string.charAt(this.pos); + var ok; + if (typeof match == "string") { ok = ch == match; } + else { ok = ch && (match.test ? match.test(ch) : match(ch)); } + if (ok) {++this.pos; return ch} + }; + StringStream.prototype.eatWhile = function (match) { + var start = this.pos; + while (this.eat(match)){} + return this.pos > start + }; + StringStream.prototype.eatSpace = function () { + var start = this.pos; + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; } + return this.pos > start + }; + StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;}; + StringStream.prototype.skipTo = function (ch) { + var found = this.string.indexOf(ch, this.pos); + if (found > -1) {this.pos = found; return true} + }; + StringStream.prototype.backUp = function (n) {this.pos -= n;}; + StringStream.prototype.column = function () { + if (this.lastColumnPos < this.start) { + this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); + this.lastColumnPos = this.start; + } + return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) + }; + StringStream.prototype.indentation = function () { + return countColumn(this.string, null, this.tabSize) - + (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) + }; + StringStream.prototype.match = function (pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; }; + var substr = this.string.substr(this.pos, pattern.length); + if (cased(substr) == cased(pattern)) { + if (consume !== false) { this.pos += pattern.length; } + return true + } + } else { + var match = this.string.slice(this.pos).match(pattern); + if (match && match.index > 0) { return null } + if (match && consume !== false) { this.pos += match[0].length; } + return match + } + }; + StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)}; + StringStream.prototype.hideFirstChars = function (n, inner) { + this.lineStart += n; + try { return inner() } + finally { this.lineStart -= n; } + }; + StringStream.prototype.lookAhead = function (n) { + var oracle = this.lineOracle; + return oracle && oracle.lookAhead(n) + }; + StringStream.prototype.baseToken = function () { + var oracle = this.lineOracle; + return oracle && oracle.baseToken(this.pos) + }; + + // Find the line object corresponding to the given line number. + function getLine(doc, n) { + n -= doc.first; + if (n < 0 || n >= doc.size) { throw new Error("There is no line " + (n + doc.first) + " in the document.") } + var chunk = doc; + while (!chunk.lines) { + for (var i = 0;; ++i) { + var child = chunk.children[i], sz = child.chunkSize(); + if (n < sz) { chunk = child; break } + n -= sz; + } + } + return chunk.lines[n] + } + + // Get the part of a document between two positions, as an array of + // strings. + function getBetween(doc, start, end) { + var out = [], n = start.line; + doc.iter(start.line, end.line + 1, function (line) { + var text = line.text; + if (n == end.line) { text = text.slice(0, end.ch); } + if (n == start.line) { text = text.slice(start.ch); } + out.push(text); + ++n; + }); + return out + } + // Get the lines between from and to, as array of strings. + function getLines(doc, from, to) { + var out = []; + doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value + return out + } + + // Update the height of a line, propagating the height change + // upwards to parent nodes. + function updateLineHeight(line, height) { + var diff = height - line.height; + if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } } + } + + // Given a line object, find its line number by walking up through + // its parent links. + function lineNo(line) { + if (line.parent == null) { return null } + var cur = line.parent, no = indexOf(cur.lines, line); + for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { + for (var i = 0;; ++i) { + if (chunk.children[i] == cur) { break } + no += chunk.children[i].chunkSize(); + } + } + return no + cur.first + } + + // Find the line at the given vertical position, using the height + // information in the document tree. + function lineAtHeight(chunk, h) { + var n = chunk.first; + outer: do { + for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) { + var child = chunk.children[i$1], ch = child.height; + if (h < ch) { chunk = child; continue outer } + h -= ch; + n += child.chunkSize(); + } + return n + } while (!chunk.lines) + var i = 0; + for (; i < chunk.lines.length; ++i) { + var line = chunk.lines[i], lh = line.height; + if (h < lh) { break } + h -= lh; + } + return n + i + } + + function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size} + + function lineNumberFor(options, i) { + return String(options.lineNumberFormatter(i + options.firstLineNumber)) + } + + // A Pos instance represents a position within the text. + function Pos(line, ch, sticky) { + if ( sticky === void 0 ) sticky = null; + + if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) } + this.line = line; + this.ch = ch; + this.sticky = sticky; + } + + // Compare two positions, return 0 if they are the same, a negative + // number when a is less, and a positive number otherwise. + function cmp(a, b) { return a.line - b.line || a.ch - b.ch } + + function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 } + + function copyPos(x) {return Pos(x.line, x.ch)} + function maxPos(a, b) { return cmp(a, b) < 0 ? b : a } + function minPos(a, b) { return cmp(a, b) < 0 ? a : b } + + // Most of the external API clips given positions to make sure they + // actually exist within the document. + function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))} + function clipPos(doc, pos) { + if (pos.line < doc.first) { return Pos(doc.first, 0) } + var last = doc.first + doc.size - 1; + if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) } + return clipToLen(pos, getLine(doc, pos.line).text.length) + } + function clipToLen(pos, linelen) { + var ch = pos.ch; + if (ch == null || ch > linelen) { return Pos(pos.line, linelen) } + else if (ch < 0) { return Pos(pos.line, 0) } + else { return pos } + } + function clipPosArray(doc, array) { + var out = []; + for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); } + return out + } + + var SavedContext = function(state, lookAhead) { + this.state = state; + this.lookAhead = lookAhead; + }; + + var Context = function(doc, state, line, lookAhead) { + this.state = state; + this.doc = doc; + this.line = line; + this.maxLookAhead = lookAhead || 0; + this.baseTokens = null; + this.baseTokenPos = 1; + }; + + Context.prototype.lookAhead = function (n) { + var line = this.doc.getLine(this.line + n); + if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; } + return line + }; + + Context.prototype.baseToken = function (n) { + if (!this.baseTokens) { return null } + while (this.baseTokens[this.baseTokenPos] <= n) + { this.baseTokenPos += 2; } + var type = this.baseTokens[this.baseTokenPos + 1]; + return {type: type && type.replace(/( |^)overlay .*/, ""), + size: this.baseTokens[this.baseTokenPos] - n} + }; + + Context.prototype.nextLine = function () { + this.line++; + if (this.maxLookAhead > 0) { this.maxLookAhead--; } + }; + + Context.fromSaved = function (doc, saved, line) { + if (saved instanceof SavedContext) + { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) } + else + { return new Context(doc, copyState(doc.mode, saved), line) } + }; + + Context.prototype.save = function (copy) { + var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state; + return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state + }; + + + // Compute a style array (an array starting with a mode generation + // -- for invalidation -- followed by pairs of end positions and + // style strings), which is used to highlight the tokens on the + // line. + function highlightLine(cm, line, context, forceToEnd) { + // A styles array always starts with a number identifying the + // mode/overlays that it is based on (for easy invalidation). + var st = [cm.state.modeGen], lineClasses = {}; + // Compute the base array of styles + runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); }, + lineClasses, forceToEnd); + var state = context.state; + + // Run overlays, adjust style array. + var loop = function ( o ) { + context.baseTokens = st; + var overlay = cm.state.overlays[o], i = 1, at = 0; + context.state = true; + runMode(cm, line.text, overlay.mode, context, function (end, style) { + var start = i; + // Ensure there's a token end at the current position, and that i points at it + while (at < end) { + var i_end = st[i]; + if (i_end > end) + { st.splice(i, 1, end, st[i+1], i_end); } + i += 2; + at = Math.min(end, i_end); + } + if (!style) { return } + if (overlay.opaque) { + st.splice(start, i - start, end, "overlay " + style); + i = start + 2; + } else { + for (; start < i; start += 2) { + var cur = st[start+1]; + st[start+1] = (cur ? cur + " " : "") + "overlay " + style; + } + } + }, lineClasses); + context.state = state; + context.baseTokens = null; + context.baseTokenPos = 1; + }; + + for (var o = 0; o < cm.state.overlays.length; ++o) loop( o ); + + return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null} + } + + function getLineStyles(cm, line, updateFrontier) { + if (!line.styles || line.styles[0] != cm.state.modeGen) { + var context = getContextBefore(cm, lineNo(line)); + var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state); + var result = highlightLine(cm, line, context); + if (resetState) { context.state = resetState; } + line.stateAfter = context.save(!resetState); + line.styles = result.styles; + if (result.classes) { line.styleClasses = result.classes; } + else if (line.styleClasses) { line.styleClasses = null; } + if (updateFrontier === cm.doc.highlightFrontier) + { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); } + } + return line.styles + } + + function getContextBefore(cm, n, precise) { + var doc = cm.doc, display = cm.display; + if (!doc.mode.startState) { return new Context(doc, true, n) } + var start = findStartLine(cm, n, precise); + var saved = start > doc.first && getLine(doc, start - 1).stateAfter; + var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start); + + doc.iter(start, n, function (line) { + processLine(cm, line.text, context); + var pos = context.line; + line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null; + context.nextLine(); + }); + if (precise) { doc.modeFrontier = context.line; } + return context + } + + // Lightweight form of highlight -- proceed over this line and + // update state, but don't save a style array. Used for lines that + // aren't currently visible. + function processLine(cm, text, context, startAt) { + var mode = cm.doc.mode; + var stream = new StringStream(text, cm.options.tabSize, context); + stream.start = stream.pos = startAt || 0; + if (text == "") { callBlankLine(mode, context.state); } + while (!stream.eol()) { + readToken(mode, stream, context.state); + stream.start = stream.pos; + } + } + + function callBlankLine(mode, state) { + if (mode.blankLine) { return mode.blankLine(state) } + if (!mode.innerMode) { return } + var inner = innerMode(mode, state); + if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) } + } + + function readToken(mode, stream, state, inner) { + for (var i = 0; i < 10; i++) { + if (inner) { inner[0] = innerMode(mode, state).mode; } + var style = mode.token(stream, state); + if (stream.pos > stream.start) { return style } + } + throw new Error("Mode " + mode.name + " failed to advance stream.") + } + + var Token = function(stream, type, state) { + this.start = stream.start; this.end = stream.pos; + this.string = stream.current(); + this.type = type || null; + this.state = state; + }; + + // Utility for getTokenAt and getLineTokens + function takeToken(cm, pos, precise, asArray) { + var doc = cm.doc, mode = doc.mode, style; + pos = clipPos(doc, pos); + var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise); + var stream = new StringStream(line.text, cm.options.tabSize, context), tokens; + if (asArray) { tokens = []; } + while ((asArray || stream.pos < pos.ch) && !stream.eol()) { + stream.start = stream.pos; + style = readToken(mode, stream, context.state); + if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); } + } + return asArray ? tokens : new Token(stream, style, context.state) + } + + function extractLineClasses(type, output) { + if (type) { for (;;) { + var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); + if (!lineClass) { break } + type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); + var prop = lineClass[1] ? "bgClass" : "textClass"; + if (output[prop] == null) + { output[prop] = lineClass[2]; } + else if (!(new RegExp("(?:^|\\s)" + lineClass[2] + "(?:$|\\s)")).test(output[prop])) + { output[prop] += " " + lineClass[2]; } + } } + return type + } + + // Run the given mode's parser over a line, calling f for each token. + function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) { + var flattenSpans = mode.flattenSpans; + if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; } + var curStart = 0, curStyle = null; + var stream = new StringStream(text, cm.options.tabSize, context), style; + var inner = cm.options.addModeClass && [null]; + if (text == "") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); } + while (!stream.eol()) { + if (stream.pos > cm.options.maxHighlightLength) { + flattenSpans = false; + if (forceToEnd) { processLine(cm, text, context, stream.pos); } + stream.pos = text.length; + style = null; + } else { + style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses); + } + if (inner) { + var mName = inner[0].name; + if (mName) { style = "m-" + (style ? mName + " " + style : mName); } + } + if (!flattenSpans || curStyle != style) { + while (curStart < stream.start) { + curStart = Math.min(stream.start, curStart + 5000); + f(curStart, curStyle); + } + curStyle = style; + } + stream.start = stream.pos; + } + while (curStart < stream.pos) { + // Webkit seems to refuse to render text nodes longer than 57444 + // characters, and returns inaccurate measurements in nodes + // starting around 5000 chars. + var pos = Math.min(stream.pos, curStart + 5000); + f(pos, curStyle); + curStart = pos; + } + } + + // Finds the line to start with when starting a parse. Tries to + // find a line with a stateAfter, so that it can start with a + // valid state. If that fails, it returns the line with the + // smallest indentation, which tends to need the least context to + // parse correctly. + function findStartLine(cm, n, precise) { + var minindent, minline, doc = cm.doc; + var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); + for (var search = n; search > lim; --search) { + if (search <= doc.first) { return doc.first } + var line = getLine(doc, search - 1), after = line.stateAfter; + if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier)) + { return search } + var indented = countColumn(line.text, null, cm.options.tabSize); + if (minline == null || minindent > indented) { + minline = search - 1; + minindent = indented; + } + } + return minline + } + + function retreatFrontier(doc, n) { + doc.modeFrontier = Math.min(doc.modeFrontier, n); + if (doc.highlightFrontier < n - 10) { return } + var start = doc.first; + for (var line = n - 1; line > start; line--) { + var saved = getLine(doc, line).stateAfter; + // change is on 3 + // state on line 1 looked ahead 2 -- so saw 3 + // test 1 + 2 < 3 should cover this + if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) { + start = line + 1; + break + } + } + doc.highlightFrontier = Math.min(doc.highlightFrontier, start); + } + + // Optimize some code when these features are not used. + var sawReadOnlySpans = false, sawCollapsedSpans = false; + + function seeReadOnlySpans() { + sawReadOnlySpans = true; + } + + function seeCollapsedSpans() { + sawCollapsedSpans = true; + } + + // TEXTMARKER SPANS + + function MarkedSpan(marker, from, to) { + this.marker = marker; + this.from = from; this.to = to; + } + + // Search an array of spans for a span matching the given marker. + function getMarkedSpanFor(spans, marker) { + if (spans) { for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.marker == marker) { return span } + } } + } + + // Remove a span from an array, returning undefined if no spans are + // left (we don't store arrays for lines without spans). + function removeMarkedSpan(spans, span) { + var r; + for (var i = 0; i < spans.length; ++i) + { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } } + return r + } + + // Add a span to a line. + function addMarkedSpan(line, span, op) { + var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = new WeakSet)); + if (inThisOp && line.markedSpans && inThisOp.has(line.markedSpans)) { + line.markedSpans.push(span); + } else { + line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; + if (inThisOp) { inThisOp.add(line.markedSpans); } + } + span.marker.attachLine(line); + } + + // Used for the algorithm that adjusts markers for a change in the + // document. These functions cut an array of spans at a given + // character position, returning an array of remaining chunks (or + // undefined if nothing remains). + function markedSpansBefore(old, startCh, isInsert) { + var nw; + if (old) { for (var i = 0; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); + if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh) + ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); + } + } } + return nw + } + function markedSpansAfter(old, endCh, isInsert) { + var nw; + if (old) { for (var i = 0; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); + if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh) + ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, + span.to == null ? null : span.to - endCh)); + } + } } + return nw + } + + // Given a change object, compute the new set of marker spans that + // cover the line in which the change took place. Removes spans + // entirely within the change, reconnects spans belonging to the + // same marker that appear on both sides of the change, and cuts off + // spans partially within the change. Returns an array of span + // arrays with one element for each line in (after) the change. + function stretchSpansOverChange(doc, change) { + if (change.full) { return null } + var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; + var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; + if (!oldFirst && !oldLast) { return null } + + var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; + // Get the spans that 'stick out' on both sides + var first = markedSpansBefore(oldFirst, startCh, isInsert); + var last = markedSpansAfter(oldLast, endCh, isInsert); + + // Next, merge those two ends + var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); + if (first) { + // Fix up .to properties of first + for (var i = 0; i < first.length; ++i) { + var span = first[i]; + if (span.to == null) { + var found = getMarkedSpanFor(last, span.marker); + if (!found) { span.to = startCh; } + else if (sameLine) { span.to = found.to == null ? null : found.to + offset; } + } + } + } + if (last) { + // Fix up .from in last (or move them into first in case of sameLine) + for (var i$1 = 0; i$1 < last.length; ++i$1) { + var span$1 = last[i$1]; + if (span$1.to != null) { span$1.to += offset; } + if (span$1.from == null) { + var found$1 = getMarkedSpanFor(first, span$1.marker); + if (!found$1) { + span$1.from = offset; + if (sameLine) { (first || (first = [])).push(span$1); } + } + } else { + span$1.from += offset; + if (sameLine) { (first || (first = [])).push(span$1); } + } + } + } + // Make sure we didn't create any zero-length spans + if (first) { first = clearEmptySpans(first); } + if (last && last != first) { last = clearEmptySpans(last); } + + var newMarkers = [first]; + if (!sameLine) { + // Fill gap with whole-line-spans + var gap = change.text.length - 2, gapMarkers; + if (gap > 0 && first) + { for (var i$2 = 0; i$2 < first.length; ++i$2) + { if (first[i$2].to == null) + { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } } + for (var i$3 = 0; i$3 < gap; ++i$3) + { newMarkers.push(gapMarkers); } + newMarkers.push(last); + } + return newMarkers + } + + // Remove spans that are empty and don't have a clearWhenEmpty + // option of false. + function clearEmptySpans(spans) { + for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) + { spans.splice(i--, 1); } + } + if (!spans.length) { return null } + return spans + } + + // Used to 'clip' out readOnly ranges when making a change. + function removeReadOnlyRanges(doc, from, to) { + var markers = null; + doc.iter(from.line, to.line + 1, function (line) { + if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { + var mark = line.markedSpans[i].marker; + if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) + { (markers || (markers = [])).push(mark); } + } } + }); + if (!markers) { return null } + var parts = [{from: from, to: to}]; + for (var i = 0; i < markers.length; ++i) { + var mk = markers[i], m = mk.find(0); + for (var j = 0; j < parts.length; ++j) { + var p = parts[j]; + if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue } + var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); + if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) + { newParts.push({from: p.from, to: m.from}); } + if (dto > 0 || !mk.inclusiveRight && !dto) + { newParts.push({from: m.to, to: p.to}); } + parts.splice.apply(parts, newParts); + j += newParts.length - 3; + } + } + return parts + } + + // Connect or disconnect spans from a line. + function detachMarkedSpans(line) { + var spans = line.markedSpans; + if (!spans) { return } + for (var i = 0; i < spans.length; ++i) + { spans[i].marker.detachLine(line); } + line.markedSpans = null; + } + function attachMarkedSpans(line, spans) { + if (!spans) { return } + for (var i = 0; i < spans.length; ++i) + { spans[i].marker.attachLine(line); } + line.markedSpans = spans; + } + + // Helpers used when computing which overlapping collapsed span + // counts as the larger one. + function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 } + function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 } + + // Returns a number indicating which of two overlapping collapsed + // spans is larger (and thus includes the other). Falls back to + // comparing ids when the spans cover exactly the same range. + function compareCollapsedMarkers(a, b) { + var lenDiff = a.lines.length - b.lines.length; + if (lenDiff != 0) { return lenDiff } + var aPos = a.find(), bPos = b.find(); + var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); + if (fromCmp) { return -fromCmp } + var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); + if (toCmp) { return toCmp } + return b.id - a.id + } + + // Find out whether a line ends or starts in a collapsed span. If + // so, return the marker for that span. + function collapsedSpanAtSide(line, start) { + var sps = sawCollapsedSpans && line.markedSpans, found; + if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && + (!found || compareCollapsedMarkers(found, sp.marker) < 0)) + { found = sp.marker; } + } } + return found + } + function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) } + function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) } + + function collapsedSpanAround(line, ch) { + var sps = sawCollapsedSpans && line.markedSpans, found; + if (sps) { for (var i = 0; i < sps.length; ++i) { + var sp = sps[i]; + if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) && + (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; } + } } + return found + } + + // Test whether there exists a collapsed span that partially + // overlaps (covers the start or end, but not both) of a new span. + // Such overlap is not allowed. + function conflictingCollapsedRange(doc, lineNo, from, to, marker) { + var line = getLine(doc, lineNo); + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) { for (var i = 0; i < sps.length; ++i) { + var sp = sps[i]; + if (!sp.marker.collapsed) { continue } + var found = sp.marker.find(0); + var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); + var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); + if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue } + if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || + fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) + { return true } + } } + } + + // A visual line is a line as drawn on the screen. Folding, for + // example, can cause multiple logical lines to appear on the same + // visual line. This finds the start of the visual line that the + // given line is part of (usually that is the line itself). + function visualLine(line) { + var merged; + while (merged = collapsedSpanAtStart(line)) + { line = merged.find(-1, true).line; } + return line + } + + function visualLineEnd(line) { + var merged; + while (merged = collapsedSpanAtEnd(line)) + { line = merged.find(1, true).line; } + return line + } + + // Returns an array of logical lines that continue the visual line + // started by the argument, or undefined if there are no such lines. + function visualLineContinued(line) { + var merged, lines; + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line + ;(lines || (lines = [])).push(line); + } + return lines + } + + // Get the line number of the start of the visual line that the + // given line number is part of. + function visualLineNo(doc, lineN) { + var line = getLine(doc, lineN), vis = visualLine(line); + if (line == vis) { return lineN } + return lineNo(vis) + } + + // Get the line number of the start of the next visual line after + // the given line. + function visualLineEndNo(doc, lineN) { + if (lineN > doc.lastLine()) { return lineN } + var line = getLine(doc, lineN), merged; + if (!lineIsHidden(doc, line)) { return lineN } + while (merged = collapsedSpanAtEnd(line)) + { line = merged.find(1, true).line; } + return lineNo(line) + 1 + } + + // Compute whether a line is hidden. Lines count as hidden when they + // are part of a visual line that starts with another line, or when + // they are entirely covered by collapsed, non-widget span. + function lineIsHidden(doc, line) { + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (!sp.marker.collapsed) { continue } + if (sp.from == null) { return true } + if (sp.marker.widgetNode) { continue } + if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) + { return true } + } } + } + function lineIsHiddenInner(doc, line, span) { + if (span.to == null) { + var end = span.marker.find(1, true); + return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)) + } + if (span.marker.inclusiveRight && span.to == line.text.length) + { return true } + for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) { + sp = line.markedSpans[i]; + if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && + (sp.to == null || sp.to != span.from) && + (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && + lineIsHiddenInner(doc, line, sp)) { return true } + } + } + + // Find the height above the given line. + function heightAtLine(lineObj) { + lineObj = visualLine(lineObj); + + var h = 0, chunk = lineObj.parent; + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i]; + if (line == lineObj) { break } + else { h += line.height; } + } + for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { + for (var i$1 = 0; i$1 < p.children.length; ++i$1) { + var cur = p.children[i$1]; + if (cur == chunk) { break } + else { h += cur.height; } + } + } + return h + } + + // Compute the character length of a line, taking into account + // collapsed ranges (see markText) that might hide parts, and join + // other lines onto it. + function lineLength(line) { + if (line.height == 0) { return 0 } + var len = line.text.length, merged, cur = line; + while (merged = collapsedSpanAtStart(cur)) { + var found = merged.find(0, true); + cur = found.from.line; + len += found.from.ch - found.to.ch; + } + cur = line; + while (merged = collapsedSpanAtEnd(cur)) { + var found$1 = merged.find(0, true); + len -= cur.text.length - found$1.from.ch; + cur = found$1.to.line; + len += cur.text.length - found$1.to.ch; + } + return len + } + + // Find the longest line in the document. + function findMaxLine(cm) { + var d = cm.display, doc = cm.doc; + d.maxLine = getLine(doc, doc.first); + d.maxLineLength = lineLength(d.maxLine); + d.maxLineChanged = true; + doc.iter(function (line) { + var len = lineLength(line); + if (len > d.maxLineLength) { + d.maxLineLength = len; + d.maxLine = line; + } + }); + } + + // LINE DATA STRUCTURE + + // Line objects. These hold state related to a line, including + // highlighting info (the styles array). + var Line = function(text, markedSpans, estimateHeight) { + this.text = text; + attachMarkedSpans(this, markedSpans); + this.height = estimateHeight ? estimateHeight(this) : 1; + }; + + Line.prototype.lineNo = function () { return lineNo(this) }; + eventMixin(Line); + + // Change the content (text, markers) of a line. Automatically + // invalidates cached information and tries to re-estimate the + // line's height. + function updateLine(line, text, markedSpans, estimateHeight) { + line.text = text; + if (line.stateAfter) { line.stateAfter = null; } + if (line.styles) { line.styles = null; } + if (line.order != null) { line.order = null; } + detachMarkedSpans(line); + attachMarkedSpans(line, markedSpans); + var estHeight = estimateHeight ? estimateHeight(line) : 1; + if (estHeight != line.height) { updateLineHeight(line, estHeight); } + } + + // Detach a line from the document tree and its markers. + function cleanUpLine(line) { + line.parent = null; + detachMarkedSpans(line); + } + + // Convert a style as returned by a mode (either null, or a string + // containing one or more styles) to a CSS style. This is cached, + // and also looks for line-wide styles. + var styleToClassCache = {}, styleToClassCacheWithMode = {}; + function interpretTokenStyle(style, options) { + if (!style || /^\s*$/.test(style)) { return null } + var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; + return cache[style] || + (cache[style] = style.replace(/\S+/g, "cm-$&")) + } + + // Render the DOM representation of the text of a line. Also builds + // up a 'line map', which points at the DOM nodes that represent + // specific stretches of text, and is used by the measuring code. + // The returned object contains the DOM node, this map, and + // information about line-wide styles that were set by the mode. + function buildLineContent(cm, lineView) { + // The padding-right forces the element to have a 'border', which + // is needed on Webkit to be able to get line-level bounding + // rectangles for it (in measureChar). + var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null); + var builder = {pre: eltP("pre", [content], "CodeMirror-line"), content: content, + col: 0, pos: 0, cm: cm, + trailingSpace: false, + splitSpaces: cm.getOption("lineWrapping")}; + lineView.measure = {}; + + // Iterate over the logical lines that make up this visual line. + for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { + var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0); + builder.pos = 0; + builder.addToken = buildToken; + // Optionally wire in some hacks into the token-rendering + // algorithm, to deal with browser quirks. + if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) + { builder.addToken = buildTokenBadBidi(builder.addToken, order); } + builder.map = []; + var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); + insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); + if (line.styleClasses) { + if (line.styleClasses.bgClass) + { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); } + if (line.styleClasses.textClass) + { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); } + } + + // Ensure at least a single node is present, for measuring. + if (builder.map.length == 0) + { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); } + + // Store the map and a cache object for the current logical line + if (i == 0) { + lineView.measure.map = builder.map; + lineView.measure.cache = {}; + } else { + (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map) + ;(lineView.measure.caches || (lineView.measure.caches = [])).push({}); + } + } + + // See issue #2901 + if (webkit) { + var last = builder.content.lastChild; + if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab"))) + { builder.content.className = "cm-tab-wrap-hack"; } + } + + signal(cm, "renderLine", cm, lineView.line, builder.pre); + if (builder.pre.className) + { builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); } + + return builder + } + + function defaultSpecialCharPlaceholder(ch) { + var token = elt("span", "\u2022", "cm-invalidchar"); + token.title = "\\u" + ch.charCodeAt(0).toString(16); + token.setAttribute("aria-label", token.title); + return token + } + + // Build up the DOM representation for a single token, and add it to + // the line map. Takes care to render special characters separately. + function buildToken(builder, text, style, startStyle, endStyle, css, attributes) { + if (!text) { return } + var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text; + var special = builder.cm.state.specialChars, mustWrap = false; + var content; + if (!special.test(text)) { + builder.col += text.length; + content = document.createTextNode(displayText); + builder.map.push(builder.pos, builder.pos + text.length, content); + if (ie && ie_version < 9) { mustWrap = true; } + builder.pos += text.length; + } else { + content = document.createDocumentFragment(); + var pos = 0; + while (true) { + special.lastIndex = pos; + var m = special.exec(text); + var skipped = m ? m.index - pos : text.length - pos; + if (skipped) { + var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); + if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])); } + else { content.appendChild(txt); } + builder.map.push(builder.pos, builder.pos + skipped, txt); + builder.col += skipped; + builder.pos += skipped; + } + if (!m) { break } + pos += skipped + 1; + var txt$1 = (void 0); + if (m[0] == "\t") { + var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; + txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); + txt$1.setAttribute("role", "presentation"); + txt$1.setAttribute("cm-text", "\t"); + builder.col += tabWidth; + } else if (m[0] == "\r" || m[0] == "\n") { + txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar")); + txt$1.setAttribute("cm-text", m[0]); + builder.col += 1; + } else { + txt$1 = builder.cm.options.specialCharPlaceholder(m[0]); + txt$1.setAttribute("cm-text", m[0]); + if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])); } + else { content.appendChild(txt$1); } + builder.col += 1; + } + builder.map.push(builder.pos, builder.pos + 1, txt$1); + builder.pos++; + } + } + builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32; + if (style || startStyle || endStyle || mustWrap || css || attributes) { + var fullStyle = style || ""; + if (startStyle) { fullStyle += startStyle; } + if (endStyle) { fullStyle += endStyle; } + var token = elt("span", [content], fullStyle, css); + if (attributes) { + for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != "style" && attr != "class") + { token.setAttribute(attr, attributes[attr]); } } + } + return builder.content.appendChild(token) + } + builder.content.appendChild(content); + } + + // Change some spaces to NBSP to prevent the browser from collapsing + // trailing spaces at the end of a line when rendering text (issue #1362). + function splitSpaces(text, trailingBefore) { + if (text.length > 1 && !/ /.test(text)) { return text } + var spaceBefore = trailingBefore, result = ""; + for (var i = 0; i < text.length; i++) { + var ch = text.charAt(i); + if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) + { ch = "\u00a0"; } + result += ch; + spaceBefore = ch == " "; + } + return result + } + + // Work around nonsense dimensions being reported for stretches of + // right-to-left text. + function buildTokenBadBidi(inner, order) { + return function (builder, text, style, startStyle, endStyle, css, attributes) { + style = style ? style + " cm-force-border" : "cm-force-border"; + var start = builder.pos, end = start + text.length; + for (;;) { + // Find the part that overlaps with the start of this text + var part = (void 0); + for (var i = 0; i < order.length; i++) { + part = order[i]; + if (part.to > start && part.from <= start) { break } + } + if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) } + inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes); + startStyle = null; + text = text.slice(part.to - start); + start = part.to; + } + } + } + + function buildCollapsedSpan(builder, size, marker, ignoreWidget) { + var widget = !ignoreWidget && marker.widgetNode; + if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); } + if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { + if (!widget) + { widget = builder.content.appendChild(document.createElement("span")); } + widget.setAttribute("cm-marker", marker.id); + } + if (widget) { + builder.cm.display.input.setUneditable(widget); + builder.content.appendChild(widget); + } + builder.pos += size; + builder.trailingSpace = false; + } + + // Outputs a number of spans to make up a line, taking highlighting + // and marked text into account. + function insertLineContent(line, builder, styles) { + var spans = line.markedSpans, allText = line.text, at = 0; + if (!spans) { + for (var i$1 = 1; i$1 < styles.length; i$1+=2) + { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); } + return + } + + var len = allText.length, pos = 0, i = 1, text = "", style, css; + var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes; + for (;;) { + if (nextChange == pos) { // Update current marker set + spanStyle = spanEndStyle = spanStartStyle = css = ""; + attributes = null; + collapsed = null; nextChange = Infinity; + var foundBookmarks = [], endStyles = (void 0); + for (var j = 0; j < spans.length; ++j) { + var sp = spans[j], m = sp.marker; + if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { + foundBookmarks.push(m); + } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { + if (sp.to != null && sp.to != pos && nextChange > sp.to) { + nextChange = sp.to; + spanEndStyle = ""; + } + if (m.className) { spanStyle += " " + m.className; } + if (m.css) { css = (css ? css + ";" : "") + m.css; } + if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle; } + if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); } + // support for the old title property + // https://github.com/codemirror/CodeMirror/pull/5673 + if (m.title) { (attributes || (attributes = {})).title = m.title; } + if (m.attributes) { + for (var attr in m.attributes) + { (attributes || (attributes = {}))[attr] = m.attributes[attr]; } + } + if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) + { collapsed = sp; } + } else if (sp.from > pos && nextChange > sp.from) { + nextChange = sp.from; + } + } + if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) + { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1]; } } } + + if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) + { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } } + if (collapsed && (collapsed.from || 0) == pos) { + buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, + collapsed.marker, collapsed.from == null); + if (collapsed.to == null) { return } + if (collapsed.to == pos) { collapsed = false; } + } + } + if (pos >= len) { break } + + var upto = Math.min(len, nextChange); + while (true) { + if (text) { + var end = pos + text.length; + if (!collapsed) { + var tokenText = end > upto ? text.slice(0, upto - pos) : text; + builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, + spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", css, attributes); + } + if (end >= upto) {text = text.slice(upto - pos); pos = upto; break} + pos = end; + spanStartStyle = ""; + } + text = allText.slice(at, at = styles[i++]); + style = interpretTokenStyle(styles[i++], builder.cm.options); + } + } + } + + + // These objects are used to represent the visible (currently drawn) + // part of the document. A LineView may correspond to multiple + // logical lines, if those are connected by collapsed ranges. + function LineView(doc, line, lineN) { + // The starting line + this.line = line; + // Continuing lines, if any + this.rest = visualLineContinued(line); + // Number of logical lines in this visual line + this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; + this.node = this.text = null; + this.hidden = lineIsHidden(doc, line); + } + + // Create a range of LineView objects for the given lines. + function buildViewArray(cm, from, to) { + var array = [], nextPos; + for (var pos = from; pos < to; pos = nextPos) { + var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); + nextPos = pos + view.size; + array.push(view); + } + return array + } + + var operationGroup = null; + + function pushOperation(op) { + if (operationGroup) { + operationGroup.ops.push(op); + } else { + op.ownsGroup = operationGroup = { + ops: [op], + delayedCallbacks: [] + }; + } + } + + function fireCallbacksForOps(group) { + // Calls delayed callbacks and cursorActivity handlers until no + // new ones appear + var callbacks = group.delayedCallbacks, i = 0; + do { + for (; i < callbacks.length; i++) + { callbacks[i].call(null); } + for (var j = 0; j < group.ops.length; j++) { + var op = group.ops[j]; + if (op.cursorActivityHandlers) + { while (op.cursorActivityCalled < op.cursorActivityHandlers.length) + { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } } + } + } while (i < callbacks.length) + } + + function finishOperation(op, endCb) { + var group = op.ownsGroup; + if (!group) { return } + + try { fireCallbacksForOps(group); } + finally { + operationGroup = null; + endCb(group); + } + } + + var orphanDelayedCallbacks = null; + + // Often, we want to signal events at a point where we are in the + // middle of some work, but don't want the handler to start calling + // other methods on the editor, which might be in an inconsistent + // state or simply not expect any other events to happen. + // signalLater looks whether there are any handlers, and schedules + // them to be executed when the last operation ends, or, if no + // operation is active, when a timeout fires. + function signalLater(emitter, type /*, values...*/) { + var arr = getHandlers(emitter, type); + if (!arr.length) { return } + var args = Array.prototype.slice.call(arguments, 2), list; + if (operationGroup) { + list = operationGroup.delayedCallbacks; + } else if (orphanDelayedCallbacks) { + list = orphanDelayedCallbacks; + } else { + list = orphanDelayedCallbacks = []; + setTimeout(fireOrphanDelayed, 0); + } + var loop = function ( i ) { + list.push(function () { return arr[i].apply(null, args); }); + }; + + for (var i = 0; i < arr.length; ++i) + loop( i ); + } + + function fireOrphanDelayed() { + var delayed = orphanDelayedCallbacks; + orphanDelayedCallbacks = null; + for (var i = 0; i < delayed.length; ++i) { delayed[i](); } + } + + // When an aspect of a line changes, a string is added to + // lineView.changes. This updates the relevant part of the line's + // DOM structure. + function updateLineForChanges(cm, lineView, lineN, dims) { + for (var j = 0; j < lineView.changes.length; j++) { + var type = lineView.changes[j]; + if (type == "text") { updateLineText(cm, lineView); } + else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims); } + else if (type == "class") { updateLineClasses(cm, lineView); } + else if (type == "widget") { updateLineWidgets(cm, lineView, dims); } + } + lineView.changes = null; + } + + // Lines with gutter elements, widgets or a background class need to + // be wrapped, and have the extra elements added to the wrapper div + function ensureLineWrapped(lineView) { + if (lineView.node == lineView.text) { + lineView.node = elt("div", null, null, "position: relative"); + if (lineView.text.parentNode) + { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); } + lineView.node.appendChild(lineView.text); + if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; } + } + return lineView.node + } + + function updateLineBackground(cm, lineView) { + var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; + if (cls) { cls += " CodeMirror-linebackground"; } + if (lineView.background) { + if (cls) { lineView.background.className = cls; } + else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } + } else if (cls) { + var wrap = ensureLineWrapped(lineView); + lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); + cm.display.input.setUneditable(lineView.background); + } + } + + // Wrapper around buildLineContent which will reuse the structure + // in display.externalMeasured when possible. + function getLineContent(cm, lineView) { + var ext = cm.display.externalMeasured; + if (ext && ext.line == lineView.line) { + cm.display.externalMeasured = null; + lineView.measure = ext.measure; + return ext.built + } + return buildLineContent(cm, lineView) + } + + // Redraw the line's text. Interacts with the background and text + // classes because the mode may output tokens that influence these + // classes. + function updateLineText(cm, lineView) { + var cls = lineView.text.className; + var built = getLineContent(cm, lineView); + if (lineView.text == lineView.node) { lineView.node = built.pre; } + lineView.text.parentNode.replaceChild(built.pre, lineView.text); + lineView.text = built.pre; + if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { + lineView.bgClass = built.bgClass; + lineView.textClass = built.textClass; + updateLineClasses(cm, lineView); + } else if (cls) { + lineView.text.className = cls; + } + } + + function updateLineClasses(cm, lineView) { + updateLineBackground(cm, lineView); + if (lineView.line.wrapClass) + { ensureLineWrapped(lineView).className = lineView.line.wrapClass; } + else if (lineView.node != lineView.text) + { lineView.node.className = ""; } + var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; + lineView.text.className = textClass || ""; + } + + function updateLineGutter(cm, lineView, lineN, dims) { + if (lineView.gutter) { + lineView.node.removeChild(lineView.gutter); + lineView.gutter = null; + } + if (lineView.gutterBackground) { + lineView.node.removeChild(lineView.gutterBackground); + lineView.gutterBackground = null; + } + if (lineView.line.gutterClass) { + var wrap = ensureLineWrapped(lineView); + lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, + ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px")); + cm.display.input.setUneditable(lineView.gutterBackground); + wrap.insertBefore(lineView.gutterBackground, lineView.text); + } + var markers = lineView.line.gutterMarkers; + if (cm.options.lineNumbers || markers) { + var wrap$1 = ensureLineWrapped(lineView); + var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px")); + gutterWrap.setAttribute("aria-hidden", "true"); + cm.display.input.setUneditable(gutterWrap); + wrap$1.insertBefore(gutterWrap, lineView.text); + if (lineView.line.gutterClass) + { gutterWrap.className += " " + lineView.line.gutterClass; } + if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) + { lineView.lineNumber = gutterWrap.appendChild( + elt("div", lineNumberFor(cm.options, lineN), + "CodeMirror-linenumber CodeMirror-gutter-elt", + ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))); } + if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) { + var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id]; + if (found) + { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", + ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))); } + } } + } + } + + function updateLineWidgets(cm, lineView, dims) { + if (lineView.alignable) { lineView.alignable = null; } + var isWidget = classTest("CodeMirror-linewidget"); + for (var node = lineView.node.firstChild, next = (void 0); node; node = next) { + next = node.nextSibling; + if (isWidget.test(node.className)) { lineView.node.removeChild(node); } + } + insertLineWidgets(cm, lineView, dims); + } + + // Build a line's DOM representation from scratch + function buildLineElement(cm, lineView, lineN, dims) { + var built = getLineContent(cm, lineView); + lineView.text = lineView.node = built.pre; + if (built.bgClass) { lineView.bgClass = built.bgClass; } + if (built.textClass) { lineView.textClass = built.textClass; } + + updateLineClasses(cm, lineView); + updateLineGutter(cm, lineView, lineN, dims); + insertLineWidgets(cm, lineView, dims); + return lineView.node + } + + // A lineView may contain multiple logical lines (when merged by + // collapsed spans). The widgets for all of them need to be drawn. + function insertLineWidgets(cm, lineView, dims) { + insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); + if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) + { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } } + } + + function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { + if (!line.widgets) { return } + var wrap = ensureLineWrapped(lineView); + for (var i = 0, ws = line.widgets; i < ws.length; ++i) { + var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget" + (widget.className ? " " + widget.className : "")); + if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true"); } + positionLineWidget(widget, node, lineView, dims); + cm.display.input.setUneditable(node); + if (allowAbove && widget.above) + { wrap.insertBefore(node, lineView.gutter || lineView.text); } + else + { wrap.appendChild(node); } + signalLater(widget, "redraw"); + } + } + + function positionLineWidget(widget, node, lineView, dims) { + if (widget.noHScroll) { + (lineView.alignable || (lineView.alignable = [])).push(node); + var width = dims.wrapperWidth; + node.style.left = dims.fixedPos + "px"; + if (!widget.coverGutter) { + width -= dims.gutterTotalWidth; + node.style.paddingLeft = dims.gutterTotalWidth + "px"; + } + node.style.width = width + "px"; + } + if (widget.coverGutter) { + node.style.zIndex = 5; + node.style.position = "relative"; + if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px"; } + } + } + + function widgetHeight(widget) { + if (widget.height != null) { return widget.height } + var cm = widget.doc.cm; + if (!cm) { return 0 } + if (!contains(document.body, widget.node)) { + var parentStyle = "position: relative;"; + if (widget.coverGutter) + { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; } + if (widget.noHScroll) + { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; } + removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); + } + return widget.height = widget.node.parentNode.offsetHeight + } + + // Return true when the given mouse event happened in a widget + function eventInWidget(display, e) { + for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { + if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || + (n.parentNode == display.sizer && n != display.mover)) + { return true } + } + } + + // POSITION MEASUREMENT + + function paddingTop(display) {return display.lineSpace.offsetTop} + function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight} + function paddingH(display) { + if (display.cachedPaddingH) { return display.cachedPaddingH } + var e = removeChildrenAndAdd(display.measure, elt("pre", "x", "CodeMirror-line-like")); + var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; + var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}; + if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; } + return data + } + + function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth } + function displayWidth(cm) { + return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth + } + function displayHeight(cm) { + return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight + } + + // Ensure the lineView.wrapping.heights array is populated. This is + // an array of bottom offsets for the lines that make up a drawn + // line. When lineWrapping is on, there might be more than one + // height. + function ensureLineHeights(cm, lineView, rect) { + var wrapping = cm.options.lineWrapping; + var curWidth = wrapping && displayWidth(cm); + if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { + var heights = lineView.measure.heights = []; + if (wrapping) { + lineView.measure.width = curWidth; + var rects = lineView.text.firstChild.getClientRects(); + for (var i = 0; i < rects.length - 1; i++) { + var cur = rects[i], next = rects[i + 1]; + if (Math.abs(cur.bottom - next.bottom) > 2) + { heights.push((cur.bottom + next.top) / 2 - rect.top); } + } + } + heights.push(rect.bottom - rect.top); + } + } + + // Find a line map (mapping character offsets to text nodes) and a + // measurement cache for the given line number. (A line view might + // contain multiple lines when collapsed ranges are present.) + function mapFromLineView(lineView, line, lineN) { + if (lineView.line == line) + { return {map: lineView.measure.map, cache: lineView.measure.cache} } + if (lineView.rest) { + for (var i = 0; i < lineView.rest.length; i++) + { if (lineView.rest[i] == line) + { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } } + for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) + { if (lineNo(lineView.rest[i$1]) > lineN) + { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } } + } + } + + // Render a line into the hidden node display.externalMeasured. Used + // when measurement is needed for a line that's not in the viewport. + function updateExternalMeasurement(cm, line) { + line = visualLine(line); + var lineN = lineNo(line); + var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); + view.lineN = lineN; + var built = view.built = buildLineContent(cm, view); + view.text = built.pre; + removeChildrenAndAdd(cm.display.lineMeasure, built.pre); + return view + } + + // Get a {top, bottom, left, right} box (in line-local coordinates) + // for a given character. + function measureChar(cm, line, ch, bias) { + return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias) + } + + // Find a line view that corresponds to the given line number. + function findViewForLine(cm, lineN) { + if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) + { return cm.display.view[findViewIndex(cm, lineN)] } + var ext = cm.display.externalMeasured; + if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) + { return ext } + } + + // Measurement can be split in two steps, the set-up work that + // applies to the whole line, and the measurement of the actual + // character. Functions like coordsChar, that need to do a lot of + // measurements in a row, can thus ensure that the set-up work is + // only done once. + function prepareMeasureForLine(cm, line) { + var lineN = lineNo(line); + var view = findViewForLine(cm, lineN); + if (view && !view.text) { + view = null; + } else if (view && view.changes) { + updateLineForChanges(cm, view, lineN, getDimensions(cm)); + cm.curOp.forceUpdate = true; + } + if (!view) + { view = updateExternalMeasurement(cm, line); } + + var info = mapFromLineView(view, line, lineN); + return { + line: line, view: view, rect: null, + map: info.map, cache: info.cache, before: info.before, + hasHeights: false + } + } + + // Given a prepared measurement object, measures the position of an + // actual character (or fetches it from the cache). + function measureCharPrepared(cm, prepared, ch, bias, varHeight) { + if (prepared.before) { ch = -1; } + var key = ch + (bias || ""), found; + if (prepared.cache.hasOwnProperty(key)) { + found = prepared.cache[key]; + } else { + if (!prepared.rect) + { prepared.rect = prepared.view.text.getBoundingClientRect(); } + if (!prepared.hasHeights) { + ensureLineHeights(cm, prepared.view, prepared.rect); + prepared.hasHeights = true; + } + found = measureCharInner(cm, prepared, ch, bias); + if (!found.bogus) { prepared.cache[key] = found; } + } + return {left: found.left, right: found.right, + top: varHeight ? found.rtop : found.top, + bottom: varHeight ? found.rbottom : found.bottom} + } + + var nullRect = {left: 0, right: 0, top: 0, bottom: 0}; + + function nodeAndOffsetInLineMap(map, ch, bias) { + var node, start, end, collapse, mStart, mEnd; + // First, search the line map for the text node corresponding to, + // or closest to, the target character. + for (var i = 0; i < map.length; i += 3) { + mStart = map[i]; + mEnd = map[i + 1]; + if (ch < mStart) { + start = 0; end = 1; + collapse = "left"; + } else if (ch < mEnd) { + start = ch - mStart; + end = start + 1; + } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { + end = mEnd - mStart; + start = end - 1; + if (ch >= mEnd) { collapse = "right"; } + } + if (start != null) { + node = map[i + 2]; + if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) + { collapse = bias; } + if (bias == "left" && start == 0) + { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { + node = map[(i -= 3) + 2]; + collapse = "left"; + } } + if (bias == "right" && start == mEnd - mStart) + { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { + node = map[(i += 3) + 2]; + collapse = "right"; + } } + break + } + } + return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd} + } + + function getUsefulRect(rects, bias) { + var rect = nullRect; + if (bias == "left") { for (var i = 0; i < rects.length; i++) { + if ((rect = rects[i]).left != rect.right) { break } + } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) { + if ((rect = rects[i$1]).left != rect.right) { break } + } } + return rect + } + + function measureCharInner(cm, prepared, ch, bias) { + var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); + var node = place.node, start = place.start, end = place.end, collapse = place.collapse; + + var rect; + if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. + for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned + while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; } + while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; } + if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) + { rect = node.parentNode.getBoundingClientRect(); } + else + { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); } + if (rect.left || rect.right || start == 0) { break } + end = start; + start = start - 1; + collapse = "right"; + } + if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); } + } else { // If it is a widget, simply get the box for the whole widget. + if (start > 0) { collapse = bias = "right"; } + var rects; + if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) + { rect = rects[bias == "right" ? rects.length - 1 : 0]; } + else + { rect = node.getBoundingClientRect(); } + } + if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { + var rSpan = node.parentNode.getClientRects()[0]; + if (rSpan) + { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; } + else + { rect = nullRect; } + } + + var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top; + var mid = (rtop + rbot) / 2; + var heights = prepared.view.measure.heights; + var i = 0; + for (; i < heights.length - 1; i++) + { if (mid < heights[i]) { break } } + var top = i ? heights[i - 1] : 0, bot = heights[i]; + var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, + right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, + top: top, bottom: bot}; + if (!rect.left && !rect.right) { result.bogus = true; } + if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; } + + return result + } + + // Work around problem with bounding client rects on ranges being + // returned incorrectly when zoomed on IE10 and below. + function maybeUpdateRectForZooming(measure, rect) { + if (!window.screen || screen.logicalXDPI == null || + screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) + { return rect } + var scaleX = screen.logicalXDPI / screen.deviceXDPI; + var scaleY = screen.logicalYDPI / screen.deviceYDPI; + return {left: rect.left * scaleX, right: rect.right * scaleX, + top: rect.top * scaleY, bottom: rect.bottom * scaleY} + } + + function clearLineMeasurementCacheFor(lineView) { + if (lineView.measure) { + lineView.measure.cache = {}; + lineView.measure.heights = null; + if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) + { lineView.measure.caches[i] = {}; } } + } + } + + function clearLineMeasurementCache(cm) { + cm.display.externalMeasure = null; + removeChildren(cm.display.lineMeasure); + for (var i = 0; i < cm.display.view.length; i++) + { clearLineMeasurementCacheFor(cm.display.view[i]); } + } + + function clearCaches(cm) { + clearLineMeasurementCache(cm); + cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; + if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; } + cm.display.lineNumChars = null; + } + + function pageScrollX(doc) { + // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206 + // which causes page_Offset and bounding client rects to use + // different reference viewports and invalidate our calculations. + if (chrome && android) { return -(doc.body.getBoundingClientRect().left - parseInt(getComputedStyle(doc.body).marginLeft)) } + return doc.defaultView.pageXOffset || (doc.documentElement || doc.body).scrollLeft + } + function pageScrollY(doc) { + if (chrome && android) { return -(doc.body.getBoundingClientRect().top - parseInt(getComputedStyle(doc.body).marginTop)) } + return doc.defaultView.pageYOffset || (doc.documentElement || doc.body).scrollTop + } + + function widgetTopHeight(lineObj) { + var ref = visualLine(lineObj); + var widgets = ref.widgets; + var height = 0; + if (widgets) { for (var i = 0; i < widgets.length; ++i) { if (widgets[i].above) + { height += widgetHeight(widgets[i]); } } } + return height + } + + // Converts a {top, bottom, left, right} box from line-local + // coordinates into another coordinate system. Context may be one of + // "line", "div" (display.lineDiv), "local"./null (editor), "window", + // or "page". + function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) { + if (!includeWidgets) { + var height = widgetTopHeight(lineObj); + rect.top += height; rect.bottom += height; + } + if (context == "line") { return rect } + if (!context) { context = "local"; } + var yOff = heightAtLine(lineObj); + if (context == "local") { yOff += paddingTop(cm.display); } + else { yOff -= cm.display.viewOffset; } + if (context == "page" || context == "window") { + var lOff = cm.display.lineSpace.getBoundingClientRect(); + yOff += lOff.top + (context == "window" ? 0 : pageScrollY(doc(cm))); + var xOff = lOff.left + (context == "window" ? 0 : pageScrollX(doc(cm))); + rect.left += xOff; rect.right += xOff; + } + rect.top += yOff; rect.bottom += yOff; + return rect + } + + // Coverts a box from "div" coords to another coordinate system. + // Context may be "window", "page", "div", or "local"./null. + function fromCoordSystem(cm, coords, context) { + if (context == "div") { return coords } + var left = coords.left, top = coords.top; + // First move into "page" coordinate system + if (context == "page") { + left -= pageScrollX(doc(cm)); + top -= pageScrollY(doc(cm)); + } else if (context == "local" || !context) { + var localBox = cm.display.sizer.getBoundingClientRect(); + left += localBox.left; + top += localBox.top; + } + + var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); + return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top} + } + + function charCoords(cm, pos, context, lineObj, bias) { + if (!lineObj) { lineObj = getLine(cm.doc, pos.line); } + return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context) + } + + // Returns a box for a given cursor position, which may have an + // 'other' property containing the position of the secondary cursor + // on a bidi boundary. + // A cursor Pos(line, char, "before") is on the same visual line as `char - 1` + // and after `char - 1` in writing order of `char - 1` + // A cursor Pos(line, char, "after") is on the same visual line as `char` + // and before `char` in writing order of `char` + // Examples (upper-case letters are RTL, lower-case are LTR): + // Pos(0, 1, ...) + // before after + // ab a|b a|b + // aB a|B aB| + // Ab |Ab A|b + // AB B|A B|A + // Every position after the last character on a line is considered to stick + // to the last character on the line. + function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { + lineObj = lineObj || getLine(cm.doc, pos.line); + if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); } + function get(ch, right) { + var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight); + if (right) { m.left = m.right; } else { m.right = m.left; } + return intoCoordSystem(cm, lineObj, m, context) + } + var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky; + if (ch >= lineObj.text.length) { + ch = lineObj.text.length; + sticky = "before"; + } else if (ch <= 0) { + ch = 0; + sticky = "after"; + } + if (!order) { return get(sticky == "before" ? ch - 1 : ch, sticky == "before") } + + function getBidi(ch, partPos, invert) { + var part = order[partPos], right = part.level == 1; + return get(invert ? ch - 1 : ch, right != invert) + } + var partPos = getBidiPartAt(order, ch, sticky); + var other = bidiOther; + var val = getBidi(ch, partPos, sticky == "before"); + if (other != null) { val.other = getBidi(ch, other, sticky != "before"); } + return val + } + + // Used to cheaply estimate the coordinates for a position. Used for + // intermediate scroll updates. + function estimateCoords(cm, pos) { + var left = 0; + pos = clipPos(cm.doc, pos); + if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; } + var lineObj = getLine(cm.doc, pos.line); + var top = heightAtLine(lineObj) + paddingTop(cm.display); + return {left: left, right: left, top: top, bottom: top + lineObj.height} + } + + // Positions returned by coordsChar contain some extra information. + // xRel is the relative x position of the input coordinates compared + // to the found position (so xRel > 0 means the coordinates are to + // the right of the character position, for example). When outside + // is true, that means the coordinates lie outside the line's + // vertical range. + function PosWithInfo(line, ch, sticky, outside, xRel) { + var pos = Pos(line, ch, sticky); + pos.xRel = xRel; + if (outside) { pos.outside = outside; } + return pos + } + + // Compute the character position closest to the given coordinates. + // Input must be lineSpace-local ("div" coordinate system). + function coordsChar(cm, x, y) { + var doc = cm.doc; + y += cm.display.viewOffset; + if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) } + var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1; + if (lineN > last) + { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) } + if (x < 0) { x = 0; } + + var lineObj = getLine(doc, lineN); + for (;;) { + var found = coordsCharInner(cm, lineObj, lineN, x, y); + var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0)); + if (!collapsed) { return found } + var rangeEnd = collapsed.find(1); + if (rangeEnd.line == lineN) { return rangeEnd } + lineObj = getLine(doc, lineN = rangeEnd.line); + } + } + + function wrappedLineExtent(cm, lineObj, preparedMeasure, y) { + y -= widgetTopHeight(lineObj); + var end = lineObj.text.length; + var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0); + end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end); + return {begin: begin, end: end} + } + + function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) { + if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); } + var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top; + return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop) + } + + // Returns true if the given side of a box is after the given + // coordinates, in top-to-bottom, left-to-right order. + function boxIsAfter(box, x, y, left) { + return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x + } + + function coordsCharInner(cm, lineObj, lineNo, x, y) { + // Move y into line-local coordinate space + y -= heightAtLine(lineObj); + var preparedMeasure = prepareMeasureForLine(cm, lineObj); + // When directly calling `measureCharPrepared`, we have to adjust + // for the widgets at this line. + var widgetHeight = widgetTopHeight(lineObj); + var begin = 0, end = lineObj.text.length, ltr = true; + + var order = getOrder(lineObj, cm.doc.direction); + // If the line isn't plain left-to-right text, first figure out + // which bidi section the coordinates fall into. + if (order) { + var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart) + (cm, lineObj, lineNo, preparedMeasure, order, x, y); + ltr = part.level != 1; + // The awkward -1 offsets are needed because findFirst (called + // on these below) will treat its first bound as inclusive, + // second as exclusive, but we want to actually address the + // characters in the part's range + begin = ltr ? part.from : part.to - 1; + end = ltr ? part.to : part.from - 1; + } + + // A binary search to find the first character whose bounding box + // starts after the coordinates. If we run across any whose box wrap + // the coordinates, store that. + var chAround = null, boxAround = null; + var ch = findFirst(function (ch) { + var box = measureCharPrepared(cm, preparedMeasure, ch); + box.top += widgetHeight; box.bottom += widgetHeight; + if (!boxIsAfter(box, x, y, false)) { return false } + if (box.top <= y && box.left <= x) { + chAround = ch; + boxAround = box; + } + return true + }, begin, end); + + var baseX, sticky, outside = false; + // If a box around the coordinates was found, use that + if (boxAround) { + // Distinguish coordinates nearer to the left or right side of the box + var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr; + ch = chAround + (atStart ? 0 : 1); + sticky = atStart ? "after" : "before"; + baseX = atLeft ? boxAround.left : boxAround.right; + } else { + // (Adjust for extended bound, if necessary.) + if (!ltr && (ch == end || ch == begin)) { ch++; } + // To determine which side to associate with, get the box to the + // left of the character and compare it's vertical position to the + // coordinates + sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" : + (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ? + "after" : "before"; + // Now get accurate coordinates for this place, in order to get a + // base X position + var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), "line", lineObj, preparedMeasure); + baseX = coords.left; + outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0; + } + + ch = skipExtendingChars(lineObj.text, ch, 1); + return PosWithInfo(lineNo, ch, sticky, outside, x - baseX) + } + + function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) { + // Bidi parts are sorted left-to-right, and in a non-line-wrapping + // situation, we can take this ordering to correspond to the visual + // ordering. This finds the first part whose end is after the given + // coordinates. + var index = findFirst(function (i) { + var part = order[i], ltr = part.level != 1; + return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? "before" : "after"), + "line", lineObj, preparedMeasure), x, y, true) + }, 0, order.length - 1); + var part = order[index]; + // If this isn't the first part, the part's start is also after + // the coordinates, and the coordinates aren't on the same line as + // that start, move one part back. + if (index > 0) { + var ltr = part.level != 1; + var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? "after" : "before"), + "line", lineObj, preparedMeasure); + if (boxIsAfter(start, x, y, true) && start.top > y) + { part = order[index - 1]; } + } + return part + } + + function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) { + // In a wrapped line, rtl text on wrapping boundaries can do things + // that don't correspond to the ordering in our `order` array at + // all, so a binary search doesn't work, and we want to return a + // part that only spans one line so that the binary search in + // coordsCharInner is safe. As such, we first find the extent of the + // wrapped line, and then do a flat search in which we discard any + // spans that aren't on the line. + var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y); + var begin = ref.begin; + var end = ref.end; + if (/\s/.test(lineObj.text.charAt(end - 1))) { end--; } + var part = null, closestDist = null; + for (var i = 0; i < order.length; i++) { + var p = order[i]; + if (p.from >= end || p.to <= begin) { continue } + var ltr = p.level != 1; + var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right; + // Weigh against spans ending before this, so that they are only + // picked if nothing ends after + var dist = endX < x ? x - endX + 1e9 : endX - x; + if (!part || closestDist > dist) { + part = p; + closestDist = dist; + } + } + if (!part) { part = order[order.length - 1]; } + // Clip the part to the wrapped line. + if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; } + if (part.to > end) { part = {from: part.from, to: end, level: part.level}; } + return part + } + + var measureText; + // Compute the default text height. + function textHeight(display) { + if (display.cachedTextHeight != null) { return display.cachedTextHeight } + if (measureText == null) { + measureText = elt("pre", null, "CodeMirror-line-like"); + // Measure a bunch of lines, for browsers that compute + // fractional heights. + for (var i = 0; i < 49; ++i) { + measureText.appendChild(document.createTextNode("x")); + measureText.appendChild(elt("br")); + } + measureText.appendChild(document.createTextNode("x")); + } + removeChildrenAndAdd(display.measure, measureText); + var height = measureText.offsetHeight / 50; + if (height > 3) { display.cachedTextHeight = height; } + removeChildren(display.measure); + return height || 1 + } + + // Compute the default character width. + function charWidth(display) { + if (display.cachedCharWidth != null) { return display.cachedCharWidth } + var anchor = elt("span", "xxxxxxxxxx"); + var pre = elt("pre", [anchor], "CodeMirror-line-like"); + removeChildrenAndAdd(display.measure, pre); + var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; + if (width > 2) { display.cachedCharWidth = width; } + return width || 10 + } + + // Do a bulk-read of the DOM positions and sizes needed to draw the + // view, so that we don't interleave reading and writing to the DOM. + function getDimensions(cm) { + var d = cm.display, left = {}, width = {}; + var gutterLeft = d.gutters.clientLeft; + for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { + var id = cm.display.gutterSpecs[i].className; + left[id] = n.offsetLeft + n.clientLeft + gutterLeft; + width[id] = n.clientWidth; + } + return {fixedPos: compensateForHScroll(d), + gutterTotalWidth: d.gutters.offsetWidth, + gutterLeft: left, + gutterWidth: width, + wrapperWidth: d.wrapper.clientWidth} + } + + // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, + // but using getBoundingClientRect to get a sub-pixel-accurate + // result. + function compensateForHScroll(display) { + return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left + } + + // Returns a function that estimates the height of a line, to use as + // first approximation until the line becomes visible (and is thus + // properly measurable). + function estimateHeight(cm) { + var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; + var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); + return function (line) { + if (lineIsHidden(cm.doc, line)) { return 0 } + + var widgetsHeight = 0; + if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) { + if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; } + } } + + if (wrapping) + { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th } + else + { return widgetsHeight + th } + } + } + + function estimateLineHeights(cm) { + var doc = cm.doc, est = estimateHeight(cm); + doc.iter(function (line) { + var estHeight = est(line); + if (estHeight != line.height) { updateLineHeight(line, estHeight); } + }); + } + + // Given a mouse event, find the corresponding position. If liberal + // is false, it checks whether a gutter or scrollbar was clicked, + // and returns null if it was. forRect is used by rectangular + // selections, and tries to estimate a character position even for + // coordinates beyond the right of the text. + function posFromMouse(cm, e, liberal, forRect) { + var display = cm.display; + if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null } + + var x, y, space = display.lineSpace.getBoundingClientRect(); + // Fails unpredictably on IE[67] when mouse is dragged around quickly. + try { x = e.clientX - space.left; y = e.clientY - space.top; } + catch (e$1) { return null } + var coords = coordsChar(cm, x, y), line; + if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { + var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; + coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); + } + return coords + } + + // Find the view element corresponding to a given line. Return null + // when the line isn't visible. + function findViewIndex(cm, n) { + if (n >= cm.display.viewTo) { return null } + n -= cm.display.viewFrom; + if (n < 0) { return null } + var view = cm.display.view; + for (var i = 0; i < view.length; i++) { + n -= view[i].size; + if (n < 0) { return i } + } + } + + // Updates the display.view data structure for a given change to the + // document. From and to are in pre-change coordinates. Lendiff is + // the amount of lines added or subtracted by the change. This is + // used for changes that span multiple lines, or change the way + // lines are divided into visual lines. regLineChange (below) + // registers single-line changes. + function regChange(cm, from, to, lendiff) { + if (from == null) { from = cm.doc.first; } + if (to == null) { to = cm.doc.first + cm.doc.size; } + if (!lendiff) { lendiff = 0; } + + var display = cm.display; + if (lendiff && to < display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers > from)) + { display.updateLineNumbers = from; } + + cm.curOp.viewChanged = true; + + if (from >= display.viewTo) { // Change after + if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) + { resetView(cm); } + } else if (to <= display.viewFrom) { // Change before + if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { + resetView(cm); + } else { + display.viewFrom += lendiff; + display.viewTo += lendiff; + } + } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap + resetView(cm); + } else if (from <= display.viewFrom) { // Top overlap + var cut = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cut) { + display.view = display.view.slice(cut.index); + display.viewFrom = cut.lineN; + display.viewTo += lendiff; + } else { + resetView(cm); + } + } else if (to >= display.viewTo) { // Bottom overlap + var cut$1 = viewCuttingPoint(cm, from, from, -1); + if (cut$1) { + display.view = display.view.slice(0, cut$1.index); + display.viewTo = cut$1.lineN; + } else { + resetView(cm); + } + } else { // Gap in the middle + var cutTop = viewCuttingPoint(cm, from, from, -1); + var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cutTop && cutBot) { + display.view = display.view.slice(0, cutTop.index) + .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) + .concat(display.view.slice(cutBot.index)); + display.viewTo += lendiff; + } else { + resetView(cm); + } + } + + var ext = display.externalMeasured; + if (ext) { + if (to < ext.lineN) + { ext.lineN += lendiff; } + else if (from < ext.lineN + ext.size) + { display.externalMeasured = null; } + } + } + + // Register a change to a single line. Type must be one of "text", + // "gutter", "class", "widget" + function regLineChange(cm, line, type) { + cm.curOp.viewChanged = true; + var display = cm.display, ext = cm.display.externalMeasured; + if (ext && line >= ext.lineN && line < ext.lineN + ext.size) + { display.externalMeasured = null; } + + if (line < display.viewFrom || line >= display.viewTo) { return } + var lineView = display.view[findViewIndex(cm, line)]; + if (lineView.node == null) { return } + var arr = lineView.changes || (lineView.changes = []); + if (indexOf(arr, type) == -1) { arr.push(type); } + } + + // Clear the view. + function resetView(cm) { + cm.display.viewFrom = cm.display.viewTo = cm.doc.first; + cm.display.view = []; + cm.display.viewOffset = 0; + } + + function viewCuttingPoint(cm, oldN, newN, dir) { + var index = findViewIndex(cm, oldN), diff, view = cm.display.view; + if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) + { return {index: index, lineN: newN} } + var n = cm.display.viewFrom; + for (var i = 0; i < index; i++) + { n += view[i].size; } + if (n != oldN) { + if (dir > 0) { + if (index == view.length - 1) { return null } + diff = (n + view[index].size) - oldN; + index++; + } else { + diff = n - oldN; + } + oldN += diff; newN += diff; + } + while (visualLineNo(cm.doc, newN) != newN) { + if (index == (dir < 0 ? 0 : view.length - 1)) { return null } + newN += dir * view[index - (dir < 0 ? 1 : 0)].size; + index += dir; + } + return {index: index, lineN: newN} + } + + // Force the view to cover a given range, adding empty view element + // or clipping off existing ones as needed. + function adjustView(cm, from, to) { + var display = cm.display, view = display.view; + if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { + display.view = buildViewArray(cm, from, to); + display.viewFrom = from; + } else { + if (display.viewFrom > from) + { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); } + else if (display.viewFrom < from) + { display.view = display.view.slice(findViewIndex(cm, from)); } + display.viewFrom = from; + if (display.viewTo < to) + { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); } + else if (display.viewTo > to) + { display.view = display.view.slice(0, findViewIndex(cm, to)); } + } + display.viewTo = to; + } + + // Count the number of lines in the view whose DOM representation is + // out of date (or nonexistent). + function countDirtyView(cm) { + var view = cm.display.view, dirty = 0; + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; } + } + return dirty + } + + function updateSelection(cm) { + cm.display.input.showSelection(cm.display.input.prepareSelection()); + } + + function prepareSelection(cm, primary) { + if ( primary === void 0 ) primary = true; + + var doc = cm.doc, result = {}; + var curFragment = result.cursors = document.createDocumentFragment(); + var selFragment = result.selection = document.createDocumentFragment(); + + var customCursor = cm.options.$customCursor; + if (customCursor) { primary = true; } + for (var i = 0; i < doc.sel.ranges.length; i++) { + if (!primary && i == doc.sel.primIndex) { continue } + var range = doc.sel.ranges[i]; + if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue } + var collapsed = range.empty(); + if (customCursor) { + var head = customCursor(cm, range); + if (head) { drawSelectionCursor(cm, head, curFragment); } + } else if (collapsed || cm.options.showCursorWhenSelecting) { + drawSelectionCursor(cm, range.head, curFragment); + } + if (!collapsed) + { drawSelectionRange(cm, range, selFragment); } + } + return result + } + + // Draws a cursor for the given range + function drawSelectionCursor(cm, head, output) { + var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine); + + var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); + cursor.style.left = pos.left + "px"; + cursor.style.top = pos.top + "px"; + cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; + + if (/\bcm-fat-cursor\b/.test(cm.getWrapperElement().className)) { + var charPos = charCoords(cm, head, "div", null, null); + var width = charPos.right - charPos.left; + cursor.style.width = (width > 0 ? width : cm.defaultCharWidth()) + "px"; + } + + if (pos.other) { + // Secondary cursor, shown when on a 'jump' in bi-directional text + var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); + otherCursor.style.display = ""; + otherCursor.style.left = pos.other.left + "px"; + otherCursor.style.top = pos.other.top + "px"; + otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; + } + } + + function cmpCoords(a, b) { return a.top - b.top || a.left - b.left } + + // Draws the given range as a highlighted selection + function drawSelectionRange(cm, range, output) { + var display = cm.display, doc = cm.doc; + var fragment = document.createDocumentFragment(); + var padding = paddingH(cm.display), leftSide = padding.left; + var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; + var docLTR = doc.direction == "ltr"; + + function add(left, top, width, bottom) { + if (top < 0) { top = 0; } + top = Math.round(top); + bottom = Math.round(bottom); + fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n height: " + (bottom - top) + "px"))); + } + + function drawForLine(line, fromArg, toArg) { + var lineObj = getLine(doc, line); + var lineLen = lineObj.text.length; + var start, end; + function coords(ch, bias) { + return charCoords(cm, Pos(line, ch), "div", lineObj, bias) + } + + function wrapX(pos, dir, side) { + var extent = wrappedLineExtentChar(cm, lineObj, null, pos); + var prop = (dir == "ltr") == (side == "after") ? "left" : "right"; + var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1); + return coords(ch, prop)[prop] + } + + var order = getOrder(lineObj, doc.direction); + iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) { + var ltr = dir == "ltr"; + var fromPos = coords(from, ltr ? "left" : "right"); + var toPos = coords(to - 1, ltr ? "right" : "left"); + + var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen; + var first = i == 0, last = !order || i == order.length - 1; + if (toPos.top - fromPos.top <= 3) { // Single line + var openLeft = (docLTR ? openStart : openEnd) && first; + var openRight = (docLTR ? openEnd : openStart) && last; + var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left; + var right = openRight ? rightSide : (ltr ? toPos : fromPos).right; + add(left, fromPos.top, right - left, fromPos.bottom); + } else { // Multiple lines + var topLeft, topRight, botLeft, botRight; + if (ltr) { + topLeft = docLTR && openStart && first ? leftSide : fromPos.left; + topRight = docLTR ? rightSide : wrapX(from, dir, "before"); + botLeft = docLTR ? leftSide : wrapX(to, dir, "after"); + botRight = docLTR && openEnd && last ? rightSide : toPos.right; + } else { + topLeft = !docLTR ? leftSide : wrapX(from, dir, "before"); + topRight = !docLTR && openStart && first ? rightSide : fromPos.right; + botLeft = !docLTR && openEnd && last ? leftSide : toPos.left; + botRight = !docLTR ? rightSide : wrapX(to, dir, "after"); + } + add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom); + if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); } + add(botLeft, toPos.top, botRight - botLeft, toPos.bottom); + } + + if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; } + if (cmpCoords(toPos, start) < 0) { start = toPos; } + if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; } + if (cmpCoords(toPos, end) < 0) { end = toPos; } + }); + return {start: start, end: end} + } + + var sFrom = range.from(), sTo = range.to(); + if (sFrom.line == sTo.line) { + drawForLine(sFrom.line, sFrom.ch, sTo.ch); + } else { + var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line); + var singleVLine = visualLine(fromLine) == visualLine(toLine); + var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; + var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; + if (singleVLine) { + if (leftEnd.top < rightStart.top - 2) { + add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); + add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); + } else { + add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); + } + } + if (leftEnd.bottom < rightStart.top) + { add(leftSide, leftEnd.bottom, null, rightStart.top); } + } + + output.appendChild(fragment); + } + + // Cursor-blinking + function restartBlink(cm) { + if (!cm.state.focused) { return } + var display = cm.display; + clearInterval(display.blinker); + var on = true; + display.cursorDiv.style.visibility = ""; + if (cm.options.cursorBlinkRate > 0) + { display.blinker = setInterval(function () { + if (!cm.hasFocus()) { onBlur(cm); } + display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; + }, cm.options.cursorBlinkRate); } + else if (cm.options.cursorBlinkRate < 0) + { display.cursorDiv.style.visibility = "hidden"; } + } + + function ensureFocus(cm) { + if (!cm.hasFocus()) { + cm.display.input.focus(); + if (!cm.state.focused) { onFocus(cm); } + } + } + + function delayBlurEvent(cm) { + cm.state.delayingBlurEvent = true; + setTimeout(function () { if (cm.state.delayingBlurEvent) { + cm.state.delayingBlurEvent = false; + if (cm.state.focused) { onBlur(cm); } + } }, 100); + } + + function onFocus(cm, e) { + if (cm.state.delayingBlurEvent && !cm.state.draggingText) { cm.state.delayingBlurEvent = false; } + + if (cm.options.readOnly == "nocursor") { return } + if (!cm.state.focused) { + signal(cm, "focus", cm, e); + cm.state.focused = true; + addClass(cm.display.wrapper, "CodeMirror-focused"); + // This test prevents this from firing when a context + // menu is closed (since the input reset would kill the + // select-all detection hack) + if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { + cm.display.input.reset(); + if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730 + } + cm.display.input.receivedFocus(); + } + restartBlink(cm); + } + function onBlur(cm, e) { + if (cm.state.delayingBlurEvent) { return } + + if (cm.state.focused) { + signal(cm, "blur", cm, e); + cm.state.focused = false; + rmClass(cm.display.wrapper, "CodeMirror-focused"); + } + clearInterval(cm.display.blinker); + setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150); + } + + // Read the actual heights of the rendered lines, and update their + // stored heights to match. + function updateHeightsInViewport(cm) { + var display = cm.display; + var prevBottom = display.lineDiv.offsetTop; + var viewTop = Math.max(0, display.scroller.getBoundingClientRect().top); + var oldHeight = display.lineDiv.getBoundingClientRect().top; + var mustScroll = 0; + for (var i = 0; i < display.view.length; i++) { + var cur = display.view[i], wrapping = cm.options.lineWrapping; + var height = (void 0), width = 0; + if (cur.hidden) { continue } + oldHeight += cur.line.height; + if (ie && ie_version < 8) { + var bot = cur.node.offsetTop + cur.node.offsetHeight; + height = bot - prevBottom; + prevBottom = bot; + } else { + var box = cur.node.getBoundingClientRect(); + height = box.bottom - box.top; + // Check that lines don't extend past the right of the current + // editor width + if (!wrapping && cur.text.firstChild) + { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; } + } + var diff = cur.line.height - height; + if (diff > .005 || diff < -.005) { + if (oldHeight < viewTop) { mustScroll -= diff; } + updateLineHeight(cur.line, height); + updateWidgetHeight(cur.line); + if (cur.rest) { for (var j = 0; j < cur.rest.length; j++) + { updateWidgetHeight(cur.rest[j]); } } + } + if (width > cm.display.sizerWidth) { + var chWidth = Math.ceil(width / charWidth(cm.display)); + if (chWidth > cm.display.maxLineLength) { + cm.display.maxLineLength = chWidth; + cm.display.maxLine = cur.line; + cm.display.maxLineChanged = true; + } + } + } + if (Math.abs(mustScroll) > 2) { display.scroller.scrollTop += mustScroll; } + } + + // Read and store the height of line widgets associated with the + // given line. + function updateWidgetHeight(line) { + if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) { + var w = line.widgets[i], parent = w.node.parentNode; + if (parent) { w.height = parent.offsetHeight; } + } } + } + + // Compute the lines that are visible in a given viewport (defaults + // the current scroll position). viewport may contain top, + // height, and ensure (see op.scrollToPos) properties. + function visibleLines(display, doc, viewport) { + var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; + top = Math.floor(top - paddingTop(display)); + var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; + + var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom); + // Ensure is a {from: {line, ch}, to: {line, ch}} object, and + // forces those lines into the viewport (if possible). + if (viewport && viewport.ensure) { + var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line; + if (ensureFrom < from) { + from = ensureFrom; + to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); + } else if (Math.min(ensureTo, doc.lastLine()) >= to) { + from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); + to = ensureTo; + } + } + return {from: from, to: Math.max(to, from + 1)} + } + + // SCROLLING THINGS INTO VIEW + + // If an editor sits on the top or bottom of the window, partially + // scrolled out of view, this ensures that the cursor is visible. + function maybeScrollWindow(cm, rect) { + if (signalDOMEvent(cm, "scrollCursorIntoView")) { return } + + var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; + var doc = display.wrapper.ownerDocument; + if (rect.top + box.top < 0) { doScroll = true; } + else if (rect.bottom + box.top > (doc.defaultView.innerHeight || doc.documentElement.clientHeight)) { doScroll = false; } + if (doScroll != null && !phantom) { + var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + (rect.left) + "px; width: " + (Math.max(2, rect.right - rect.left)) + "px;")); + cm.display.lineSpace.appendChild(scrollNode); + scrollNode.scrollIntoView(doScroll); + cm.display.lineSpace.removeChild(scrollNode); + } + } + + // Scroll a given position into view (immediately), verifying that + // it actually became visible (as line heights are accurately + // measured, the position of something may 'drift' during drawing). + function scrollPosIntoView(cm, pos, end, margin) { + if (margin == null) { margin = 0; } + var rect; + if (!cm.options.lineWrapping && pos == end) { + // Set pos and end to the cursor positions around the character pos sticks to + // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch + // If pos == Pos(_, 0, "before"), pos and end are unchanged + end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos; + pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos; + } + for (var limit = 0; limit < 5; limit++) { + var changed = false; + var coords = cursorCoords(cm, pos); + var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); + rect = {left: Math.min(coords.left, endCoords.left), + top: Math.min(coords.top, endCoords.top) - margin, + right: Math.max(coords.left, endCoords.left), + bottom: Math.max(coords.bottom, endCoords.bottom) + margin}; + var scrollPos = calculateScrollPos(cm, rect); + var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; + if (scrollPos.scrollTop != null) { + updateScrollTop(cm, scrollPos.scrollTop); + if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; } + } + if (scrollPos.scrollLeft != null) { + setScrollLeft(cm, scrollPos.scrollLeft); + if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; } + } + if (!changed) { break } + } + return rect + } + + // Scroll a given set of coordinates into view (immediately). + function scrollIntoView(cm, rect) { + var scrollPos = calculateScrollPos(cm, rect); + if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); } + if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); } + } + + // Calculate a new scroll position needed to scroll the given + // rectangle into view. Returns an object with scrollTop and + // scrollLeft properties. When these are undefined, the + // vertical/horizontal position does not need to be adjusted. + function calculateScrollPos(cm, rect) { + var display = cm.display, snapMargin = textHeight(cm.display); + if (rect.top < 0) { rect.top = 0; } + var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; + var screen = displayHeight(cm), result = {}; + if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; } + var docBottom = cm.doc.height + paddingVert(display); + var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin; + if (rect.top < screentop) { + result.scrollTop = atTop ? 0 : rect.top; + } else if (rect.bottom > screentop + screen) { + var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen); + if (newTop != screentop) { result.scrollTop = newTop; } + } + + var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth; + var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace; + var screenw = displayWidth(cm) - display.gutters.offsetWidth; + var tooWide = rect.right - rect.left > screenw; + if (tooWide) { rect.right = rect.left + screenw; } + if (rect.left < 10) + { result.scrollLeft = 0; } + else if (rect.left < screenleft) + { result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); } + else if (rect.right > screenw + screenleft - 3) + { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; } + return result + } + + // Store a relative adjustment to the scroll position in the current + // operation (to be applied when the operation finishes). + function addToScrollTop(cm, top) { + if (top == null) { return } + resolveScrollToPos(cm); + cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; + } + + // Make sure that at the end of the operation the current cursor is + // shown. + function ensureCursorVisible(cm) { + resolveScrollToPos(cm); + var cur = cm.getCursor(); + cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin}; + } + + function scrollToCoords(cm, x, y) { + if (x != null || y != null) { resolveScrollToPos(cm); } + if (x != null) { cm.curOp.scrollLeft = x; } + if (y != null) { cm.curOp.scrollTop = y; } + } + + function scrollToRange(cm, range) { + resolveScrollToPos(cm); + cm.curOp.scrollToPos = range; + } + + // When an operation has its scrollToPos property set, and another + // scroll action is applied before the end of the operation, this + // 'simulates' scrolling that position into view in a cheap way, so + // that the effect of intermediate scroll commands is not ignored. + function resolveScrollToPos(cm) { + var range = cm.curOp.scrollToPos; + if (range) { + cm.curOp.scrollToPos = null; + var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to); + scrollToCoordsRange(cm, from, to, range.margin); + } + } + + function scrollToCoordsRange(cm, from, to, margin) { + var sPos = calculateScrollPos(cm, { + left: Math.min(from.left, to.left), + top: Math.min(from.top, to.top) - margin, + right: Math.max(from.right, to.right), + bottom: Math.max(from.bottom, to.bottom) + margin + }); + scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop); + } + + // Sync the scrollable area and scrollbars, ensure the viewport + // covers the visible area. + function updateScrollTop(cm, val) { + if (Math.abs(cm.doc.scrollTop - val) < 2) { return } + if (!gecko) { updateDisplaySimple(cm, {top: val}); } + setScrollTop(cm, val, true); + if (gecko) { updateDisplaySimple(cm); } + startWorker(cm, 100); + } + + function setScrollTop(cm, val, forceScroll) { + val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val)); + if (cm.display.scroller.scrollTop == val && !forceScroll) { return } + cm.doc.scrollTop = val; + cm.display.scrollbars.setScrollTop(val); + if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; } + } + + // Sync scroller and scrollbar, ensure the gutter elements are + // aligned. + function setScrollLeft(cm, val, isScroller, forceScroll) { + val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth)); + if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return } + cm.doc.scrollLeft = val; + alignHorizontally(cm); + if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; } + cm.display.scrollbars.setScrollLeft(val); + } + + // SCROLLBARS + + // Prepare DOM reads needed to update the scrollbars. Done in one + // shot to minimize update/measure roundtrips. + function measureForScrollbars(cm) { + var d = cm.display, gutterW = d.gutters.offsetWidth; + var docH = Math.round(cm.doc.height + paddingVert(cm.display)); + return { + clientHeight: d.scroller.clientHeight, + viewHeight: d.wrapper.clientHeight, + scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, + viewWidth: d.wrapper.clientWidth, + barLeft: cm.options.fixedGutter ? gutterW : 0, + docHeight: docH, + scrollHeight: docH + scrollGap(cm) + d.barHeight, + nativeBarWidth: d.nativeBarWidth, + gutterWidth: gutterW + } + } + + var NativeScrollbars = function(place, scroll, cm) { + this.cm = cm; + var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); + var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); + vert.tabIndex = horiz.tabIndex = -1; + place(vert); place(horiz); + + on(vert, "scroll", function () { + if (vert.clientHeight) { scroll(vert.scrollTop, "vertical"); } + }); + on(horiz, "scroll", function () { + if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal"); } + }); + + this.checkedZeroWidth = false; + // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). + if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; } + }; + + NativeScrollbars.prototype.update = function (measure) { + var needsH = measure.scrollWidth > measure.clientWidth + 1; + var needsV = measure.scrollHeight > measure.clientHeight + 1; + var sWidth = measure.nativeBarWidth; + + if (needsV) { + this.vert.style.display = "block"; + this.vert.style.bottom = needsH ? sWidth + "px" : "0"; + var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); + // A bug in IE8 can cause this value to be negative, so guard it. + this.vert.firstChild.style.height = + Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; + } else { + this.vert.scrollTop = 0; + this.vert.style.display = ""; + this.vert.firstChild.style.height = "0"; + } + + if (needsH) { + this.horiz.style.display = "block"; + this.horiz.style.right = needsV ? sWidth + "px" : "0"; + this.horiz.style.left = measure.barLeft + "px"; + var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); + this.horiz.firstChild.style.width = + Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; + } else { + this.horiz.style.display = ""; + this.horiz.firstChild.style.width = "0"; + } + + if (!this.checkedZeroWidth && measure.clientHeight > 0) { + if (sWidth == 0) { this.zeroWidthHack(); } + this.checkedZeroWidth = true; + } + + return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0} + }; + + NativeScrollbars.prototype.setScrollLeft = function (pos) { + if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; } + if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz"); } + }; + + NativeScrollbars.prototype.setScrollTop = function (pos) { + if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; } + if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, "vert"); } + }; + + NativeScrollbars.prototype.zeroWidthHack = function () { + var w = mac && !mac_geMountainLion ? "12px" : "18px"; + this.horiz.style.height = this.vert.style.width = w; + this.horiz.style.visibility = this.vert.style.visibility = "hidden"; + this.disableHoriz = new Delayed; + this.disableVert = new Delayed; + }; + + NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) { + bar.style.visibility = ""; + function maybeDisable() { + // To find out whether the scrollbar is still visible, we + // check whether the element under the pixel in the bottom + // right corner of the scrollbar box is the scrollbar box + // itself (when the bar is still visible) or its filler child + // (when the bar is hidden). If it is still visible, we keep + // it enabled, if it's hidden, we disable pointer events. + var box = bar.getBoundingClientRect(); + var elt = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) + : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1); + if (elt != bar) { bar.style.visibility = "hidden"; } + else { delay.set(1000, maybeDisable); } + } + delay.set(1000, maybeDisable); + }; + + NativeScrollbars.prototype.clear = function () { + var parent = this.horiz.parentNode; + parent.removeChild(this.horiz); + parent.removeChild(this.vert); + }; + + var NullScrollbars = function () {}; + + NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} }; + NullScrollbars.prototype.setScrollLeft = function () {}; + NullScrollbars.prototype.setScrollTop = function () {}; + NullScrollbars.prototype.clear = function () {}; + + function updateScrollbars(cm, measure) { + if (!measure) { measure = measureForScrollbars(cm); } + var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight; + updateScrollbarsInner(cm, measure); + for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { + if (startWidth != cm.display.barWidth && cm.options.lineWrapping) + { updateHeightsInViewport(cm); } + updateScrollbarsInner(cm, measureForScrollbars(cm)); + startWidth = cm.display.barWidth; startHeight = cm.display.barHeight; + } + } + + // Re-synchronize the fake scrollbars with the actual size of the + // content. + function updateScrollbarsInner(cm, measure) { + var d = cm.display; + var sizes = d.scrollbars.update(measure); + + d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; + d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; + d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"; + + if (sizes.right && sizes.bottom) { + d.scrollbarFiller.style.display = "block"; + d.scrollbarFiller.style.height = sizes.bottom + "px"; + d.scrollbarFiller.style.width = sizes.right + "px"; + } else { d.scrollbarFiller.style.display = ""; } + if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { + d.gutterFiller.style.display = "block"; + d.gutterFiller.style.height = sizes.bottom + "px"; + d.gutterFiller.style.width = measure.gutterWidth + "px"; + } else { d.gutterFiller.style.display = ""; } + } + + var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}; + + function initScrollbars(cm) { + if (cm.display.scrollbars) { + cm.display.scrollbars.clear(); + if (cm.display.scrollbars.addClass) + { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); } + } + + cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) { + cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); + // Prevent clicks in the scrollbars from killing focus + on(node, "mousedown", function () { + if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); } + }); + node.setAttribute("cm-not-content", "true"); + }, function (pos, axis) { + if (axis == "horizontal") { setScrollLeft(cm, pos); } + else { updateScrollTop(cm, pos); } + }, cm); + if (cm.display.scrollbars.addClass) + { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); } + } + + // Operations are used to wrap a series of changes to the editor + // state in such a way that each change won't have to update the + // cursor and display (which would be awkward, slow, and + // error-prone). Instead, display updates are batched and then all + // combined and executed at once. + + var nextOpId = 0; + // Start a new operation. + function startOperation(cm) { + cm.curOp = { + cm: cm, + viewChanged: false, // Flag that indicates that lines might need to be redrawn + startHeight: cm.doc.height, // Used to detect need to update scrollbar + forceUpdate: false, // Used to force a redraw + updateInput: 0, // Whether to reset the input textarea + typing: false, // Whether this reset should be careful to leave existing text (for compositing) + changeObjs: null, // Accumulated changes, for firing change events + cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on + cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already + selectionChanged: false, // Whether the selection needs to be redrawn + updateMaxLine: false, // Set when the widest line needs to be determined anew + scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet + scrollToPos: null, // Used to scroll to a specific position + focus: false, + id: ++nextOpId, // Unique ID + markArrays: null // Used by addMarkedSpan + }; + pushOperation(cm.curOp); + } + + // Finish an operation, updating the display and signalling delayed events + function endOperation(cm) { + var op = cm.curOp; + if (op) { finishOperation(op, function (group) { + for (var i = 0; i < group.ops.length; i++) + { group.ops[i].cm.curOp = null; } + endOperations(group); + }); } + } + + // The DOM updates done when an operation finishes are batched so + // that the minimum number of relayouts are required. + function endOperations(group) { + var ops = group.ops; + for (var i = 0; i < ops.length; i++) // Read DOM + { endOperation_R1(ops[i]); } + for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe) + { endOperation_W1(ops[i$1]); } + for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM + { endOperation_R2(ops[i$2]); } + for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe) + { endOperation_W2(ops[i$3]); } + for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM + { endOperation_finish(ops[i$4]); } + } + + function endOperation_R1(op) { + var cm = op.cm, display = cm.display; + maybeClipScrollbars(cm); + if (op.updateMaxLine) { findMaxLine(cm); } + + op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || + op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || + op.scrollToPos.to.line >= display.viewTo) || + display.maxLineChanged && cm.options.lineWrapping; + op.update = op.mustUpdate && + new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate); + } + + function endOperation_W1(op) { + op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); + } + + function endOperation_R2(op) { + var cm = op.cm, display = cm.display; + if (op.updatedDisplay) { updateHeightsInViewport(cm); } + + op.barMeasure = measureForScrollbars(cm); + + // If the max line changed since it was last measured, measure it, + // and ensure the document's width matches it. + // updateDisplay_W2 will use these properties to do the actual resizing + if (display.maxLineChanged && !cm.options.lineWrapping) { + op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; + cm.display.sizerWidth = op.adjustWidthTo; + op.barMeasure.scrollWidth = + Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); + op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); + } + + if (op.updatedDisplay || op.selectionChanged) + { op.preparedSelection = display.input.prepareSelection(); } + } + + function endOperation_W2(op) { + var cm = op.cm; + + if (op.adjustWidthTo != null) { + cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; + if (op.maxScrollLeft < cm.doc.scrollLeft) + { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); } + cm.display.maxLineChanged = false; + } + + var takeFocus = op.focus && op.focus == activeElt(root(cm)); + if (op.preparedSelection) + { cm.display.input.showSelection(op.preparedSelection, takeFocus); } + if (op.updatedDisplay || op.startHeight != cm.doc.height) + { updateScrollbars(cm, op.barMeasure); } + if (op.updatedDisplay) + { setDocumentHeight(cm, op.barMeasure); } + + if (op.selectionChanged) { restartBlink(cm); } + + if (cm.state.focused && op.updateInput) + { cm.display.input.reset(op.typing); } + if (takeFocus) { ensureFocus(op.cm); } + } + + function endOperation_finish(op) { + var cm = op.cm, display = cm.display, doc = cm.doc; + + if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); } + + // Abort mouse wheel delta measurement, when scrolling explicitly + if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) + { display.wheelStartX = display.wheelStartY = null; } + + // Propagate the scroll position to the actual DOM scroller + if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); } + + if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); } + // If we need to scroll a specific position into view, do so. + if (op.scrollToPos) { + var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), + clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); + maybeScrollWindow(cm, rect); + } + + // Fire events for markers that are hidden/unidden by editing or + // undoing + var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; + if (hidden) { for (var i = 0; i < hidden.length; ++i) + { if (!hidden[i].lines.length) { signal(hidden[i], "hide"); } } } + if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1) + { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide"); } } } + + if (display.wrapper.offsetHeight) + { doc.scrollTop = cm.display.scroller.scrollTop; } + + // Fire change events, and delayed event handlers + if (op.changeObjs) + { signal(cm, "changes", cm, op.changeObjs); } + if (op.update) + { op.update.finish(); } + } + + // Run the given function in an operation + function runInOp(cm, f) { + if (cm.curOp) { return f() } + startOperation(cm); + try { return f() } + finally { endOperation(cm); } + } + // Wraps a function in an operation. Returns the wrapped function. + function operation(cm, f) { + return function() { + if (cm.curOp) { return f.apply(cm, arguments) } + startOperation(cm); + try { return f.apply(cm, arguments) } + finally { endOperation(cm); } + } + } + // Used to add methods to editor and doc instances, wrapping them in + // operations. + function methodOp(f) { + return function() { + if (this.curOp) { return f.apply(this, arguments) } + startOperation(this); + try { return f.apply(this, arguments) } + finally { endOperation(this); } + } + } + function docMethodOp(f) { + return function() { + var cm = this.cm; + if (!cm || cm.curOp) { return f.apply(this, arguments) } + startOperation(cm); + try { return f.apply(this, arguments) } + finally { endOperation(cm); } + } + } + + // HIGHLIGHT WORKER + + function startWorker(cm, time) { + if (cm.doc.highlightFrontier < cm.display.viewTo) + { cm.state.highlight.set(time, bind(highlightWorker, cm)); } + } + + function highlightWorker(cm) { + var doc = cm.doc; + if (doc.highlightFrontier >= cm.display.viewTo) { return } + var end = +new Date + cm.options.workTime; + var context = getContextBefore(cm, doc.highlightFrontier); + var changedLines = []; + + doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) { + if (context.line >= cm.display.viewFrom) { // Visible + var oldStyles = line.styles; + var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null; + var highlighted = highlightLine(cm, line, context, true); + if (resetState) { context.state = resetState; } + line.styles = highlighted.styles; + var oldCls = line.styleClasses, newCls = highlighted.classes; + if (newCls) { line.styleClasses = newCls; } + else if (oldCls) { line.styleClasses = null; } + var ischange = !oldStyles || oldStyles.length != line.styles.length || + oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); + for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; } + if (ischange) { changedLines.push(context.line); } + line.stateAfter = context.save(); + context.nextLine(); + } else { + if (line.text.length <= cm.options.maxHighlightLength) + { processLine(cm, line.text, context); } + line.stateAfter = context.line % 5 == 0 ? context.save() : null; + context.nextLine(); + } + if (+new Date > end) { + startWorker(cm, cm.options.workDelay); + return true + } + }); + doc.highlightFrontier = context.line; + doc.modeFrontier = Math.max(doc.modeFrontier, context.line); + if (changedLines.length) { runInOp(cm, function () { + for (var i = 0; i < changedLines.length; i++) + { regLineChange(cm, changedLines[i], "text"); } + }); } + } + + // DISPLAY DRAWING + + var DisplayUpdate = function(cm, viewport, force) { + var display = cm.display; + + this.viewport = viewport; + // Store some values that we'll need later (but don't want to force a relayout for) + this.visible = visibleLines(display, cm.doc, viewport); + this.editorIsHidden = !display.wrapper.offsetWidth; + this.wrapperHeight = display.wrapper.clientHeight; + this.wrapperWidth = display.wrapper.clientWidth; + this.oldDisplayWidth = displayWidth(cm); + this.force = force; + this.dims = getDimensions(cm); + this.events = []; + }; + + DisplayUpdate.prototype.signal = function (emitter, type) { + if (hasHandler(emitter, type)) + { this.events.push(arguments); } + }; + DisplayUpdate.prototype.finish = function () { + for (var i = 0; i < this.events.length; i++) + { signal.apply(null, this.events[i]); } + }; + + function maybeClipScrollbars(cm) { + var display = cm.display; + if (!display.scrollbarsClipped && display.scroller.offsetWidth) { + display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; + display.heightForcer.style.height = scrollGap(cm) + "px"; + display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; + display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; + display.scrollbarsClipped = true; + } + } + + function selectionSnapshot(cm) { + if (cm.hasFocus()) { return null } + var active = activeElt(root(cm)); + if (!active || !contains(cm.display.lineDiv, active)) { return null } + var result = {activeElt: active}; + if (window.getSelection) { + var sel = win(cm).getSelection(); + if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) { + result.anchorNode = sel.anchorNode; + result.anchorOffset = sel.anchorOffset; + result.focusNode = sel.focusNode; + result.focusOffset = sel.focusOffset; + } + } + return result + } + + function restoreSelection(snapshot) { + if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt(rootNode(snapshot.activeElt))) { return } + snapshot.activeElt.focus(); + if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) && + snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) { + var doc = snapshot.activeElt.ownerDocument; + var sel = doc.defaultView.getSelection(), range = doc.createRange(); + range.setEnd(snapshot.anchorNode, snapshot.anchorOffset); + range.collapse(false); + sel.removeAllRanges(); + sel.addRange(range); + sel.extend(snapshot.focusNode, snapshot.focusOffset); + } + } + + // Does the actual updating of the line display. Bails out + // (returning false) when there is nothing to be done and forced is + // false. + function updateDisplayIfNeeded(cm, update) { + var display = cm.display, doc = cm.doc; + + if (update.editorIsHidden) { + resetView(cm); + return false + } + + // Bail out if the visible area is already rendered and nothing changed. + if (!update.force && + update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && + display.renderedView == display.view && countDirtyView(cm) == 0) + { return false } + + if (maybeUpdateLineNumberWidth(cm)) { + resetView(cm); + update.dims = getDimensions(cm); + } + + // Compute a suitable new viewport (from & to) + var end = doc.first + doc.size; + var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); + var to = Math.min(end, update.visible.to + cm.options.viewportMargin); + if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); } + if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); } + if (sawCollapsedSpans) { + from = visualLineNo(cm.doc, from); + to = visualLineEndNo(cm.doc, to); + } + + var different = from != display.viewFrom || to != display.viewTo || + display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; + adjustView(cm, from, to); + + display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); + // Position the mover div to align with the current scroll position + cm.display.mover.style.top = display.viewOffset + "px"; + + var toUpdate = countDirtyView(cm); + if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && + (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) + { return false } + + // For big changes, we hide the enclosing element during the + // update, since that speeds up the operations on most browsers. + var selSnapshot = selectionSnapshot(cm); + if (toUpdate > 4) { display.lineDiv.style.display = "none"; } + patchDisplay(cm, display.updateLineNumbers, update.dims); + if (toUpdate > 4) { display.lineDiv.style.display = ""; } + display.renderedView = display.view; + // There might have been a widget with a focused element that got + // hidden or updated, if so re-focus it. + restoreSelection(selSnapshot); + + // Prevent selection and cursors from interfering with the scroll + // width and height. + removeChildren(display.cursorDiv); + removeChildren(display.selectionDiv); + display.gutters.style.height = display.sizer.style.minHeight = 0; + + if (different) { + display.lastWrapHeight = update.wrapperHeight; + display.lastWrapWidth = update.wrapperWidth; + startWorker(cm, 400); + } + + display.updateLineNumbers = null; + + return true + } + + function postUpdateDisplay(cm, update) { + var viewport = update.viewport; + + for (var first = true;; first = false) { + if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { + // Clip forced viewport to actual scrollable area. + if (viewport && viewport.top != null) + { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; } + // Updated line heights might result in the drawn area not + // actually covering the viewport. Keep looping until it does. + update.visible = visibleLines(cm.display, cm.doc, viewport); + if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) + { break } + } else if (first) { + update.visible = visibleLines(cm.display, cm.doc, viewport); + } + if (!updateDisplayIfNeeded(cm, update)) { break } + updateHeightsInViewport(cm); + var barMeasure = measureForScrollbars(cm); + updateSelection(cm); + updateScrollbars(cm, barMeasure); + setDocumentHeight(cm, barMeasure); + update.force = false; + } + + update.signal(cm, "update", cm); + if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { + update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); + cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo; + } + } + + function updateDisplaySimple(cm, viewport) { + var update = new DisplayUpdate(cm, viewport); + if (updateDisplayIfNeeded(cm, update)) { + updateHeightsInViewport(cm); + postUpdateDisplay(cm, update); + var barMeasure = measureForScrollbars(cm); + updateSelection(cm); + updateScrollbars(cm, barMeasure); + setDocumentHeight(cm, barMeasure); + update.finish(); + } + } + + // Sync the actual display DOM structure with display.view, removing + // nodes for lines that are no longer in view, and creating the ones + // that are not there yet, and updating the ones that are out of + // date. + function patchDisplay(cm, updateNumbersFrom, dims) { + var display = cm.display, lineNumbers = cm.options.lineNumbers; + var container = display.lineDiv, cur = container.firstChild; + + function rm(node) { + var next = node.nextSibling; + // Works around a throw-scroll bug in OS X Webkit + if (webkit && mac && cm.display.currentWheelTarget == node) + { node.style.display = "none"; } + else + { node.parentNode.removeChild(node); } + return next + } + + var view = display.view, lineN = display.viewFrom; + // Loop over the elements in the view, syncing cur (the DOM nodes + // in display.lineDiv) with the view as we go. + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet + var node = buildLineElement(cm, lineView, lineN, dims); + container.insertBefore(node, cur); + } else { // Already drawn + while (cur != lineView.node) { cur = rm(cur); } + var updateNumber = lineNumbers && updateNumbersFrom != null && + updateNumbersFrom <= lineN && lineView.lineNumber; + if (lineView.changes) { + if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false; } + updateLineForChanges(cm, lineView, lineN, dims); + } + if (updateNumber) { + removeChildren(lineView.lineNumber); + lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); + } + cur = lineView.node.nextSibling; + } + lineN += lineView.size; + } + while (cur) { cur = rm(cur); } + } + + function updateGutterSpace(display) { + var width = display.gutters.offsetWidth; + display.sizer.style.marginLeft = width + "px"; + // Send an event to consumers responding to changes in gutter width. + signalLater(display, "gutterChanged", display); + } + + function setDocumentHeight(cm, measure) { + cm.display.sizer.style.minHeight = measure.docHeight + "px"; + cm.display.heightForcer.style.top = measure.docHeight + "px"; + cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px"; + } + + // Re-align line numbers and gutter marks to compensate for + // horizontal scrolling. + function alignHorizontally(cm) { + var display = cm.display, view = display.view; + if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return } + var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; + var gutterW = display.gutters.offsetWidth, left = comp + "px"; + for (var i = 0; i < view.length; i++) { if (!view[i].hidden) { + if (cm.options.fixedGutter) { + if (view[i].gutter) + { view[i].gutter.style.left = left; } + if (view[i].gutterBackground) + { view[i].gutterBackground.style.left = left; } + } + var align = view[i].alignable; + if (align) { for (var j = 0; j < align.length; j++) + { align[j].style.left = left; } } + } } + if (cm.options.fixedGutter) + { display.gutters.style.left = (comp + gutterW) + "px"; } + } + + // Used to ensure that the line number gutter is still the right + // size for the current document size. Returns true when an update + // is needed. + function maybeUpdateLineNumberWidth(cm) { + if (!cm.options.lineNumbers) { return false } + var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; + if (last.length != display.lineNumChars) { + var test = display.measure.appendChild(elt("div", [elt("div", last)], + "CodeMirror-linenumber CodeMirror-gutter-elt")); + var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; + display.lineGutter.style.width = ""; + display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; + display.lineNumWidth = display.lineNumInnerWidth + padding; + display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; + display.lineGutter.style.width = display.lineNumWidth + "px"; + updateGutterSpace(cm.display); + return true + } + return false + } + + function getGutters(gutters, lineNumbers) { + var result = [], sawLineNumbers = false; + for (var i = 0; i < gutters.length; i++) { + var name = gutters[i], style = null; + if (typeof name != "string") { style = name.style; name = name.className; } + if (name == "CodeMirror-linenumbers") { + if (!lineNumbers) { continue } + else { sawLineNumbers = true; } + } + result.push({className: name, style: style}); + } + if (lineNumbers && !sawLineNumbers) { result.push({className: "CodeMirror-linenumbers", style: null}); } + return result + } + + // Rebuild the gutter elements, ensure the margin to the left of the + // code matches their width. + function renderGutters(display) { + var gutters = display.gutters, specs = display.gutterSpecs; + removeChildren(gutters); + display.lineGutter = null; + for (var i = 0; i < specs.length; ++i) { + var ref = specs[i]; + var className = ref.className; + var style = ref.style; + var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + className)); + if (style) { gElt.style.cssText = style; } + if (className == "CodeMirror-linenumbers") { + display.lineGutter = gElt; + gElt.style.width = (display.lineNumWidth || 1) + "px"; + } + } + gutters.style.display = specs.length ? "" : "none"; + updateGutterSpace(display); + } + + function updateGutters(cm) { + renderGutters(cm.display); + regChange(cm); + alignHorizontally(cm); + } + + // The display handles the DOM integration, both for input reading + // and content drawing. It holds references to DOM nodes and + // display-related state. + + function Display(place, doc, input, options) { + var d = this; + this.input = input; + + // Covers bottom-right square when both scrollbars are present. + d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); + d.scrollbarFiller.setAttribute("cm-not-content", "true"); + // Covers bottom of gutter when coverGutterNextToScrollbar is on + // and h scrollbar is present. + d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); + d.gutterFiller.setAttribute("cm-not-content", "true"); + // Will contain the actual code, positioned to cover the viewport. + d.lineDiv = eltP("div", null, "CodeMirror-code"); + // Elements are added to these to represent selection and cursors. + d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); + d.cursorDiv = elt("div", null, "CodeMirror-cursors"); + // A visibility: hidden element used to find the size of things. + d.measure = elt("div", null, "CodeMirror-measure"); + // When lines outside of the viewport are measured, they are drawn in this. + d.lineMeasure = elt("div", null, "CodeMirror-measure"); + // Wraps everything that needs to exist inside the vertically-padded coordinate system + d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], + null, "position: relative; outline: none"); + var lines = eltP("div", [d.lineSpace], "CodeMirror-lines"); + // Moved around its parent to cover visible view. + d.mover = elt("div", [lines], null, "position: relative"); + // Set to the height of the document, allowing scrolling. + d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); + d.sizerWidth = null; + // Behavior of elts with overflow: auto and padding is + // inconsistent across browsers. This is used to ensure the + // scrollable area is big enough. + d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); + // Will contain the gutters, if any. + d.gutters = elt("div", null, "CodeMirror-gutters"); + d.lineGutter = null; + // Actual scrollable element. + d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); + d.scroller.setAttribute("tabIndex", "-1"); + // The element in which the editor lives. + d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); + // See #6982. FIXME remove when this has been fixed for a while in Chrome + if (chrome && chrome_version >= 105) { d.wrapper.style.clipPath = "inset(0px)"; } + + // This attribute is respected by automatic translation systems such as Google Translate, + // and may also be respected by tools used by human translators. + d.wrapper.setAttribute('translate', 'no'); + + // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) + if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } + if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; } + + if (place) { + if (place.appendChild) { place.appendChild(d.wrapper); } + else { place(d.wrapper); } + } + + // Current rendered range (may be bigger than the view window). + d.viewFrom = d.viewTo = doc.first; + d.reportedViewFrom = d.reportedViewTo = doc.first; + // Information about the rendered lines. + d.view = []; + d.renderedView = null; + // Holds info about a single rendered line when it was rendered + // for measurement, while not in view. + d.externalMeasured = null; + // Empty space (in pixels) above the view + d.viewOffset = 0; + d.lastWrapHeight = d.lastWrapWidth = 0; + d.updateLineNumbers = null; + + d.nativeBarWidth = d.barHeight = d.barWidth = 0; + d.scrollbarsClipped = false; + + // Used to only resize the line number gutter when necessary (when + // the amount of lines crosses a boundary that makes its width change) + d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; + // Set to true when a non-horizontal-scrolling line widget is + // added. As an optimization, line widget aligning is skipped when + // this is false. + d.alignWidgets = false; + + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; + + // Tracks the maximum line length so that the horizontal scrollbar + // can be kept static when scrolling. + d.maxLine = null; + d.maxLineLength = 0; + d.maxLineChanged = false; + + // Used for measuring wheel scrolling granularity + d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; + + // True when shift is held down. + d.shift = false; + + // Used to track whether anything happened since the context menu + // was opened. + d.selForContextMenu = null; + + d.activeTouch = null; + + d.gutterSpecs = getGutters(options.gutters, options.lineNumbers); + renderGutters(d); + + input.init(d); + } + + // Since the delta values reported on mouse wheel events are + // unstandardized between browsers and even browser versions, and + // generally horribly unpredictable, this code starts by measuring + // the scroll effect that the first few mouse wheel events have, + // and, from that, detects the way it can convert deltas to pixel + // offsets afterwards. + // + // The reason we want to know the amount a wheel event will scroll + // is that it gives us a chance to update the display before the + // actual scrolling happens, reducing flickering. + + var wheelSamples = 0, wheelPixelsPerUnit = null; + // Fill in a browser-detected starting value on browsers where we + // know one. These don't have to be accurate -- the result of them + // being wrong would just be a slight flicker on the first wheel + // scroll (if it is large enough). + if (ie) { wheelPixelsPerUnit = -.53; } + else if (gecko) { wheelPixelsPerUnit = 15; } + else if (chrome) { wheelPixelsPerUnit = -.7; } + else if (safari) { wheelPixelsPerUnit = -1/3; } + + function wheelEventDelta(e) { + var dx = e.wheelDeltaX, dy = e.wheelDeltaY; + if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; } + if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; } + else if (dy == null) { dy = e.wheelDelta; } + return {x: dx, y: dy} + } + function wheelEventPixels(e) { + var delta = wheelEventDelta(e); + delta.x *= wheelPixelsPerUnit; + delta.y *= wheelPixelsPerUnit; + return delta + } + + function onScrollWheel(cm, e) { + // On Chrome 102, viewport updates somehow stop wheel-based + // scrolling. Turning off pointer events during the scroll seems + // to avoid the issue. + if (chrome && chrome_version == 102) { + if (cm.display.chromeScrollHack == null) { cm.display.sizer.style.pointerEvents = "none"; } + else { clearTimeout(cm.display.chromeScrollHack); } + cm.display.chromeScrollHack = setTimeout(function () { + cm.display.chromeScrollHack = null; + cm.display.sizer.style.pointerEvents = ""; + }, 100); + } + var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y; + var pixelsPerUnit = wheelPixelsPerUnit; + if (e.deltaMode === 0) { + dx = e.deltaX; + dy = e.deltaY; + pixelsPerUnit = 1; + } + + var display = cm.display, scroll = display.scroller; + // Quit if there's nothing to scroll here + var canScrollX = scroll.scrollWidth > scroll.clientWidth; + var canScrollY = scroll.scrollHeight > scroll.clientHeight; + if (!(dx && canScrollX || dy && canScrollY)) { return } + + // Webkit browsers on OS X abort momentum scrolls when the target + // of the scroll event is removed from the scrollable element. + // This hack (see related code in patchDisplay) makes sure the + // element is kept around. + if (dy && mac && webkit) { + outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { + for (var i = 0; i < view.length; i++) { + if (view[i].node == cur) { + cm.display.currentWheelTarget = cur; + break outer + } + } + } + } + + // On some browsers, horizontal scrolling will cause redraws to + // happen before the gutter has been realigned, causing it to + // wriggle around in a most unseemly way. When we have an + // estimated pixels/delta value, we just handle horizontal + // scrolling entirely here. It'll be slightly off from native, but + // better than glitching out. + if (dx && !gecko && !presto && pixelsPerUnit != null) { + if (dy && canScrollY) + { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * pixelsPerUnit)); } + setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * pixelsPerUnit)); + // Only prevent default scrolling if vertical scrolling is + // actually possible. Otherwise, it causes vertical scroll + // jitter on OSX trackpads when deltaX is small and deltaY + // is large (issue #3579) + if (!dy || (dy && canScrollY)) + { e_preventDefault(e); } + display.wheelStartX = null; // Abort measurement, if in progress + return + } + + // 'Project' the visible viewport to cover the area that is being + // scrolled into view (if we know enough to estimate it). + if (dy && pixelsPerUnit != null) { + var pixels = dy * pixelsPerUnit; + var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; + if (pixels < 0) { top = Math.max(0, top + pixels - 50); } + else { bot = Math.min(cm.doc.height, bot + pixels + 50); } + updateDisplaySimple(cm, {top: top, bottom: bot}); + } + + if (wheelSamples < 20 && e.deltaMode !== 0) { + if (display.wheelStartX == null) { + display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; + display.wheelDX = dx; display.wheelDY = dy; + setTimeout(function () { + if (display.wheelStartX == null) { return } + var movedX = scroll.scrollLeft - display.wheelStartX; + var movedY = scroll.scrollTop - display.wheelStartY; + var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || + (movedX && display.wheelDX && movedX / display.wheelDX); + display.wheelStartX = display.wheelStartY = null; + if (!sample) { return } + wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); + ++wheelSamples; + }, 200); + } else { + display.wheelDX += dx; display.wheelDY += dy; + } + } + } + + // Selection objects are immutable. A new one is created every time + // the selection changes. A selection is one or more non-overlapping + // (and non-touching) ranges, sorted, and an integer that indicates + // which one is the primary selection (the one that's scrolled into + // view, that getCursor returns, etc). + var Selection = function(ranges, primIndex) { + this.ranges = ranges; + this.primIndex = primIndex; + }; + + Selection.prototype.primary = function () { return this.ranges[this.primIndex] }; + + Selection.prototype.equals = function (other) { + if (other == this) { return true } + if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false } + for (var i = 0; i < this.ranges.length; i++) { + var here = this.ranges[i], there = other.ranges[i]; + if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false } + } + return true + }; + + Selection.prototype.deepCopy = function () { + var out = []; + for (var i = 0; i < this.ranges.length; i++) + { out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); } + return new Selection(out, this.primIndex) + }; + + Selection.prototype.somethingSelected = function () { + for (var i = 0; i < this.ranges.length; i++) + { if (!this.ranges[i].empty()) { return true } } + return false + }; + + Selection.prototype.contains = function (pos, end) { + if (!end) { end = pos; } + for (var i = 0; i < this.ranges.length; i++) { + var range = this.ranges[i]; + if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) + { return i } + } + return -1 + }; + + var Range = function(anchor, head) { + this.anchor = anchor; this.head = head; + }; + + Range.prototype.from = function () { return minPos(this.anchor, this.head) }; + Range.prototype.to = function () { return maxPos(this.anchor, this.head) }; + Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch }; + + // Take an unsorted, potentially overlapping set of ranges, and + // build a selection out of it. 'Consumes' ranges array (modifying + // it). + function normalizeSelection(cm, ranges, primIndex) { + var mayTouch = cm && cm.options.selectionsMayTouch; + var prim = ranges[primIndex]; + ranges.sort(function (a, b) { return cmp(a.from(), b.from()); }); + primIndex = indexOf(ranges, prim); + for (var i = 1; i < ranges.length; i++) { + var cur = ranges[i], prev = ranges[i - 1]; + var diff = cmp(prev.to(), cur.from()); + if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) { + var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); + var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; + if (i <= primIndex) { --primIndex; } + ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); + } + } + return new Selection(ranges, primIndex) + } + + function simpleSelection(anchor, head) { + return new Selection([new Range(anchor, head || anchor)], 0) + } + + // Compute the position of the end of a change (its 'to' property + // refers to the pre-change end). + function changeEnd(change) { + if (!change.text) { return change.to } + return Pos(change.from.line + change.text.length - 1, + lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)) + } + + // Adjust a position to refer to the post-change position of the + // same text, or the end of the change if the change covers it. + function adjustForChange(pos, change) { + if (cmp(pos, change.from) < 0) { return pos } + if (cmp(pos, change.to) <= 0) { return changeEnd(change) } + + var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; + if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; } + return Pos(line, ch) + } + + function computeSelAfterChange(doc, change) { + var out = []; + for (var i = 0; i < doc.sel.ranges.length; i++) { + var range = doc.sel.ranges[i]; + out.push(new Range(adjustForChange(range.anchor, change), + adjustForChange(range.head, change))); + } + return normalizeSelection(doc.cm, out, doc.sel.primIndex) + } + + function offsetPos(pos, old, nw) { + if (pos.line == old.line) + { return Pos(nw.line, pos.ch - old.ch + nw.ch) } + else + { return Pos(nw.line + (pos.line - old.line), pos.ch) } + } + + // Used by replaceSelections to allow moving the selection to the + // start or around the replaced test. Hint may be "start" or "around". + function computeReplacedSel(doc, changes, hint) { + var out = []; + var oldPrev = Pos(doc.first, 0), newPrev = oldPrev; + for (var i = 0; i < changes.length; i++) { + var change = changes[i]; + var from = offsetPos(change.from, oldPrev, newPrev); + var to = offsetPos(changeEnd(change), oldPrev, newPrev); + oldPrev = change.to; + newPrev = to; + if (hint == "around") { + var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0; + out[i] = new Range(inv ? to : from, inv ? from : to); + } else { + out[i] = new Range(from, from); + } + } + return new Selection(out, doc.sel.primIndex) + } + + // Used to get the editor into a consistent state again when options change. + + function loadMode(cm) { + cm.doc.mode = getMode(cm.options, cm.doc.modeOption); + resetModeState(cm); + } + + function resetModeState(cm) { + cm.doc.iter(function (line) { + if (line.stateAfter) { line.stateAfter = null; } + if (line.styles) { line.styles = null; } + }); + cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first; + startWorker(cm, 100); + cm.state.modeGen++; + if (cm.curOp) { regChange(cm); } + } + + // DOCUMENT DATA STRUCTURE + + // By default, updates that start and end at the beginning of a line + // are treated specially, in order to make the association of line + // widgets and marker elements with the text behave more intuitive. + function isWholeLineUpdate(doc, change) { + return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && + (!doc.cm || doc.cm.options.wholeLineUpdateBefore) + } + + // Perform a change on the document data structure. + function updateDoc(doc, change, markedSpans, estimateHeight) { + function spansFor(n) {return markedSpans ? markedSpans[n] : null} + function update(line, text, spans) { + updateLine(line, text, spans, estimateHeight); + signalLater(line, "change", line, change); + } + function linesFor(start, end) { + var result = []; + for (var i = start; i < end; ++i) + { result.push(new Line(text[i], spansFor(i), estimateHeight)); } + return result + } + + var from = change.from, to = change.to, text = change.text; + var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); + var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; + + // Adjust the line structure + if (change.full) { + doc.insert(0, linesFor(0, text.length)); + doc.remove(text.length, doc.size - text.length); + } else if (isWholeLineUpdate(doc, change)) { + // This is a whole-line replace. Treated specially to make + // sure line objects move the way they are supposed to. + var added = linesFor(0, text.length - 1); + update(lastLine, lastLine.text, lastSpans); + if (nlines) { doc.remove(from.line, nlines); } + if (added.length) { doc.insert(from.line, added); } + } else if (firstLine == lastLine) { + if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); + } else { + var added$1 = linesFor(1, text.length - 1); + added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + doc.insert(from.line + 1, added$1); + } + } else if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); + doc.remove(from.line + 1, nlines); + } else { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); + var added$2 = linesFor(1, text.length - 1); + if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); } + doc.insert(from.line + 1, added$2); + } + + signalLater(doc, "change", doc, change); + } + + // Call f for all linked documents. + function linkedDocs(doc, f, sharedHistOnly) { + function propagate(doc, skip, sharedHist) { + if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) { + var rel = doc.linked[i]; + if (rel.doc == skip) { continue } + var shared = sharedHist && rel.sharedHist; + if (sharedHistOnly && !shared) { continue } + f(rel.doc, shared); + propagate(rel.doc, doc, shared); + } } + } + propagate(doc, null, true); + } + + // Attach a document to an editor. + function attachDoc(cm, doc) { + if (doc.cm) { throw new Error("This document is already in use.") } + cm.doc = doc; + doc.cm = cm; + estimateLineHeights(cm); + loadMode(cm); + setDirectionClass(cm); + cm.options.direction = doc.direction; + if (!cm.options.lineWrapping) { findMaxLine(cm); } + cm.options.mode = doc.modeOption; + regChange(cm); + } + + function setDirectionClass(cm) { + (cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl"); + } + + function directionChanged(cm) { + runInOp(cm, function () { + setDirectionClass(cm); + regChange(cm); + }); + } + + function History(prev) { + // Arrays of change events and selections. Doing something adds an + // event to done and clears undo. Undoing moves events from done + // to undone, redoing moves them in the other direction. + this.done = []; this.undone = []; + this.undoDepth = prev ? prev.undoDepth : Infinity; + // Used to track when changes can be merged into a single undo + // event + this.lastModTime = this.lastSelTime = 0; + this.lastOp = this.lastSelOp = null; + this.lastOrigin = this.lastSelOrigin = null; + // Used by the isClean() method + this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1; + } + + // Create a history change event from an updateDoc-style change + // object. + function historyChangeFromChange(doc, change) { + var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; + attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); + linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true); + return histChange + } + + // Pop all selection events off the end of a history array. Stop at + // a change event. + function clearSelectionEvents(array) { + while (array.length) { + var last = lst(array); + if (last.ranges) { array.pop(); } + else { break } + } + } + + // Find the top change event in the history. Pop off selection + // events that are in the way. + function lastChangeEvent(hist, force) { + if (force) { + clearSelectionEvents(hist.done); + return lst(hist.done) + } else if (hist.done.length && !lst(hist.done).ranges) { + return lst(hist.done) + } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { + hist.done.pop(); + return lst(hist.done) + } + } + + // Register a change in the history. Merges changes that are within + // a single operation, or are close together with an origin that + // allows merging (starting with "+") into a single event. + function addChangeToHistory(doc, change, selAfter, opId) { + var hist = doc.history; + hist.undone.length = 0; + var time = +new Date, cur; + var last; + + if ((hist.lastOp == opId || + hist.lastOrigin == change.origin && change.origin && + ((change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) || + change.origin.charAt(0) == "*")) && + (cur = lastChangeEvent(hist, hist.lastOp == opId))) { + // Merge this change into the last event + last = lst(cur.changes); + if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { + // Optimized case for simple insertion -- don't want to add + // new changesets for every character typed + last.to = changeEnd(change); + } else { + // Add new sub-event + cur.changes.push(historyChangeFromChange(doc, change)); + } + } else { + // Can not be merged, start a new event. + var before = lst(hist.done); + if (!before || !before.ranges) + { pushSelectionToHistory(doc.sel, hist.done); } + cur = {changes: [historyChangeFromChange(doc, change)], + generation: hist.generation}; + hist.done.push(cur); + while (hist.done.length > hist.undoDepth) { + hist.done.shift(); + if (!hist.done[0].ranges) { hist.done.shift(); } + } + } + hist.done.push(selAfter); + hist.generation = ++hist.maxGeneration; + hist.lastModTime = hist.lastSelTime = time; + hist.lastOp = hist.lastSelOp = opId; + hist.lastOrigin = hist.lastSelOrigin = change.origin; + + if (!last) { signal(doc, "historyAdded"); } + } + + function selectionEventCanBeMerged(doc, origin, prev, sel) { + var ch = origin.charAt(0); + return ch == "*" || + ch == "+" && + prev.ranges.length == sel.ranges.length && + prev.somethingSelected() == sel.somethingSelected() && + new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500) + } + + // Called whenever the selection changes, sets the new selection as + // the pending selection in the history, and pushes the old pending + // selection into the 'done' array when it was significantly + // different (in number of selected ranges, emptiness, or time). + function addSelectionToHistory(doc, sel, opId, options) { + var hist = doc.history, origin = options && options.origin; + + // A new event is started when the previous origin does not match + // the current, or the origins don't allow matching. Origins + // starting with * are always merged, those starting with + are + // merged when similar and close together in time. + if (opId == hist.lastSelOp || + (origin && hist.lastSelOrigin == origin && + (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || + selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) + { hist.done[hist.done.length - 1] = sel; } + else + { pushSelectionToHistory(sel, hist.done); } + + hist.lastSelTime = +new Date; + hist.lastSelOrigin = origin; + hist.lastSelOp = opId; + if (options && options.clearRedo !== false) + { clearSelectionEvents(hist.undone); } + } + + function pushSelectionToHistory(sel, dest) { + var top = lst(dest); + if (!(top && top.ranges && top.equals(sel))) + { dest.push(sel); } + } + + // Used to store marked span information in the history. + function attachLocalSpans(doc, change, from, to) { + var existing = change["spans_" + doc.id], n = 0; + doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) { + if (line.markedSpans) + { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; } + ++n; + }); + } + + // When un/re-doing restores text containing marked spans, those + // that have been explicitly cleared should not be restored. + function removeClearedSpans(spans) { + if (!spans) { return null } + var out; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } } + else if (out) { out.push(spans[i]); } + } + return !out ? spans : out.length ? out : null + } + + // Retrieve and filter the old marked spans stored in a change event. + function getOldSpans(doc, change) { + var found = change["spans_" + doc.id]; + if (!found) { return null } + var nw = []; + for (var i = 0; i < change.text.length; ++i) + { nw.push(removeClearedSpans(found[i])); } + return nw + } + + // Used for un/re-doing changes from the history. Combines the + // result of computing the existing spans with the set of spans that + // existed in the history (so that deleting around a span and then + // undoing brings back the span). + function mergeOldSpans(doc, change) { + var old = getOldSpans(doc, change); + var stretched = stretchSpansOverChange(doc, change); + if (!old) { return stretched } + if (!stretched) { return old } + + for (var i = 0; i < old.length; ++i) { + var oldCur = old[i], stretchCur = stretched[i]; + if (oldCur && stretchCur) { + spans: for (var j = 0; j < stretchCur.length; ++j) { + var span = stretchCur[j]; + for (var k = 0; k < oldCur.length; ++k) + { if (oldCur[k].marker == span.marker) { continue spans } } + oldCur.push(span); + } + } else if (stretchCur) { + old[i] = stretchCur; + } + } + return old + } + + // Used both to provide a JSON-safe object in .getHistory, and, when + // detaching a document, to split the history in two + function copyHistoryArray(events, newGroup, instantiateSel) { + var copy = []; + for (var i = 0; i < events.length; ++i) { + var event = events[i]; + if (event.ranges) { + copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); + continue + } + var changes = event.changes, newChanges = []; + copy.push({changes: newChanges}); + for (var j = 0; j < changes.length; ++j) { + var change = changes[j], m = (void 0); + newChanges.push({from: change.from, to: change.to, text: change.text}); + if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\d+)$/)) { + if (indexOf(newGroup, Number(m[1])) > -1) { + lst(newChanges)[prop] = change[prop]; + delete change[prop]; + } + } } } + } + } + return copy + } + + // The 'scroll' parameter given to many of these indicated whether + // the new cursor position should be scrolled into view after + // modifying the selection. + + // If shift is held or the extend flag is set, extends a range to + // include a given position (and optionally a second position). + // Otherwise, simply returns the range between the given positions. + // Used for cursor motion and such. + function extendRange(range, head, other, extend) { + if (extend) { + var anchor = range.anchor; + if (other) { + var posBefore = cmp(head, anchor) < 0; + if (posBefore != (cmp(other, anchor) < 0)) { + anchor = head; + head = other; + } else if (posBefore != (cmp(head, other) < 0)) { + head = other; + } + } + return new Range(anchor, head) + } else { + return new Range(other || head, head) + } + } + + // Extend the primary selection range, discard the rest. + function extendSelection(doc, head, other, options, extend) { + if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); } + setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options); + } + + // Extend all selections (pos is an array of selections with length + // equal the number of selections) + function extendSelections(doc, heads, options) { + var out = []; + var extend = doc.cm && (doc.cm.display.shift || doc.extend); + for (var i = 0; i < doc.sel.ranges.length; i++) + { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); } + var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex); + setSelection(doc, newSel, options); + } + + // Updates a single range in the selection. + function replaceOneSelection(doc, i, range, options) { + var ranges = doc.sel.ranges.slice(0); + ranges[i] = range; + setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options); + } + + // Reset the selection to a single range. + function setSimpleSelection(doc, anchor, head, options) { + setSelection(doc, simpleSelection(anchor, head), options); + } + + // Give beforeSelectionChange handlers a change to influence a + // selection update. + function filterSelectionChange(doc, sel, options) { + var obj = { + ranges: sel.ranges, + update: function(ranges) { + this.ranges = []; + for (var i = 0; i < ranges.length; i++) + { this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), + clipPos(doc, ranges[i].head)); } + }, + origin: options && options.origin + }; + signal(doc, "beforeSelectionChange", doc, obj); + if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj); } + if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) } + else { return sel } + } + + function setSelectionReplaceHistory(doc, sel, options) { + var done = doc.history.done, last = lst(done); + if (last && last.ranges) { + done[done.length - 1] = sel; + setSelectionNoUndo(doc, sel, options); + } else { + setSelection(doc, sel, options); + } + } + + // Set a new selection. + function setSelection(doc, sel, options) { + setSelectionNoUndo(doc, sel, options); + addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); + } + + function setSelectionNoUndo(doc, sel, options) { + if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) + { sel = filterSelectionChange(doc, sel, options); } + + var bias = options && options.bias || + (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); + setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); + + if (!(options && options.scroll === false) && doc.cm && doc.cm.getOption("readOnly") != "nocursor") + { ensureCursorVisible(doc.cm); } + } + + function setSelectionInner(doc, sel) { + if (sel.equals(doc.sel)) { return } + + doc.sel = sel; + + if (doc.cm) { + doc.cm.curOp.updateInput = 1; + doc.cm.curOp.selectionChanged = true; + signalCursorActivity(doc.cm); + } + signalLater(doc, "cursorActivity", doc); + } + + // Verify that the selection does not partially select any atomic + // marked ranges. + function reCheckSelection(doc) { + setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false)); + } + + // Return a selection that does not partially select any atomic + // ranges. + function skipAtomicInSelection(doc, sel, bias, mayClear) { + var out; + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i]; + var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i]; + var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear); + var newHead = range.head == range.anchor ? newAnchor : skipAtomic(doc, range.head, old && old.head, bias, mayClear); + if (out || newAnchor != range.anchor || newHead != range.head) { + if (!out) { out = sel.ranges.slice(0, i); } + out[i] = new Range(newAnchor, newHead); + } + } + return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel + } + + function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { + var line = getLine(doc, pos.line); + if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { + var sp = line.markedSpans[i], m = sp.marker; + + // Determine if we should prevent the cursor being placed to the left/right of an atomic marker + // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it + // is with selectLeft/Right + var preventCursorLeft = ("selectLeft" in m) ? !m.selectLeft : m.inclusiveLeft; + var preventCursorRight = ("selectRight" in m) ? !m.selectRight : m.inclusiveRight; + + if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && + (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) { + if (mayClear) { + signal(m, "beforeCursorEnter"); + if (m.explicitlyCleared) { + if (!line.markedSpans) { break } + else {--i; continue} + } + } + if (!m.atomic) { continue } + + if (oldPos) { + var near = m.find(dir < 0 ? 1 : -1), diff = (void 0); + if (dir < 0 ? preventCursorRight : preventCursorLeft) + { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); } + if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) + { return skipAtomicInner(doc, near, pos, dir, mayClear) } + } + + var far = m.find(dir < 0 ? -1 : 1); + if (dir < 0 ? preventCursorLeft : preventCursorRight) + { far = movePos(doc, far, dir, far.line == pos.line ? line : null); } + return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null + } + } } + return pos + } + + // Ensure a given position is not inside an atomic range. + function skipAtomic(doc, pos, oldPos, bias, mayClear) { + var dir = bias || 1; + var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || + (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) || + skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || + (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true)); + if (!found) { + doc.cantEdit = true; + return Pos(doc.first, 0) + } + return found + } + + function movePos(doc, pos, dir, line) { + if (dir < 0 && pos.ch == 0) { + if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) } + else { return null } + } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) { + if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) } + else { return null } + } else { + return new Pos(pos.line, pos.ch + dir) + } + } + + function selectAll(cm) { + cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll); + } + + // UPDATING + + // Allow "beforeChange" event handlers to influence a change + function filterChange(doc, change, update) { + var obj = { + canceled: false, + from: change.from, + to: change.to, + text: change.text, + origin: change.origin, + cancel: function () { return obj.canceled = true; } + }; + if (update) { obj.update = function (from, to, text, origin) { + if (from) { obj.from = clipPos(doc, from); } + if (to) { obj.to = clipPos(doc, to); } + if (text) { obj.text = text; } + if (origin !== undefined) { obj.origin = origin; } + }; } + signal(doc, "beforeChange", doc, obj); + if (doc.cm) { signal(doc.cm, "beforeChange", doc.cm, obj); } + + if (obj.canceled) { + if (doc.cm) { doc.cm.curOp.updateInput = 2; } + return null + } + return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin} + } + + // Apply a change to a document, and add it to the document's + // history, and propagating it to all linked documents. + function makeChange(doc, change, ignoreReadOnly) { + if (doc.cm) { + if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) } + if (doc.cm.state.suppressEdits) { return } + } + + if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { + change = filterChange(doc, change, true); + if (!change) { return } + } + + // Possibly split or suppress the update based on the presence + // of read-only spans in its range. + var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); + if (split) { + for (var i = split.length - 1; i >= 0; --i) + { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text, origin: change.origin}); } + } else { + makeChangeInner(doc, change); + } + } + + function makeChangeInner(doc, change) { + if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { return } + var selAfter = computeSelAfterChange(doc, change); + addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); + + makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); + var rebased = []; + + linkedDocs(doc, function (doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); + }); + } + + // Revert a change stored in a document's history. + function makeChangeFromHistory(doc, type, allowSelectionOnly) { + var suppress = doc.cm && doc.cm.state.suppressEdits; + if (suppress && !allowSelectionOnly) { return } + + var hist = doc.history, event, selAfter = doc.sel; + var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; + + // Verify that there is a useable event (so that ctrl-z won't + // needlessly clear selection events) + var i = 0; + for (; i < source.length; i++) { + event = source[i]; + if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) + { break } + } + if (i == source.length) { return } + hist.lastOrigin = hist.lastSelOrigin = null; + + for (;;) { + event = source.pop(); + if (event.ranges) { + pushSelectionToHistory(event, dest); + if (allowSelectionOnly && !event.equals(doc.sel)) { + setSelection(doc, event, {clearRedo: false}); + return + } + selAfter = event; + } else if (suppress) { + source.push(event); + return + } else { break } + } + + // Build up a reverse change object to add to the opposite history + // stack (redo when undoing, and vice versa). + var antiChanges = []; + pushSelectionToHistory(selAfter, dest); + dest.push({changes: antiChanges, generation: hist.generation}); + hist.generation = event.generation || ++hist.maxGeneration; + + var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); + + var loop = function ( i ) { + var change = event.changes[i]; + change.origin = type; + if (filter && !filterChange(doc, change, false)) { + source.length = 0; + return {} + } + + antiChanges.push(historyChangeFromChange(doc, change)); + + var after = i ? computeSelAfterChange(doc, change) : lst(source); + makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); + if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); } + var rebased = []; + + // Propagate to the linked documents + linkedDocs(doc, function (doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); + }); + }; + + for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) { + var returned = loop( i$1 ); + + if ( returned ) return returned.v; + } + } + + // Sub-views need their line numbers shifted when text is added + // above or below them in the parent document. + function shiftDoc(doc, distance) { + if (distance == 0) { return } + doc.first += distance; + doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range( + Pos(range.anchor.line + distance, range.anchor.ch), + Pos(range.head.line + distance, range.head.ch) + ); }), doc.sel.primIndex); + if (doc.cm) { + regChange(doc.cm, doc.first, doc.first - distance, distance); + for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) + { regLineChange(doc.cm, l, "gutter"); } + } + } + + // More lower-level change function, handling only a single document + // (not linked ones). + function makeChangeSingleDoc(doc, change, selAfter, spans) { + if (doc.cm && !doc.cm.curOp) + { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) } + + if (change.to.line < doc.first) { + shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); + return + } + if (change.from.line > doc.lastLine()) { return } + + // Clip the change to the size of this doc + if (change.from.line < doc.first) { + var shift = change.text.length - 1 - (doc.first - change.from.line); + shiftDoc(doc, shift); + change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), + text: [lst(change.text)], origin: change.origin}; + } + var last = doc.lastLine(); + if (change.to.line > last) { + change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), + text: [change.text[0]], origin: change.origin}; + } + + change.removed = getBetween(doc, change.from, change.to); + + if (!selAfter) { selAfter = computeSelAfterChange(doc, change); } + if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); } + else { updateDoc(doc, change, spans); } + setSelectionNoUndo(doc, selAfter, sel_dontScroll); + + if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0))) + { doc.cantEdit = false; } + } + + // Handle the interaction of a change to a document with the editor + // that this document is part of. + function makeChangeSingleDocInEditor(cm, change, spans) { + var doc = cm.doc, display = cm.display, from = change.from, to = change.to; + + var recomputeMaxLength = false, checkWidthStart = from.line; + if (!cm.options.lineWrapping) { + checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); + doc.iter(checkWidthStart, to.line + 1, function (line) { + if (line == display.maxLine) { + recomputeMaxLength = true; + return true + } + }); + } + + if (doc.sel.contains(change.from, change.to) > -1) + { signalCursorActivity(cm); } + + updateDoc(doc, change, spans, estimateHeight(cm)); + + if (!cm.options.lineWrapping) { + doc.iter(checkWidthStart, from.line + change.text.length, function (line) { + var len = lineLength(line); + if (len > display.maxLineLength) { + display.maxLine = line; + display.maxLineLength = len; + display.maxLineChanged = true; + recomputeMaxLength = false; + } + }); + if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; } + } + + retreatFrontier(doc, from.line); + startWorker(cm, 400); + + var lendiff = change.text.length - (to.line - from.line) - 1; + // Remember that these lines changed, for updating the display + if (change.full) + { regChange(cm); } + else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) + { regLineChange(cm, from.line, "text"); } + else + { regChange(cm, from.line, to.line + 1, lendiff); } + + var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); + if (changeHandler || changesHandler) { + var obj = { + from: from, to: to, + text: change.text, + removed: change.removed, + origin: change.origin + }; + if (changeHandler) { signalLater(cm, "change", cm, obj); } + if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); } + } + cm.display.selForContextMenu = null; + } + + function replaceRange(doc, code, from, to, origin) { + var assign; + + if (!to) { to = from; } + if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); } + if (typeof code == "string") { code = doc.splitLines(code); } + makeChange(doc, {from: from, to: to, text: code, origin: origin}); + } + + // Rebasing/resetting history to deal with externally-sourced changes + + function rebaseHistSelSingle(pos, from, to, diff) { + if (to < pos.line) { + pos.line += diff; + } else if (from < pos.line) { + pos.line = from; + pos.ch = 0; + } + } + + // Tries to rebase an array of history events given a change in the + // document. If the change touches the same lines as the event, the + // event, and everything 'behind' it, is discarded. If the change is + // before the event, the event's positions are updated. Uses a + // copy-on-write scheme for the positions, to avoid having to + // reallocate them all on every rebase, but also avoid problems with + // shared position objects being unsafely updated. + function rebaseHistArray(array, from, to, diff) { + for (var i = 0; i < array.length; ++i) { + var sub = array[i], ok = true; + if (sub.ranges) { + if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; } + for (var j = 0; j < sub.ranges.length; j++) { + rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); + rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); + } + continue + } + for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) { + var cur = sub.changes[j$1]; + if (to < cur.from.line) { + cur.from = Pos(cur.from.line + diff, cur.from.ch); + cur.to = Pos(cur.to.line + diff, cur.to.ch); + } else if (from <= cur.to.line) { + ok = false; + break + } + } + if (!ok) { + array.splice(0, i + 1); + i = 0; + } + } + } + + function rebaseHist(hist, change) { + var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; + rebaseHistArray(hist.done, from, to, diff); + rebaseHistArray(hist.undone, from, to, diff); + } + + // Utility for applying a change to a line by handle or number, + // returning the number and optionally registering the line as + // changed. + function changeLine(doc, handle, changeType, op) { + var no = handle, line = handle; + if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)); } + else { no = lineNo(handle); } + if (no == null) { return null } + if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); } + return line + } + + // The document is represented as a BTree consisting of leaves, with + // chunk of lines in them, and branches, with up to ten leaves or + // other branch nodes below them. The top node is always a branch + // node, and is the document object itself (meaning it has + // additional methods and properties). + // + // All nodes have parent links. The tree is used both to go from + // line numbers to line objects, and to go from objects to numbers. + // It also indexes by height, and is used to convert between height + // and line object, and to find the total height of the document. + // + // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html + + function LeafChunk(lines) { + this.lines = lines; + this.parent = null; + var height = 0; + for (var i = 0; i < lines.length; ++i) { + lines[i].parent = this; + height += lines[i].height; + } + this.height = height; + } + + LeafChunk.prototype = { + chunkSize: function() { return this.lines.length }, + + // Remove the n lines at offset 'at'. + removeInner: function(at, n) { + for (var i = at, e = at + n; i < e; ++i) { + var line = this.lines[i]; + this.height -= line.height; + cleanUpLine(line); + signalLater(line, "delete"); + } + this.lines.splice(at, n); + }, + + // Helper used to collapse a small branch into a single leaf. + collapse: function(lines) { + lines.push.apply(lines, this.lines); + }, + + // Insert the given array of lines at offset 'at', count them as + // having the given height. + insertInner: function(at, lines, height) { + this.height += height; + this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); + for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; } + }, + + // Used to iterate over a part of the tree. + iterN: function(at, n, op) { + for (var e = at + n; at < e; ++at) + { if (op(this.lines[at])) { return true } } + } + }; + + function BranchChunk(children) { + this.children = children; + var size = 0, height = 0; + for (var i = 0; i < children.length; ++i) { + var ch = children[i]; + size += ch.chunkSize(); height += ch.height; + ch.parent = this; + } + this.size = size; + this.height = height; + this.parent = null; + } + + BranchChunk.prototype = { + chunkSize: function() { return this.size }, + + removeInner: function(at, n) { + this.size -= n; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var rm = Math.min(n, sz - at), oldHeight = child.height; + child.removeInner(at, rm); + this.height -= oldHeight - child.height; + if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } + if ((n -= rm) == 0) { break } + at = 0; + } else { at -= sz; } + } + // If the result is smaller than 25 lines, ensure that it is a + // single leaf node. + if (this.size - n < 25 && + (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { + var lines = []; + this.collapse(lines); + this.children = [new LeafChunk(lines)]; + this.children[0].parent = this; + } + }, + + collapse: function(lines) { + for (var i = 0; i < this.children.length; ++i) { this.children[i].collapse(lines); } + }, + + insertInner: function(at, lines, height) { + this.size += lines.length; + this.height += height; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at <= sz) { + child.insertInner(at, lines, height); + if (child.lines && child.lines.length > 50) { + // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced. + // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest. + var remaining = child.lines.length % 25 + 25; + for (var pos = remaining; pos < child.lines.length;) { + var leaf = new LeafChunk(child.lines.slice(pos, pos += 25)); + child.height -= leaf.height; + this.children.splice(++i, 0, leaf); + leaf.parent = this; + } + child.lines = child.lines.slice(0, remaining); + this.maybeSpill(); + } + break + } + at -= sz; + } + }, + + // When a node has grown, check whether it should be split. + maybeSpill: function() { + if (this.children.length <= 10) { return } + var me = this; + do { + var spilled = me.children.splice(me.children.length - 5, 5); + var sibling = new BranchChunk(spilled); + if (!me.parent) { // Become the parent node + var copy = new BranchChunk(me.children); + copy.parent = me; + me.children = [copy, sibling]; + me = copy; + } else { + me.size -= sibling.size; + me.height -= sibling.height; + var myIndex = indexOf(me.parent.children, me); + me.parent.children.splice(myIndex + 1, 0, sibling); + } + sibling.parent = me.parent; + } while (me.children.length > 10) + me.parent.maybeSpill(); + }, + + iterN: function(at, n, op) { + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var used = Math.min(n, sz - at); + if (child.iterN(at, used, op)) { return true } + if ((n -= used) == 0) { break } + at = 0; + } else { at -= sz; } + } + } + }; + + // Line widgets are block elements displayed above or below a line. + + var LineWidget = function(doc, node, options) { + if (options) { for (var opt in options) { if (options.hasOwnProperty(opt)) + { this[opt] = options[opt]; } } } + this.doc = doc; + this.node = node; + }; + + LineWidget.prototype.clear = function () { + var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); + if (no == null || !ws) { return } + for (var i = 0; i < ws.length; ++i) { if (ws[i] == this) { ws.splice(i--, 1); } } + if (!ws.length) { line.widgets = null; } + var height = widgetHeight(this); + updateLineHeight(line, Math.max(0, line.height - height)); + if (cm) { + runInOp(cm, function () { + adjustScrollWhenAboveVisible(cm, line, -height); + regLineChange(cm, no, "widget"); + }); + signalLater(cm, "lineWidgetCleared", cm, this, no); + } + }; + + LineWidget.prototype.changed = function () { + var this$1 = this; + + var oldH = this.height, cm = this.doc.cm, line = this.line; + this.height = null; + var diff = widgetHeight(this) - oldH; + if (!diff) { return } + if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); } + if (cm) { + runInOp(cm, function () { + cm.curOp.forceUpdate = true; + adjustScrollWhenAboveVisible(cm, line, diff); + signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line)); + }); + } + }; + eventMixin(LineWidget); + + function adjustScrollWhenAboveVisible(cm, line, diff) { + if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) + { addToScrollTop(cm, diff); } + } + + function addLineWidget(doc, handle, node, options) { + var widget = new LineWidget(doc, node, options); + var cm = doc.cm; + if (cm && widget.noHScroll) { cm.display.alignWidgets = true; } + changeLine(doc, handle, "widget", function (line) { + var widgets = line.widgets || (line.widgets = []); + if (widget.insertAt == null) { widgets.push(widget); } + else { widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); } + widget.line = line; + if (cm && !lineIsHidden(doc, line)) { + var aboveVisible = heightAtLine(line) < doc.scrollTop; + updateLineHeight(line, line.height + widgetHeight(widget)); + if (aboveVisible) { addToScrollTop(cm, widget.height); } + cm.curOp.forceUpdate = true; + } + return true + }); + if (cm) { signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)); } + return widget + } + + // TEXTMARKERS + + // Created with markText and setBookmark methods. A TextMarker is a + // handle that can be used to clear or find a marked position in the + // document. Line objects hold arrays (markedSpans) containing + // {from, to, marker} object pointing to such marker objects, and + // indicating that such a marker is present on that line. Multiple + // lines may point to the same marker when it spans across lines. + // The spans will have null for their from/to properties when the + // marker continues beyond the start/end of the line. Markers have + // links back to the lines they currently touch. + + // Collapsed markers have unique ids, in order to be able to order + // them, which is needed for uniquely determining an outer marker + // when they overlap (they may nest, but not partially overlap). + var nextMarkerId = 0; + + var TextMarker = function(doc, type) { + this.lines = []; + this.type = type; + this.doc = doc; + this.id = ++nextMarkerId; + }; + + // Clear the marker. + TextMarker.prototype.clear = function () { + if (this.explicitlyCleared) { return } + var cm = this.doc.cm, withOp = cm && !cm.curOp; + if (withOp) { startOperation(cm); } + if (hasHandler(this, "clear")) { + var found = this.find(); + if (found) { signalLater(this, "clear", found.from, found.to); } + } + var min = null, max = null; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (cm && !this.collapsed) { regLineChange(cm, lineNo(line), "text"); } + else if (cm) { + if (span.to != null) { max = lineNo(line); } + if (span.from != null) { min = lineNo(line); } + } + line.markedSpans = removeMarkedSpan(line.markedSpans, span); + if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) + { updateLineHeight(line, textHeight(cm.display)); } + } + if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) { + var visual = visualLine(this.lines[i$1]), len = lineLength(visual); + if (len > cm.display.maxLineLength) { + cm.display.maxLine = visual; + cm.display.maxLineLength = len; + cm.display.maxLineChanged = true; + } + } } + + if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); } + this.lines.length = 0; + this.explicitlyCleared = true; + if (this.atomic && this.doc.cantEdit) { + this.doc.cantEdit = false; + if (cm) { reCheckSelection(cm.doc); } + } + if (cm) { signalLater(cm, "markerCleared", cm, this, min, max); } + if (withOp) { endOperation(cm); } + if (this.parent) { this.parent.clear(); } + }; + + // Find the position of the marker in the document. Returns a {from, + // to} object by default. Side can be passed to get a specific side + // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the + // Pos objects returned contain a line object, rather than a line + // number (used to prevent looking up the same line twice). + TextMarker.prototype.find = function (side, lineObj) { + if (side == null && this.type == "bookmark") { side = 1; } + var from, to; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (span.from != null) { + from = Pos(lineObj ? line : lineNo(line), span.from); + if (side == -1) { return from } + } + if (span.to != null) { + to = Pos(lineObj ? line : lineNo(line), span.to); + if (side == 1) { return to } + } + } + return from && {from: from, to: to} + }; + + // Signals that the marker's widget changed, and surrounding layout + // should be recomputed. + TextMarker.prototype.changed = function () { + var this$1 = this; + + var pos = this.find(-1, true), widget = this, cm = this.doc.cm; + if (!pos || !cm) { return } + runInOp(cm, function () { + var line = pos.line, lineN = lineNo(pos.line); + var view = findViewForLine(cm, lineN); + if (view) { + clearLineMeasurementCacheFor(view); + cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; + } + cm.curOp.updateMaxLine = true; + if (!lineIsHidden(widget.doc, line) && widget.height != null) { + var oldHeight = widget.height; + widget.height = null; + var dHeight = widgetHeight(widget) - oldHeight; + if (dHeight) + { updateLineHeight(line, line.height + dHeight); } + } + signalLater(cm, "markerChanged", cm, this$1); + }); + }; + + TextMarker.prototype.attachLine = function (line) { + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) + { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); } + } + this.lines.push(line); + }; + + TextMarker.prototype.detachLine = function (line) { + this.lines.splice(indexOf(this.lines, line), 1); + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp + ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); + } + }; + eventMixin(TextMarker); + + // Create a marker, wire it up to the right lines, and + function markText(doc, from, to, options, type) { + // Shared markers (across linked documents) are handled separately + // (markTextShared will call out to this again, once per + // document). + if (options && options.shared) { return markTextShared(doc, from, to, options, type) } + // Ensure we are in an operation. + if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) } + + var marker = new TextMarker(doc, type), diff = cmp(from, to); + if (options) { copyObj(options, marker, false); } + // Don't connect empty markers unless clearWhenEmpty is false + if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) + { return marker } + if (marker.replacedWith) { + // Showing up as a widget implies collapsed (widget replaces text) + marker.collapsed = true; + marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget"); + if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true"); } + if (options.insertLeft) { marker.widgetNode.insertLeft = true; } + } + if (marker.collapsed) { + if (conflictingCollapsedRange(doc, from.line, from, to, marker) || + from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) + { throw new Error("Inserting collapsed marker partially overlapping an existing one") } + seeCollapsedSpans(); + } + + if (marker.addToHistory) + { addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); } + + var curLine = from.line, cm = doc.cm, updateMaxLine; + doc.iter(curLine, to.line + 1, function (line) { + if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) + { updateMaxLine = true; } + if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); } + addMarkedSpan(line, new MarkedSpan(marker, + curLine == from.line ? from.ch : null, + curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp); + ++curLine; + }); + // lineIsHidden depends on the presence of the spans, so needs a second pass + if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) { + if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); } + }); } + + if (marker.clearOnEnter) { on(marker, "beforeCursorEnter", function () { return marker.clear(); }); } + + if (marker.readOnly) { + seeReadOnlySpans(); + if (doc.history.done.length || doc.history.undone.length) + { doc.clearHistory(); } + } + if (marker.collapsed) { + marker.id = ++nextMarkerId; + marker.atomic = true; + } + if (cm) { + // Sync editor state + if (updateMaxLine) { cm.curOp.updateMaxLine = true; } + if (marker.collapsed) + { regChange(cm, from.line, to.line + 1); } + else if (marker.className || marker.startStyle || marker.endStyle || marker.css || + marker.attributes || marker.title) + { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text"); } } + if (marker.atomic) { reCheckSelection(cm.doc); } + signalLater(cm, "markerAdded", cm, marker); + } + return marker + } + + // SHARED TEXTMARKERS + + // A shared marker spans multiple linked documents. It is + // implemented as a meta-marker-object controlling multiple normal + // markers. + var SharedTextMarker = function(markers, primary) { + this.markers = markers; + this.primary = primary; + for (var i = 0; i < markers.length; ++i) + { markers[i].parent = this; } + }; + + SharedTextMarker.prototype.clear = function () { + if (this.explicitlyCleared) { return } + this.explicitlyCleared = true; + for (var i = 0; i < this.markers.length; ++i) + { this.markers[i].clear(); } + signalLater(this, "clear"); + }; + + SharedTextMarker.prototype.find = function (side, lineObj) { + return this.primary.find(side, lineObj) + }; + eventMixin(SharedTextMarker); + + function markTextShared(doc, from, to, options, type) { + options = copyObj(options); + options.shared = false; + var markers = [markText(doc, from, to, options, type)], primary = markers[0]; + var widget = options.widgetNode; + linkedDocs(doc, function (doc) { + if (widget) { options.widgetNode = widget.cloneNode(true); } + markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); + for (var i = 0; i < doc.linked.length; ++i) + { if (doc.linked[i].isParent) { return } } + primary = lst(markers); + }); + return new SharedTextMarker(markers, primary) + } + + function findSharedMarkers(doc) { + return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; }) + } + + function copySharedMarkers(doc, markers) { + for (var i = 0; i < markers.length; i++) { + var marker = markers[i], pos = marker.find(); + var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to); + if (cmp(mFrom, mTo)) { + var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); + marker.markers.push(subMark); + subMark.parent = marker; + } + } + } + + function detachSharedMarkers(markers) { + var loop = function ( i ) { + var marker = markers[i], linked = [marker.primary.doc]; + linkedDocs(marker.primary.doc, function (d) { return linked.push(d); }); + for (var j = 0; j < marker.markers.length; j++) { + var subMarker = marker.markers[j]; + if (indexOf(linked, subMarker.doc) == -1) { + subMarker.parent = null; + marker.markers.splice(j--, 1); + } + } + }; + + for (var i = 0; i < markers.length; i++) loop( i ); + } + + var nextDocId = 0; + var Doc = function(text, mode, firstLine, lineSep, direction) { + if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) } + if (firstLine == null) { firstLine = 0; } + + BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); + this.first = firstLine; + this.scrollTop = this.scrollLeft = 0; + this.cantEdit = false; + this.cleanGeneration = 1; + this.modeFrontier = this.highlightFrontier = firstLine; + var start = Pos(firstLine, 0); + this.sel = simpleSelection(start); + this.history = new History(null); + this.id = ++nextDocId; + this.modeOption = mode; + this.lineSep = lineSep; + this.direction = (direction == "rtl") ? "rtl" : "ltr"; + this.extend = false; + + if (typeof text == "string") { text = this.splitLines(text); } + updateDoc(this, {from: start, to: start, text: text}); + setSelection(this, simpleSelection(start), sel_dontScroll); + }; + + Doc.prototype = createObj(BranchChunk.prototype, { + constructor: Doc, + // Iterate over the document. Supports two forms -- with only one + // argument, it calls that for each line in the document. With + // three, it iterates over the range given by the first two (with + // the second being non-inclusive). + iter: function(from, to, op) { + if (op) { this.iterN(from - this.first, to - from, op); } + else { this.iterN(this.first, this.first + this.size, from); } + }, + + // Non-public interface for adding and removing lines. + insert: function(at, lines) { + var height = 0; + for (var i = 0; i < lines.length; ++i) { height += lines[i].height; } + this.insertInner(at - this.first, lines, height); + }, + remove: function(at, n) { this.removeInner(at - this.first, n); }, + + // From here, the methods are part of the public interface. Most + // are also available from CodeMirror (editor) instances. + + getValue: function(lineSep) { + var lines = getLines(this, this.first, this.first + this.size); + if (lineSep === false) { return lines } + return lines.join(lineSep || this.lineSeparator()) + }, + setValue: docMethodOp(function(code) { + var top = Pos(this.first, 0), last = this.first + this.size - 1; + makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), + text: this.splitLines(code), origin: "setValue", full: true}, true); + if (this.cm) { scrollToCoords(this.cm, 0, 0); } + setSelection(this, simpleSelection(top), sel_dontScroll); + }), + replaceRange: function(code, from, to, origin) { + from = clipPos(this, from); + to = to ? clipPos(this, to) : from; + replaceRange(this, code, from, to, origin); + }, + getRange: function(from, to, lineSep) { + var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); + if (lineSep === false) { return lines } + if (lineSep === '') { return lines.join('') } + return lines.join(lineSep || this.lineSeparator()) + }, + + getLine: function(line) {var l = this.getLineHandle(line); return l && l.text}, + + getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }}, + getLineNumber: function(line) {return lineNo(line)}, + + getLineHandleVisualStart: function(line) { + if (typeof line == "number") { line = getLine(this, line); } + return visualLine(line) + }, + + lineCount: function() {return this.size}, + firstLine: function() {return this.first}, + lastLine: function() {return this.first + this.size - 1}, + + clipPos: function(pos) {return clipPos(this, pos)}, + + getCursor: function(start) { + var range = this.sel.primary(), pos; + if (start == null || start == "head") { pos = range.head; } + else if (start == "anchor") { pos = range.anchor; } + else if (start == "end" || start == "to" || start === false) { pos = range.to(); } + else { pos = range.from(); } + return pos + }, + listSelections: function() { return this.sel.ranges }, + somethingSelected: function() {return this.sel.somethingSelected()}, + + setCursor: docMethodOp(function(line, ch, options) { + setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); + }), + setSelection: docMethodOp(function(anchor, head, options) { + setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); + }), + extendSelection: docMethodOp(function(head, other, options) { + extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); + }), + extendSelections: docMethodOp(function(heads, options) { + extendSelections(this, clipPosArray(this, heads), options); + }), + extendSelectionsBy: docMethodOp(function(f, options) { + var heads = map(this.sel.ranges, f); + extendSelections(this, clipPosArray(this, heads), options); + }), + setSelections: docMethodOp(function(ranges, primary, options) { + if (!ranges.length) { return } + var out = []; + for (var i = 0; i < ranges.length; i++) + { out[i] = new Range(clipPos(this, ranges[i].anchor), + clipPos(this, ranges[i].head || ranges[i].anchor)); } + if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); } + setSelection(this, normalizeSelection(this.cm, out, primary), options); + }), + addSelection: docMethodOp(function(anchor, head, options) { + var ranges = this.sel.ranges.slice(0); + ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); + setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options); + }), + + getSelection: function(lineSep) { + var ranges = this.sel.ranges, lines; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this, ranges[i].from(), ranges[i].to()); + lines = lines ? lines.concat(sel) : sel; + } + if (lineSep === false) { return lines } + else { return lines.join(lineSep || this.lineSeparator()) } + }, + getSelections: function(lineSep) { + var parts = [], ranges = this.sel.ranges; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this, ranges[i].from(), ranges[i].to()); + if (lineSep !== false) { sel = sel.join(lineSep || this.lineSeparator()); } + parts[i] = sel; + } + return parts + }, + replaceSelection: function(code, collapse, origin) { + var dup = []; + for (var i = 0; i < this.sel.ranges.length; i++) + { dup[i] = code; } + this.replaceSelections(dup, collapse, origin || "+input"); + }, + replaceSelections: docMethodOp(function(code, collapse, origin) { + var changes = [], sel = this.sel; + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i]; + changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin}; + } + var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); + for (var i$1 = changes.length - 1; i$1 >= 0; i$1--) + { makeChange(this, changes[i$1]); } + if (newSel) { setSelectionReplaceHistory(this, newSel); } + else if (this.cm) { ensureCursorVisible(this.cm); } + }), + undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}), + redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}), + undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}), + redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}), + + setExtending: function(val) {this.extend = val;}, + getExtending: function() {return this.extend}, + + historySize: function() { + var hist = this.history, done = 0, undone = 0; + for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } } + for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } } + return {undo: done, redo: undone} + }, + clearHistory: function() { + var this$1 = this; + + this.history = new History(this.history); + linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true); + }, + + markClean: function() { + this.cleanGeneration = this.changeGeneration(true); + }, + changeGeneration: function(forceSplit) { + if (forceSplit) + { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; } + return this.history.generation + }, + isClean: function (gen) { + return this.history.generation == (gen || this.cleanGeneration) + }, + + getHistory: function() { + return {done: copyHistoryArray(this.history.done), + undone: copyHistoryArray(this.history.undone)} + }, + setHistory: function(histData) { + var hist = this.history = new History(this.history); + hist.done = copyHistoryArray(histData.done.slice(0), null, true); + hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); + }, + + setGutterMarker: docMethodOp(function(line, gutterID, value) { + return changeLine(this, line, "gutter", function (line) { + var markers = line.gutterMarkers || (line.gutterMarkers = {}); + markers[gutterID] = value; + if (!value && isEmpty(markers)) { line.gutterMarkers = null; } + return true + }) + }), + + clearGutter: docMethodOp(function(gutterID) { + var this$1 = this; + + this.iter(function (line) { + if (line.gutterMarkers && line.gutterMarkers[gutterID]) { + changeLine(this$1, line, "gutter", function () { + line.gutterMarkers[gutterID] = null; + if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; } + return true + }); + } + }); + }), + + lineInfo: function(line) { + var n; + if (typeof line == "number") { + if (!isLine(this, line)) { return null } + n = line; + line = getLine(this, line); + if (!line) { return null } + } else { + n = lineNo(line); + if (n == null) { return null } + } + return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, + textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, + widgets: line.widgets} + }, + + addLineClass: docMethodOp(function(handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { + var prop = where == "text" ? "textClass" + : where == "background" ? "bgClass" + : where == "gutter" ? "gutterClass" : "wrapClass"; + if (!line[prop]) { line[prop] = cls; } + else if (classTest(cls).test(line[prop])) { return false } + else { line[prop] += " " + cls; } + return true + }) + }), + removeLineClass: docMethodOp(function(handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { + var prop = where == "text" ? "textClass" + : where == "background" ? "bgClass" + : where == "gutter" ? "gutterClass" : "wrapClass"; + var cur = line[prop]; + if (!cur) { return false } + else if (cls == null) { line[prop] = null; } + else { + var found = cur.match(classTest(cls)); + if (!found) { return false } + var end = found.index + found[0].length; + line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; + } + return true + }) + }), + + addLineWidget: docMethodOp(function(handle, node, options) { + return addLineWidget(this, handle, node, options) + }), + removeLineWidget: function(widget) { widget.clear(); }, + + markText: function(from, to, options) { + return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range") + }, + setBookmark: function(pos, options) { + var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), + insertLeft: options && options.insertLeft, + clearWhenEmpty: false, shared: options && options.shared, + handleMouseEvents: options && options.handleMouseEvents}; + pos = clipPos(this, pos); + return markText(this, pos, pos, realOpts, "bookmark") + }, + findMarksAt: function(pos) { + pos = clipPos(this, pos); + var markers = [], spans = getLine(this, pos.line).markedSpans; + if (spans) { for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if ((span.from == null || span.from <= pos.ch) && + (span.to == null || span.to >= pos.ch)) + { markers.push(span.marker.parent || span.marker); } + } } + return markers + }, + findMarks: function(from, to, filter) { + from = clipPos(this, from); to = clipPos(this, to); + var found = [], lineNo = from.line; + this.iter(from.line, to.line + 1, function (line) { + var spans = line.markedSpans; + if (spans) { for (var i = 0; i < spans.length; i++) { + var span = spans[i]; + if (!(span.to != null && lineNo == from.line && from.ch >= span.to || + span.from == null && lineNo != from.line || + span.from != null && lineNo == to.line && span.from >= to.ch) && + (!filter || filter(span.marker))) + { found.push(span.marker.parent || span.marker); } + } } + ++lineNo; + }); + return found + }, + getAllMarks: function() { + var markers = []; + this.iter(function (line) { + var sps = line.markedSpans; + if (sps) { for (var i = 0; i < sps.length; ++i) + { if (sps[i].from != null) { markers.push(sps[i].marker); } } } + }); + return markers + }, + + posFromIndex: function(off) { + var ch, lineNo = this.first, sepSize = this.lineSeparator().length; + this.iter(function (line) { + var sz = line.text.length + sepSize; + if (sz > off) { ch = off; return true } + off -= sz; + ++lineNo; + }); + return clipPos(this, Pos(lineNo, ch)) + }, + indexFromPos: function (coords) { + coords = clipPos(this, coords); + var index = coords.ch; + if (coords.line < this.first || coords.ch < 0) { return 0 } + var sepSize = this.lineSeparator().length; + this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value + index += line.text.length + sepSize; + }); + return index + }, + + copy: function(copyHistory) { + var doc = new Doc(getLines(this, this.first, this.first + this.size), + this.modeOption, this.first, this.lineSep, this.direction); + doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; + doc.sel = this.sel; + doc.extend = false; + if (copyHistory) { + doc.history.undoDepth = this.history.undoDepth; + doc.setHistory(this.getHistory()); + } + return doc + }, + + linkedDoc: function(options) { + if (!options) { options = {}; } + var from = this.first, to = this.first + this.size; + if (options.from != null && options.from > from) { from = options.from; } + if (options.to != null && options.to < to) { to = options.to; } + var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction); + if (options.sharedHist) { copy.history = this.history + ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); + copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; + copySharedMarkers(copy, findSharedMarkers(this)); + return copy + }, + unlinkDoc: function(other) { + if (other instanceof CodeMirror) { other = other.doc; } + if (this.linked) { for (var i = 0; i < this.linked.length; ++i) { + var link = this.linked[i]; + if (link.doc != other) { continue } + this.linked.splice(i, 1); + other.unlinkDoc(this); + detachSharedMarkers(findSharedMarkers(this)); + break + } } + // If the histories were shared, split them again + if (other.history == this.history) { + var splitIds = [other.id]; + linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true); + other.history = new History(null); + other.history.done = copyHistoryArray(this.history.done, splitIds); + other.history.undone = copyHistoryArray(this.history.undone, splitIds); + } + }, + iterLinkedDocs: function(f) {linkedDocs(this, f);}, + + getMode: function() {return this.mode}, + getEditor: function() {return this.cm}, + + splitLines: function(str) { + if (this.lineSep) { return str.split(this.lineSep) } + return splitLinesAuto(str) + }, + lineSeparator: function() { return this.lineSep || "\n" }, + + setDirection: docMethodOp(function (dir) { + if (dir != "rtl") { dir = "ltr"; } + if (dir == this.direction) { return } + this.direction = dir; + this.iter(function (line) { return line.order = null; }); + if (this.cm) { directionChanged(this.cm); } + }) + }); + + // Public alias. + Doc.prototype.eachLine = Doc.prototype.iter; + + // Kludge to work around strange IE behavior where it'll sometimes + // re-fire a series of drag-related events right after the drop (#1551) + var lastDrop = 0; + + function onDrop(e) { + var cm = this; + clearDragCursor(cm); + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) + { return } + e_preventDefault(e); + if (ie) { lastDrop = +new Date; } + var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; + if (!pos || cm.isReadOnly()) { return } + // Might be a file drop, in which case we simply extract the text + // and insert it. + if (files && files.length && window.FileReader && window.File) { + var n = files.length, text = Array(n), read = 0; + var markAsReadAndPasteIfAllFilesAreRead = function () { + if (++read == n) { + operation(cm, function () { + pos = clipPos(cm.doc, pos); + var change = {from: pos, to: pos, + text: cm.doc.splitLines( + text.filter(function (t) { return t != null; }).join(cm.doc.lineSeparator())), + origin: "paste"}; + makeChange(cm.doc, change); + setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change)))); + })(); + } + }; + var readTextFromFile = function (file, i) { + if (cm.options.allowDropFileTypes && + indexOf(cm.options.allowDropFileTypes, file.type) == -1) { + markAsReadAndPasteIfAllFilesAreRead(); + return + } + var reader = new FileReader; + reader.onerror = function () { return markAsReadAndPasteIfAllFilesAreRead(); }; + reader.onload = function () { + var content = reader.result; + if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { + markAsReadAndPasteIfAllFilesAreRead(); + return + } + text[i] = content; + markAsReadAndPasteIfAllFilesAreRead(); + }; + reader.readAsText(file); + }; + for (var i = 0; i < files.length; i++) { readTextFromFile(files[i], i); } + } else { // Normal drop + // Don't do a replace if the drop happened inside of the selected text. + if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { + cm.state.draggingText(e); + // Ensure the editor is re-focused + setTimeout(function () { return cm.display.input.focus(); }, 20); + return + } + try { + var text$1 = e.dataTransfer.getData("Text"); + if (text$1) { + var selected; + if (cm.state.draggingText && !cm.state.draggingText.copy) + { selected = cm.listSelections(); } + setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); + if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1) + { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag"); } } + cm.replaceSelection(text$1, "around", "paste"); + cm.display.input.focus(); + } + } + catch(e$1){} + } + } + + function onDragStart(cm, e) { + if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return } + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return } + + e.dataTransfer.setData("Text", cm.getSelection()); + e.dataTransfer.effectAllowed = "copyMove"; + + // Use dummy image instead of default browsers image. + // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. + if (e.dataTransfer.setDragImage && !safari) { + var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); + img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; + if (presto) { + img.width = img.height = 1; + cm.display.wrapper.appendChild(img); + // Force a relayout, or Opera won't use our image for some obscure reason + img._top = img.offsetTop; + } + e.dataTransfer.setDragImage(img, 0, 0); + if (presto) { img.parentNode.removeChild(img); } + } + } + + function onDragOver(cm, e) { + var pos = posFromMouse(cm, e); + if (!pos) { return } + var frag = document.createDocumentFragment(); + drawSelectionCursor(cm, pos, frag); + if (!cm.display.dragCursor) { + cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors"); + cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv); + } + removeChildrenAndAdd(cm.display.dragCursor, frag); + } + + function clearDragCursor(cm) { + if (cm.display.dragCursor) { + cm.display.lineSpace.removeChild(cm.display.dragCursor); + cm.display.dragCursor = null; + } + } + + // These must be handled carefully, because naively registering a + // handler for each editor will cause the editors to never be + // garbage collected. + + function forEachCodeMirror(f) { + if (!document.getElementsByClassName) { return } + var byClass = document.getElementsByClassName("CodeMirror"), editors = []; + for (var i = 0; i < byClass.length; i++) { + var cm = byClass[i].CodeMirror; + if (cm) { editors.push(cm); } + } + if (editors.length) { editors[0].operation(function () { + for (var i = 0; i < editors.length; i++) { f(editors[i]); } + }); } + } + + var globalsRegistered = false; + function ensureGlobalHandlers() { + if (globalsRegistered) { return } + registerGlobalHandlers(); + globalsRegistered = true; + } + function registerGlobalHandlers() { + // When the window resizes, we need to refresh active editors. + var resizeTimer; + on(window, "resize", function () { + if (resizeTimer == null) { resizeTimer = setTimeout(function () { + resizeTimer = null; + forEachCodeMirror(onResize); + }, 100); } + }); + // When the window loses focus, we want to show the editor as blurred + on(window, "blur", function () { return forEachCodeMirror(onBlur); }); + } + // Called when the window resizes + function onResize(cm) { + var d = cm.display; + // Might be a text scaling operation, clear size caches. + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; + d.scrollbarsClipped = false; + cm.setSize(); + } + + var keyNames = { + 3: "Pause", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", + 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", + 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", + 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", + 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 145: "ScrollLock", + 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", + 221: "]", 222: "'", 224: "Mod", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", + 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" + }; + + // Number keys + for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); } + // Alphabetic keys + for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); } + // Function keys + for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2; } + + var keyMap = {}; + + keyMap.basic = { + "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", + "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", + "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", + "Tab": "defaultTab", "Shift-Tab": "indentAuto", + "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", + "Esc": "singleSelection" + }; + // Note that the save and find-related commands aren't defined by + // default. User code or addons can define them. Unknown commands + // are simply ignored. + keyMap.pcDefault = { + "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", + "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", + "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", + "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", + "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", + "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", + "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", + "fallthrough": "basic" + }; + // Very basic readline/emacs-style bindings, which are standard on Mac. + keyMap.emacsy = { + "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", + "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", + "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", + "Ctrl-T": "transposeChars", "Ctrl-O": "openLine" + }; + keyMap.macDefault = { + "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", + "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", + "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", + "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", + "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", + "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", + "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", + "fallthrough": ["basic", "emacsy"] + }; + keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; + + // KEYMAP DISPATCH + + function normalizeKeyName(name) { + var parts = name.split(/-(?!$)/); + name = parts[parts.length - 1]; + var alt, ctrl, shift, cmd; + for (var i = 0; i < parts.length - 1; i++) { + var mod = parts[i]; + if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; } + else if (/^a(lt)?$/i.test(mod)) { alt = true; } + else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; } + else if (/^s(hift)?$/i.test(mod)) { shift = true; } + else { throw new Error("Unrecognized modifier name: " + mod) } + } + if (alt) { name = "Alt-" + name; } + if (ctrl) { name = "Ctrl-" + name; } + if (cmd) { name = "Cmd-" + name; } + if (shift) { name = "Shift-" + name; } + return name + } + + // This is a kludge to keep keymaps mostly working as raw objects + // (backwards compatibility) while at the same time support features + // like normalization and multi-stroke key bindings. It compiles a + // new normalized keymap, and then updates the old object to reflect + // this. + function normalizeKeyMap(keymap) { + var copy = {}; + for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) { + var value = keymap[keyname]; + if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue } + if (value == "...") { delete keymap[keyname]; continue } + + var keys = map(keyname.split(" "), normalizeKeyName); + for (var i = 0; i < keys.length; i++) { + var val = (void 0), name = (void 0); + if (i == keys.length - 1) { + name = keys.join(" "); + val = value; + } else { + name = keys.slice(0, i + 1).join(" "); + val = "..."; + } + var prev = copy[name]; + if (!prev) { copy[name] = val; } + else if (prev != val) { throw new Error("Inconsistent bindings for " + name) } + } + delete keymap[keyname]; + } } + for (var prop in copy) { keymap[prop] = copy[prop]; } + return keymap + } + + function lookupKey(key, map, handle, context) { + map = getKeyMap(map); + var found = map.call ? map.call(key, context) : map[key]; + if (found === false) { return "nothing" } + if (found === "...") { return "multi" } + if (found != null && handle(found)) { return "handled" } + + if (map.fallthrough) { + if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") + { return lookupKey(key, map.fallthrough, handle, context) } + for (var i = 0; i < map.fallthrough.length; i++) { + var result = lookupKey(key, map.fallthrough[i], handle, context); + if (result) { return result } + } + } + } + + // Modifier key presses don't count as 'real' key presses for the + // purpose of keymap fallthrough. + function isModifierKey(value) { + var name = typeof value == "string" ? value : keyNames[value.keyCode]; + return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod" + } + + function addModifierNames(name, event, noShift) { + var base = name; + if (event.altKey && base != "Alt") { name = "Alt-" + name; } + if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name; } + if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Mod") { name = "Cmd-" + name; } + if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name; } + return name + } + + // Look up the name of a key as indicated by an event object. + function keyName(event, noShift) { + if (presto && event.keyCode == 34 && event["char"]) { return false } + var name = keyNames[event.keyCode]; + if (name == null || event.altGraphKey) { return false } + // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause, + // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+) + if (event.keyCode == 3 && event.code) { name = event.code; } + return addModifierNames(name, event, noShift) + } + + function getKeyMap(val) { + return typeof val == "string" ? keyMap[val] : val + } + + // Helper for deleting text near the selection(s), used to implement + // backspace, delete, and similar functionality. + function deleteNearSelection(cm, compute) { + var ranges = cm.doc.sel.ranges, kill = []; + // Build up a set of ranges to kill first, merging overlapping + // ranges. + for (var i = 0; i < ranges.length; i++) { + var toKill = compute(ranges[i]); + while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { + var replaced = kill.pop(); + if (cmp(replaced.from, toKill.from) < 0) { + toKill.from = replaced.from; + break + } + } + kill.push(toKill); + } + // Next, remove those actual ranges. + runInOp(cm, function () { + for (var i = kill.length - 1; i >= 0; i--) + { replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); } + ensureCursorVisible(cm); + }); + } + + function moveCharLogically(line, ch, dir) { + var target = skipExtendingChars(line.text, ch + dir, dir); + return target < 0 || target > line.text.length ? null : target + } + + function moveLogically(line, start, dir) { + var ch = moveCharLogically(line, start.ch, dir); + return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before") + } + + function endOfLine(visually, cm, lineObj, lineNo, dir) { + if (visually) { + if (cm.doc.direction == "rtl") { dir = -dir; } + var order = getOrder(lineObj, cm.doc.direction); + if (order) { + var part = dir < 0 ? lst(order) : order[0]; + var moveInStorageOrder = (dir < 0) == (part.level == 1); + var sticky = moveInStorageOrder ? "after" : "before"; + var ch; + // With a wrapped rtl chunk (possibly spanning multiple bidi parts), + // it could be that the last bidi part is not on the last visual line, + // since visual lines contain content order-consecutive chunks. + // Thus, in rtl, we are looking for the first (content-order) character + // in the rtl chunk that is on the last line (that is, the same line + // as the last (content-order) character). + if (part.level > 0 || cm.doc.direction == "rtl") { + var prep = prepareMeasureForLine(cm, lineObj); + ch = dir < 0 ? lineObj.text.length - 1 : 0; + var targetTop = measureCharPrepared(cm, prep, ch).top; + ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch); + if (sticky == "before") { ch = moveCharLogically(lineObj, ch, 1); } + } else { ch = dir < 0 ? part.to : part.from; } + return new Pos(lineNo, ch, sticky) + } + } + return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after") + } + + function moveVisually(cm, line, start, dir) { + var bidi = getOrder(line, cm.doc.direction); + if (!bidi) { return moveLogically(line, start, dir) } + if (start.ch >= line.text.length) { + start.ch = line.text.length; + start.sticky = "before"; + } else if (start.ch <= 0) { + start.ch = 0; + start.sticky = "after"; + } + var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos]; + if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) { + // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines, + // nothing interesting happens. + return moveLogically(line, start, dir) + } + + var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); }; + var prep; + var getWrappedLineExtent = function (ch) { + if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} } + prep = prep || prepareMeasureForLine(cm, line); + return wrappedLineExtentChar(cm, line, prep, ch) + }; + var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch); + + if (cm.doc.direction == "rtl" || part.level == 1) { + var moveInStorageOrder = (part.level == 1) == (dir < 0); + var ch = mv(start, moveInStorageOrder ? 1 : -1); + if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) { + // Case 2: We move within an rtl part or in an rtl editor on the same visual line + var sticky = moveInStorageOrder ? "before" : "after"; + return new Pos(start.line, ch, sticky) + } + } + + // Case 3: Could not move within this bidi part in this visual line, so leave + // the current bidi part + + var searchInVisualLine = function (partPos, dir, wrappedLineExtent) { + var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder + ? new Pos(start.line, mv(ch, 1), "before") + : new Pos(start.line, ch, "after"); }; + + for (; partPos >= 0 && partPos < bidi.length; partPos += dir) { + var part = bidi[partPos]; + var moveInStorageOrder = (dir > 0) == (part.level != 1); + var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1); + if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) } + ch = moveInStorageOrder ? part.from : mv(part.to, -1); + if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) } + } + }; + + // Case 3a: Look for other bidi parts on the same visual line + var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent); + if (res) { return res } + + // Case 3b: Look for other bidi parts on the next visual line + var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1); + if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) { + res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh)); + if (res) { return res } + } + + // Case 4: Nowhere to move + return null + } + + // Commands are parameter-less actions that can be performed on an + // editor, mostly used for keybindings. + var commands = { + selectAll: selectAll, + singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); }, + killLine: function (cm) { return deleteNearSelection(cm, function (range) { + if (range.empty()) { + var len = getLine(cm.doc, range.head.line).text.length; + if (range.head.ch == len && range.head.line < cm.lastLine()) + { return {from: range.head, to: Pos(range.head.line + 1, 0)} } + else + { return {from: range.head, to: Pos(range.head.line, len)} } + } else { + return {from: range.from(), to: range.to()} + } + }); }, + deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({ + from: Pos(range.from().line, 0), + to: clipPos(cm.doc, Pos(range.to().line + 1, 0)) + }); }); }, + delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({ + from: Pos(range.from().line, 0), to: range.from() + }); }); }, + delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { + var top = cm.charCoords(range.head, "div").top + 5; + var leftPos = cm.coordsChar({left: 0, top: top}, "div"); + return {from: leftPos, to: range.from()} + }); }, + delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) { + var top = cm.charCoords(range.head, "div").top + 5; + var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); + return {from: range.from(), to: rightPos } + }); }, + undo: function (cm) { return cm.undo(); }, + redo: function (cm) { return cm.redo(); }, + undoSelection: function (cm) { return cm.undoSelection(); }, + redoSelection: function (cm) { return cm.redoSelection(); }, + goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); }, + goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); }, + goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); }, + {origin: "+move", bias: 1} + ); }, + goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); }, + {origin: "+move", bias: 1} + ); }, + goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); }, + {origin: "+move", bias: -1} + ); }, + goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5; + return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div") + }, sel_move); }, + goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5; + return cm.coordsChar({left: 0, top: top}, "div") + }, sel_move); }, + goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5; + var pos = cm.coordsChar({left: 0, top: top}, "div"); + if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) } + return pos + }, sel_move); }, + goLineUp: function (cm) { return cm.moveV(-1, "line"); }, + goLineDown: function (cm) { return cm.moveV(1, "line"); }, + goPageUp: function (cm) { return cm.moveV(-1, "page"); }, + goPageDown: function (cm) { return cm.moveV(1, "page"); }, + goCharLeft: function (cm) { return cm.moveH(-1, "char"); }, + goCharRight: function (cm) { return cm.moveH(1, "char"); }, + goColumnLeft: function (cm) { return cm.moveH(-1, "column"); }, + goColumnRight: function (cm) { return cm.moveH(1, "column"); }, + goWordLeft: function (cm) { return cm.moveH(-1, "word"); }, + goGroupRight: function (cm) { return cm.moveH(1, "group"); }, + goGroupLeft: function (cm) { return cm.moveH(-1, "group"); }, + goWordRight: function (cm) { return cm.moveH(1, "word"); }, + delCharBefore: function (cm) { return cm.deleteH(-1, "codepoint"); }, + delCharAfter: function (cm) { return cm.deleteH(1, "char"); }, + delWordBefore: function (cm) { return cm.deleteH(-1, "word"); }, + delWordAfter: function (cm) { return cm.deleteH(1, "word"); }, + delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); }, + delGroupAfter: function (cm) { return cm.deleteH(1, "group"); }, + indentAuto: function (cm) { return cm.indentSelection("smart"); }, + indentMore: function (cm) { return cm.indentSelection("add"); }, + indentLess: function (cm) { return cm.indentSelection("subtract"); }, + insertTab: function (cm) { return cm.replaceSelection("\t"); }, + insertSoftTab: function (cm) { + var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize; + for (var i = 0; i < ranges.length; i++) { + var pos = ranges[i].from(); + var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); + spaces.push(spaceStr(tabSize - col % tabSize)); + } + cm.replaceSelections(spaces); + }, + defaultTab: function (cm) { + if (cm.somethingSelected()) { cm.indentSelection("add"); } + else { cm.execCommand("insertTab"); } + }, + // Swap the two chars left and right of each selection's head. + // Move cursor behind the two swapped characters afterwards. + // + // Doesn't consider line feeds a character. + // Doesn't scan more than one line above to find a character. + // Doesn't do anything on an empty line. + // Doesn't do anything with non-empty selections. + transposeChars: function (cm) { return runInOp(cm, function () { + var ranges = cm.listSelections(), newSel = []; + for (var i = 0; i < ranges.length; i++) { + if (!ranges[i].empty()) { continue } + var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text; + if (line) { + if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); } + if (cur.ch > 0) { + cur = new Pos(cur.line, cur.ch + 1); + cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), + Pos(cur.line, cur.ch - 2), cur, "+transpose"); + } else if (cur.line > cm.doc.first) { + var prev = getLine(cm.doc, cur.line - 1).text; + if (prev) { + cur = new Pos(cur.line, 1); + cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + + prev.charAt(prev.length - 1), + Pos(cur.line - 1, prev.length - 1), cur, "+transpose"); + } + } + } + newSel.push(new Range(cur, cur)); + } + cm.setSelections(newSel); + }); }, + newlineAndIndent: function (cm) { return runInOp(cm, function () { + var sels = cm.listSelections(); + for (var i = sels.length - 1; i >= 0; i--) + { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input"); } + sels = cm.listSelections(); + for (var i$1 = 0; i$1 < sels.length; i$1++) + { cm.indentLine(sels[i$1].from().line, null, true); } + ensureCursorVisible(cm); + }); }, + openLine: function (cm) { return cm.replaceSelection("\n", "start"); }, + toggleOverwrite: function (cm) { return cm.toggleOverwrite(); } + }; + + + function lineStart(cm, lineN) { + var line = getLine(cm.doc, lineN); + var visual = visualLine(line); + if (visual != line) { lineN = lineNo(visual); } + return endOfLine(true, cm, visual, lineN, 1) + } + function lineEnd(cm, lineN) { + var line = getLine(cm.doc, lineN); + var visual = visualLineEnd(line); + if (visual != line) { lineN = lineNo(visual); } + return endOfLine(true, cm, line, lineN, -1) + } + function lineStartSmart(cm, pos) { + var start = lineStart(cm, pos.line); + var line = getLine(cm.doc, start.line); + var order = getOrder(line, cm.doc.direction); + if (!order || order[0].level == 0) { + var firstNonWS = Math.max(start.ch, line.text.search(/\S/)); + var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; + return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky) + } + return start + } + + // Run a handler that was bound to a key. + function doHandleBinding(cm, bound, dropShift) { + if (typeof bound == "string") { + bound = commands[bound]; + if (!bound) { return false } + } + // Ensure previous input has been read, so that the handler sees a + // consistent view of the document + cm.display.input.ensurePolled(); + var prevShift = cm.display.shift, done = false; + try { + if (cm.isReadOnly()) { cm.state.suppressEdits = true; } + if (dropShift) { cm.display.shift = false; } + done = bound(cm) != Pass; + } finally { + cm.display.shift = prevShift; + cm.state.suppressEdits = false; + } + return done + } + + function lookupKeyForEditor(cm, name, handle) { + for (var i = 0; i < cm.state.keyMaps.length; i++) { + var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); + if (result) { return result } + } + return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) + || lookupKey(name, cm.options.keyMap, handle, cm) + } + + // Note that, despite the name, this function is also used to check + // for bound mouse clicks. + + var stopSeq = new Delayed; + + function dispatchKey(cm, name, e, handle) { + var seq = cm.state.keySeq; + if (seq) { + if (isModifierKey(name)) { return "handled" } + if (/\'$/.test(name)) + { cm.state.keySeq = null; } + else + { stopSeq.set(50, function () { + if (cm.state.keySeq == seq) { + cm.state.keySeq = null; + cm.display.input.reset(); + } + }); } + if (dispatchKeyInner(cm, seq + " " + name, e, handle)) { return true } + } + return dispatchKeyInner(cm, name, e, handle) + } + + function dispatchKeyInner(cm, name, e, handle) { + var result = lookupKeyForEditor(cm, name, handle); + + if (result == "multi") + { cm.state.keySeq = name; } + if (result == "handled") + { signalLater(cm, "keyHandled", cm, name, e); } + + if (result == "handled" || result == "multi") { + e_preventDefault(e); + restartBlink(cm); + } + + return !!result + } + + // Handle a key from the keydown event. + function handleKeyBinding(cm, e) { + var name = keyName(e, true); + if (!name) { return false } + + if (e.shiftKey && !cm.state.keySeq) { + // First try to resolve full name (including 'Shift-'). Failing + // that, see if there is a cursor-motion command (starting with + // 'go') bound to the keyname without 'Shift-'. + return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); }) + || dispatchKey(cm, name, e, function (b) { + if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) + { return doHandleBinding(cm, b) } + }) + } else { + return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); }) + } + } + + // Handle a key from the keypress event + function handleCharBinding(cm, e, ch) { + return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); }) + } + + var lastStoppedKey = null; + function onKeyDown(e) { + var cm = this; + if (e.target && e.target != cm.display.input.getField()) { return } + cm.curOp.focus = activeElt(root(cm)); + if (signalDOMEvent(cm, e)) { return } + // IE does strange things with escape. + if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; } + var code = e.keyCode; + cm.display.shift = code == 16 || e.shiftKey; + var handled = handleKeyBinding(cm, e); + if (presto) { + lastStoppedKey = handled ? code : null; + // Opera has no cut event... we try to at least catch the key combo + if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) + { cm.replaceSelection("", null, "cut"); } + } + if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand) + { document.execCommand("cut"); } + + // Turn mouse into crosshair when Alt is held on Mac. + if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) + { showCrossHair(cm); } + } + + function showCrossHair(cm) { + var lineDiv = cm.display.lineDiv; + addClass(lineDiv, "CodeMirror-crosshair"); + + function up(e) { + if (e.keyCode == 18 || !e.altKey) { + rmClass(lineDiv, "CodeMirror-crosshair"); + off(document, "keyup", up); + off(document, "mouseover", up); + } + } + on(document, "keyup", up); + on(document, "mouseover", up); + } + + function onKeyUp(e) { + if (e.keyCode == 16) { this.doc.sel.shift = false; } + signalDOMEvent(this, e); + } + + function onKeyPress(e) { + var cm = this; + if (e.target && e.target != cm.display.input.getField()) { return } + if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return } + var keyCode = e.keyCode, charCode = e.charCode; + if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return} + if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return } + var ch = String.fromCharCode(charCode == null ? keyCode : charCode); + // Some browsers fire keypress events for backspace + if (ch == "\x08") { return } + if (handleCharBinding(cm, e, ch)) { return } + cm.display.input.onKeyPress(e); + } + + var DOUBLECLICK_DELAY = 400; + + var PastClick = function(time, pos, button) { + this.time = time; + this.pos = pos; + this.button = button; + }; + + PastClick.prototype.compare = function (time, pos, button) { + return this.time + DOUBLECLICK_DELAY > time && + cmp(pos, this.pos) == 0 && button == this.button + }; + + var lastClick, lastDoubleClick; + function clickRepeat(pos, button) { + var now = +new Date; + if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) { + lastClick = lastDoubleClick = null; + return "triple" + } else if (lastClick && lastClick.compare(now, pos, button)) { + lastDoubleClick = new PastClick(now, pos, button); + lastClick = null; + return "double" + } else { + lastClick = new PastClick(now, pos, button); + lastDoubleClick = null; + return "single" + } + } + + // A mouse down can be a single click, double click, triple click, + // start of selection drag, start of text drag, new cursor + // (ctrl-click), rectangle drag (alt-drag), or xwin + // middle-click-paste. Or it might be a click on something we should + // not interfere with, such as a scrollbar or widget. + function onMouseDown(e) { + var cm = this, display = cm.display; + if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return } + display.input.ensurePolled(); + display.shift = e.shiftKey; + + if (eventInWidget(display, e)) { + if (!webkit) { + // Briefly turn off draggability, to allow widgets to do + // normal dragging things. + display.scroller.draggable = false; + setTimeout(function () { return display.scroller.draggable = true; }, 100); + } + return + } + if (clickInGutter(cm, e)) { return } + var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : "single"; + win(cm).focus(); + + // #3261: make sure, that we're not starting a second selection + if (button == 1 && cm.state.selectingText) + { cm.state.selectingText(e); } + + if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return } + + if (button == 1) { + if (pos) { leftButtonDown(cm, pos, repeat, e); } + else if (e_target(e) == display.scroller) { e_preventDefault(e); } + } else if (button == 2) { + if (pos) { extendSelection(cm.doc, pos); } + setTimeout(function () { return display.input.focus(); }, 20); + } else if (button == 3) { + if (captureRightClick) { cm.display.input.onContextMenu(e); } + else { delayBlurEvent(cm); } + } + } + + function handleMappedButton(cm, button, pos, repeat, event) { + var name = "Click"; + if (repeat == "double") { name = "Double" + name; } + else if (repeat == "triple") { name = "Triple" + name; } + name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name; + + return dispatchKey(cm, addModifierNames(name, event), event, function (bound) { + if (typeof bound == "string") { bound = commands[bound]; } + if (!bound) { return false } + var done = false; + try { + if (cm.isReadOnly()) { cm.state.suppressEdits = true; } + done = bound(cm, pos) != Pass; + } finally { + cm.state.suppressEdits = false; + } + return done + }) + } + + function configureMouse(cm, repeat, event) { + var option = cm.getOption("configureMouse"); + var value = option ? option(cm, repeat, event) : {}; + if (value.unit == null) { + var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey; + value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line"; + } + if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; } + if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; } + if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); } + return value + } + + function leftButtonDown(cm, pos, repeat, event) { + if (ie) { setTimeout(bind(ensureFocus, cm), 0); } + else { cm.curOp.focus = activeElt(root(cm)); } + + var behavior = configureMouse(cm, repeat, event); + + var sel = cm.doc.sel, contained; + if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && + repeat == "single" && (contained = sel.contains(pos)) > -1 && + (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) && + (cmp(contained.to(), pos) > 0 || pos.xRel < 0)) + { leftButtonStartDrag(cm, event, pos, behavior); } + else + { leftButtonSelect(cm, event, pos, behavior); } + } + + // Start a text drag. When it ends, see if any dragging actually + // happen, and treat as a click if it didn't. + function leftButtonStartDrag(cm, event, pos, behavior) { + var display = cm.display, moved = false; + var dragEnd = operation(cm, function (e) { + if (webkit) { display.scroller.draggable = false; } + cm.state.draggingText = false; + if (cm.state.delayingBlurEvent) { + if (cm.hasFocus()) { cm.state.delayingBlurEvent = false; } + else { delayBlurEvent(cm); } + } + off(display.wrapper.ownerDocument, "mouseup", dragEnd); + off(display.wrapper.ownerDocument, "mousemove", mouseMove); + off(display.scroller, "dragstart", dragStart); + off(display.scroller, "drop", dragEnd); + if (!moved) { + e_preventDefault(e); + if (!behavior.addNew) + { extendSelection(cm.doc, pos, null, null, behavior.extend); } + // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) + if ((webkit && !safari) || ie && ie_version == 9) + { setTimeout(function () {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus();}, 20); } + else + { display.input.focus(); } + } + }); + var mouseMove = function(e2) { + moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10; + }; + var dragStart = function () { return moved = true; }; + // Let the drag handler handle this. + if (webkit) { display.scroller.draggable = true; } + cm.state.draggingText = dragEnd; + dragEnd.copy = !behavior.moveOnDrag; + on(display.wrapper.ownerDocument, "mouseup", dragEnd); + on(display.wrapper.ownerDocument, "mousemove", mouseMove); + on(display.scroller, "dragstart", dragStart); + on(display.scroller, "drop", dragEnd); + + cm.state.delayingBlurEvent = true; + setTimeout(function () { return display.input.focus(); }, 20); + // IE's approach to draggable + if (display.scroller.dragDrop) { display.scroller.dragDrop(); } + } + + function rangeForUnit(cm, pos, unit) { + if (unit == "char") { return new Range(pos, pos) } + if (unit == "word") { return cm.findWordAt(pos) } + if (unit == "line") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) } + var result = unit(cm, pos); + return new Range(result.from, result.to) + } + + // Normal selection, as opposed to text dragging. + function leftButtonSelect(cm, event, start, behavior) { + if (ie) { delayBlurEvent(cm); } + var display = cm.display, doc = cm.doc; + e_preventDefault(event); + + var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges; + if (behavior.addNew && !behavior.extend) { + ourIndex = doc.sel.contains(start); + if (ourIndex > -1) + { ourRange = ranges[ourIndex]; } + else + { ourRange = new Range(start, start); } + } else { + ourRange = doc.sel.primary(); + ourIndex = doc.sel.primIndex; + } + + if (behavior.unit == "rectangle") { + if (!behavior.addNew) { ourRange = new Range(start, start); } + start = posFromMouse(cm, event, true, true); + ourIndex = -1; + } else { + var range = rangeForUnit(cm, start, behavior.unit); + if (behavior.extend) + { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); } + else + { ourRange = range; } + } + + if (!behavior.addNew) { + ourIndex = 0; + setSelection(doc, new Selection([ourRange], 0), sel_mouse); + startSel = doc.sel; + } else if (ourIndex == -1) { + ourIndex = ranges.length; + setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex), + {scroll: false, origin: "*mouse"}); + } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) { + setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), + {scroll: false, origin: "*mouse"}); + startSel = doc.sel; + } else { + replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); + } + + var lastPos = start; + function extendTo(pos) { + if (cmp(lastPos, pos) == 0) { return } + lastPos = pos; + + if (behavior.unit == "rectangle") { + var ranges = [], tabSize = cm.options.tabSize; + var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); + var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); + var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); + for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); + line <= end; line++) { + var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); + if (left == right) + { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); } + else if (text.length > leftPos) + { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); } + } + if (!ranges.length) { ranges.push(new Range(start, start)); } + setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), + {origin: "*mouse", scroll: false}); + cm.scrollIntoView(pos); + } else { + var oldRange = ourRange; + var range = rangeForUnit(cm, pos, behavior.unit); + var anchor = oldRange.anchor, head; + if (cmp(range.anchor, anchor) > 0) { + head = range.head; + anchor = minPos(oldRange.from(), range.anchor); + } else { + head = range.anchor; + anchor = maxPos(oldRange.to(), range.head); + } + var ranges$1 = startSel.ranges.slice(0); + ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head)); + setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse); + } + } + + var editorSize = display.wrapper.getBoundingClientRect(); + // Used to ensure timeout re-tries don't fire when another extend + // happened in the meantime (clearTimeout isn't reliable -- at + // least on Chrome, the timeouts still happen even when cleared, + // if the clear happens after their scheduled firing time). + var counter = 0; + + function extend(e) { + var curCount = ++counter; + var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle"); + if (!cur) { return } + if (cmp(cur, lastPos) != 0) { + cm.curOp.focus = activeElt(root(cm)); + extendTo(cur); + var visible = visibleLines(display, doc); + if (cur.line >= visible.to || cur.line < visible.from) + { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); } + } else { + var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; + if (outside) { setTimeout(operation(cm, function () { + if (counter != curCount) { return } + display.scroller.scrollTop += outside; + extend(e); + }), 50); } + } + } + + function done(e) { + cm.state.selectingText = false; + counter = Infinity; + // If e is null or undefined we interpret this as someone trying + // to explicitly cancel the selection rather than the user + // letting go of the mouse button. + if (e) { + e_preventDefault(e); + display.input.focus(); + } + off(display.wrapper.ownerDocument, "mousemove", move); + off(display.wrapper.ownerDocument, "mouseup", up); + doc.history.lastSelOrigin = null; + } + + var move = operation(cm, function (e) { + if (e.buttons === 0 || !e_button(e)) { done(e); } + else { extend(e); } + }); + var up = operation(cm, done); + cm.state.selectingText = up; + on(display.wrapper.ownerDocument, "mousemove", move); + on(display.wrapper.ownerDocument, "mouseup", up); + } + + // Used when mouse-selecting to adjust the anchor to the proper side + // of a bidi jump depending on the visual position of the head. + function bidiSimplify(cm, range) { + var anchor = range.anchor; + var head = range.head; + var anchorLine = getLine(cm.doc, anchor.line); + if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range } + var order = getOrder(anchorLine); + if (!order) { return range } + var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index]; + if (part.from != anchor.ch && part.to != anchor.ch) { return range } + var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1); + if (boundary == 0 || boundary == order.length) { return range } + + // Compute the relative visual position of the head compared to the + // anchor (<0 is to the left, >0 to the right) + var leftSide; + if (head.line != anchor.line) { + leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0; + } else { + var headIndex = getBidiPartAt(order, head.ch, head.sticky); + var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1); + if (headIndex == boundary - 1 || headIndex == boundary) + { leftSide = dir < 0; } + else + { leftSide = dir > 0; } + } + + var usePart = order[boundary + (leftSide ? -1 : 0)]; + var from = leftSide == (usePart.level == 1); + var ch = from ? usePart.from : usePart.to, sticky = from ? "after" : "before"; + return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head) + } + + + // Determines whether an event happened in the gutter, and fires the + // handlers for the corresponding event. + function gutterEvent(cm, e, type, prevent) { + var mX, mY; + if (e.touches) { + mX = e.touches[0].clientX; + mY = e.touches[0].clientY; + } else { + try { mX = e.clientX; mY = e.clientY; } + catch(e$1) { return false } + } + if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false } + if (prevent) { e_preventDefault(e); } + + var display = cm.display; + var lineBox = display.lineDiv.getBoundingClientRect(); + + if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) } + mY -= lineBox.top - display.viewOffset; + + for (var i = 0; i < cm.display.gutterSpecs.length; ++i) { + var g = display.gutters.childNodes[i]; + if (g && g.getBoundingClientRect().right >= mX) { + var line = lineAtHeight(cm.doc, mY); + var gutter = cm.display.gutterSpecs[i]; + signal(cm, type, cm, line, gutter.className, e); + return e_defaultPrevented(e) + } + } + } + + function clickInGutter(cm, e) { + return gutterEvent(cm, e, "gutterClick", true) + } + + // CONTEXT MENU HANDLING + + // To make the context menu work, we need to briefly unhide the + // textarea (making it as unobtrusive as possible) to let the + // right-click take effect on it. + function onContextMenu(cm, e) { + if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return } + if (signalDOMEvent(cm, e, "contextmenu")) { return } + if (!captureRightClick) { cm.display.input.onContextMenu(e); } + } + + function contextMenuInGutter(cm, e) { + if (!hasHandler(cm, "gutterContextMenu")) { return false } + return gutterEvent(cm, e, "gutterContextMenu", false) + } + + function themeChanged(cm) { + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); + clearCaches(cm); + } + + var Init = {toString: function(){return "CodeMirror.Init"}}; + + var defaults = {}; + var optionHandlers = {}; + + function defineOptions(CodeMirror) { + var optionHandlers = CodeMirror.optionHandlers; + + function option(name, deflt, handle, notOnInit) { + CodeMirror.defaults[name] = deflt; + if (handle) { optionHandlers[name] = + notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; } + } + + CodeMirror.defineOption = option; + + // Passed to option handlers when there is no old value. + CodeMirror.Init = Init; + + // These two are, on init, called from the constructor because they + // have to be initialized before the editor can start at all. + option("value", "", function (cm, val) { return cm.setValue(val); }, true); + option("mode", null, function (cm, val) { + cm.doc.modeOption = val; + loadMode(cm); + }, true); + + option("indentUnit", 2, loadMode, true); + option("indentWithTabs", false); + option("smartIndent", true); + option("tabSize", 4, function (cm) { + resetModeState(cm); + clearCaches(cm); + regChange(cm); + }, true); + + option("lineSeparator", null, function (cm, val) { + cm.doc.lineSep = val; + if (!val) { return } + var newBreaks = [], lineNo = cm.doc.first; + cm.doc.iter(function (line) { + for (var pos = 0;;) { + var found = line.text.indexOf(val, pos); + if (found == -1) { break } + pos = found + val.length; + newBreaks.push(Pos(lineNo, found)); + } + lineNo++; + }); + for (var i = newBreaks.length - 1; i >= 0; i--) + { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); } + }); + option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g, function (cm, val, old) { + cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); + if (old != Init) { cm.refresh(); } + }); + option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true); + option("electricChars", true); + option("inputStyle", mobile ? "contenteditable" : "textarea", function () { + throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME + }, true); + option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true); + option("autocorrect", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true); + option("autocapitalize", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true); + option("rtlMoveVisually", !windows); + option("wholeLineUpdateBefore", true); + + option("theme", "default", function (cm) { + themeChanged(cm); + updateGutters(cm); + }, true); + option("keyMap", "default", function (cm, val, old) { + var next = getKeyMap(val); + var prev = old != Init && getKeyMap(old); + if (prev && prev.detach) { prev.detach(cm, next); } + if (next.attach) { next.attach(cm, prev || null); } + }); + option("extraKeys", null); + option("configureMouse", null); + + option("lineWrapping", false, wrappingChanged, true); + option("gutters", [], function (cm, val) { + cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers); + updateGutters(cm); + }, true); + option("fixedGutter", true, function (cm, val) { + cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; + cm.refresh(); + }, true); + option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true); + option("scrollbarStyle", "native", function (cm) { + initScrollbars(cm); + updateScrollbars(cm); + cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); + cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); + }, true); + option("lineNumbers", false, function (cm, val) { + cm.display.gutterSpecs = getGutters(cm.options.gutters, val); + updateGutters(cm); + }, true); + option("firstLineNumber", 1, updateGutters, true); + option("lineNumberFormatter", function (integer) { return integer; }, updateGutters, true); + option("showCursorWhenSelecting", false, updateSelection, true); + + option("resetSelectionOnContextMenu", true); + option("lineWiseCopyCut", true); + option("pasteLinesPerSelection", true); + option("selectionsMayTouch", false); + + option("readOnly", false, function (cm, val) { + if (val == "nocursor") { + onBlur(cm); + cm.display.input.blur(); + } + cm.display.input.readOnlyChanged(val); + }); + + option("screenReaderLabel", null, function (cm, val) { + val = (val === '') ? null : val; + cm.display.input.screenReaderLabelChanged(val); + }); + + option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true); + option("dragDrop", true, dragDropChanged); + option("allowDropFileTypes", null); + + option("cursorBlinkRate", 530); + option("cursorScrollMargin", 0); + option("cursorHeight", 1, updateSelection, true); + option("singleCursorHeightPerLine", true, updateSelection, true); + option("workTime", 100); + option("workDelay", 100); + option("flattenSpans", true, resetModeState, true); + option("addModeClass", false, resetModeState, true); + option("pollInterval", 100); + option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; }); + option("historyEventDelay", 1250); + option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true); + option("maxHighlightLength", 10000, resetModeState, true); + option("moveInputWithCursor", true, function (cm, val) { + if (!val) { cm.display.input.resetPosition(); } + }); + + option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; }); + option("autofocus", null); + option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true); + option("phrases", null); + } + + function dragDropChanged(cm, value, old) { + var wasOn = old && old != Init; + if (!value != !wasOn) { + var funcs = cm.display.dragFunctions; + var toggle = value ? on : off; + toggle(cm.display.scroller, "dragstart", funcs.start); + toggle(cm.display.scroller, "dragenter", funcs.enter); + toggle(cm.display.scroller, "dragover", funcs.over); + toggle(cm.display.scroller, "dragleave", funcs.leave); + toggle(cm.display.scroller, "drop", funcs.drop); + } + } + + function wrappingChanged(cm) { + if (cm.options.lineWrapping) { + addClass(cm.display.wrapper, "CodeMirror-wrap"); + cm.display.sizer.style.minWidth = ""; + cm.display.sizerWidth = null; + } else { + rmClass(cm.display.wrapper, "CodeMirror-wrap"); + findMaxLine(cm); + } + estimateLineHeights(cm); + regChange(cm); + clearCaches(cm); + setTimeout(function () { return updateScrollbars(cm); }, 100); + } + + // A CodeMirror instance represents an editor. This is the object + // that user code is usually dealing with. + + function CodeMirror(place, options) { + var this$1 = this; + + if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) } + + this.options = options = options ? copyObj(options) : {}; + // Determine effective options based on given values and defaults. + copyObj(defaults, options, false); + + var doc = options.value; + if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); } + else if (options.mode) { doc.modeOption = options.mode; } + this.doc = doc; + + var input = new CodeMirror.inputStyles[options.inputStyle](this); + var display = this.display = new Display(place, doc, input, options); + display.wrapper.CodeMirror = this; + themeChanged(this); + if (options.lineWrapping) + { this.display.wrapper.className += " CodeMirror-wrap"; } + initScrollbars(this); + + this.state = { + keyMaps: [], // stores maps added by addKeyMap + overlays: [], // highlighting overlays, as added by addOverlay + modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info + overwrite: false, + delayingBlurEvent: false, + focused: false, + suppressEdits: false, // used to disable editing during key handlers when in readOnly mode + pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll + selectingText: false, + draggingText: false, + highlight: new Delayed(), // stores highlight worker timeout + keySeq: null, // Unfinished key sequence + specialChars: null + }; + + if (options.autofocus && !mobile) { display.input.focus(); } + + // Override magic textarea content restore that IE sometimes does + // on our hidden textarea on reload + if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); } + + registerEventHandlers(this); + ensureGlobalHandlers(); + + startOperation(this); + this.curOp.forceUpdate = true; + attachDoc(this, doc); + + if ((options.autofocus && !mobile) || this.hasFocus()) + { setTimeout(function () { + if (this$1.hasFocus() && !this$1.state.focused) { onFocus(this$1); } + }, 20); } + else + { onBlur(this); } + + for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt)) + { optionHandlers[opt](this, options[opt], Init); } } + maybeUpdateLineNumberWidth(this); + if (options.finishInit) { options.finishInit(this); } + for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this); } + endOperation(this); + // Suppress optimizelegibility in Webkit, since it breaks text + // measuring on line wrapping boundaries. + if (webkit && options.lineWrapping && + getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") + { display.lineDiv.style.textRendering = "auto"; } + } + + // The default configuration options. + CodeMirror.defaults = defaults; + // Functions to run when options are changed. + CodeMirror.optionHandlers = optionHandlers; + + // Attach the necessary event handlers when initializing the editor + function registerEventHandlers(cm) { + var d = cm.display; + on(d.scroller, "mousedown", operation(cm, onMouseDown)); + // Older IE's will not fire a second mousedown for a double click + if (ie && ie_version < 11) + { on(d.scroller, "dblclick", operation(cm, function (e) { + if (signalDOMEvent(cm, e)) { return } + var pos = posFromMouse(cm, e); + if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return } + e_preventDefault(e); + var word = cm.findWordAt(pos); + extendSelection(cm.doc, word.anchor, word.head); + })); } + else + { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); } + // Some browsers fire contextmenu *after* opening the menu, at + // which point we can't mess with it anymore. Context menu is + // handled in onMouseDown for these browsers. + on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); }); + on(d.input.getField(), "contextmenu", function (e) { + if (!d.scroller.contains(e.target)) { onContextMenu(cm, e); } + }); + + // Used to suppress mouse event handling when a touch happens + var touchFinished, prevTouch = {end: 0}; + function finishTouch() { + if (d.activeTouch) { + touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000); + prevTouch = d.activeTouch; + prevTouch.end = +new Date; + } + } + function isMouseLikeTouchEvent(e) { + if (e.touches.length != 1) { return false } + var touch = e.touches[0]; + return touch.radiusX <= 1 && touch.radiusY <= 1 + } + function farAway(touch, other) { + if (other.left == null) { return true } + var dx = other.left - touch.left, dy = other.top - touch.top; + return dx * dx + dy * dy > 20 * 20 + } + on(d.scroller, "touchstart", function (e) { + if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) { + d.input.ensurePolled(); + clearTimeout(touchFinished); + var now = +new Date; + d.activeTouch = {start: now, moved: false, + prev: now - prevTouch.end <= 300 ? prevTouch : null}; + if (e.touches.length == 1) { + d.activeTouch.left = e.touches[0].pageX; + d.activeTouch.top = e.touches[0].pageY; + } + } + }); + on(d.scroller, "touchmove", function () { + if (d.activeTouch) { d.activeTouch.moved = true; } + }); + on(d.scroller, "touchend", function (e) { + var touch = d.activeTouch; + if (touch && !eventInWidget(d, e) && touch.left != null && + !touch.moved && new Date - touch.start < 300) { + var pos = cm.coordsChar(d.activeTouch, "page"), range; + if (!touch.prev || farAway(touch, touch.prev)) // Single tap + { range = new Range(pos, pos); } + else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap + { range = cm.findWordAt(pos); } + else // Triple tap + { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); } + cm.setSelection(range.anchor, range.head); + cm.focus(); + e_preventDefault(e); + } + finishTouch(); + }); + on(d.scroller, "touchcancel", finishTouch); + + // Sync scrolling between fake scrollbars and real scrollable + // area, ensure viewport is updated when scrolling. + on(d.scroller, "scroll", function () { + if (d.scroller.clientHeight) { + updateScrollTop(cm, d.scroller.scrollTop); + setScrollLeft(cm, d.scroller.scrollLeft, true); + signal(cm, "scroll", cm); + } + }); + + // Listen to wheel events in order to try and update the viewport on time. + on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); }); + on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); }); + + // Prevent wrapper from ever scrolling + on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); + + d.dragFunctions = { + enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }}, + over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }}, + start: function (e) { return onDragStart(cm, e); }, + drop: operation(cm, onDrop), + leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }} + }; + + var inp = d.input.getField(); + on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); }); + on(inp, "keydown", operation(cm, onKeyDown)); + on(inp, "keypress", operation(cm, onKeyPress)); + on(inp, "focus", function (e) { return onFocus(cm, e); }); + on(inp, "blur", function (e) { return onBlur(cm, e); }); + } + + var initHooks = []; + CodeMirror.defineInitHook = function (f) { return initHooks.push(f); }; + + // Indent the given line. The how parameter can be "smart", + // "add"/null, "subtract", or "prev". When aggressive is false + // (typically set to true for forced single-line indents), empty + // lines are not indented, and places where the mode returns Pass + // are left alone. + function indentLine(cm, n, how, aggressive) { + var doc = cm.doc, state; + if (how == null) { how = "add"; } + if (how == "smart") { + // Fall back to "prev" when the mode doesn't have an indentation + // method. + if (!doc.mode.indent) { how = "prev"; } + else { state = getContextBefore(cm, n).state; } + } + + var tabSize = cm.options.tabSize; + var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); + if (line.stateAfter) { line.stateAfter = null; } + var curSpaceString = line.text.match(/^\s*/)[0], indentation; + if (!aggressive && !/\S/.test(line.text)) { + indentation = 0; + how = "not"; + } else if (how == "smart") { + indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); + if (indentation == Pass || indentation > 150) { + if (!aggressive) { return } + how = "prev"; + } + } + if (how == "prev") { + if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); } + else { indentation = 0; } + } else if (how == "add") { + indentation = curSpace + cm.options.indentUnit; + } else if (how == "subtract") { + indentation = curSpace - cm.options.indentUnit; + } else if (typeof how == "number") { + indentation = curSpace + how; + } + indentation = Math.max(0, indentation); + + var indentString = "", pos = 0; + if (cm.options.indentWithTabs) + { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} } + if (pos < indentation) { indentString += spaceStr(indentation - pos); } + + if (indentString != curSpaceString) { + replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); + line.stateAfter = null; + return true + } else { + // Ensure that, if the cursor was in the whitespace at the start + // of the line, it is moved to the end of that space. + for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) { + var range = doc.sel.ranges[i$1]; + if (range.head.line == n && range.head.ch < curSpaceString.length) { + var pos$1 = Pos(n, curSpaceString.length); + replaceOneSelection(doc, i$1, new Range(pos$1, pos$1)); + break + } + } + } + } + + // This will be set to a {lineWise: bool, text: [string]} object, so + // that, when pasting, we know what kind of selections the copied + // text was made out of. + var lastCopied = null; + + function setLastCopied(newLastCopied) { + lastCopied = newLastCopied; + } + + function applyTextInput(cm, inserted, deleted, sel, origin) { + var doc = cm.doc; + cm.display.shift = false; + if (!sel) { sel = doc.sel; } + + var recent = +new Date - 200; + var paste = origin == "paste" || cm.state.pasteIncoming > recent; + var textLines = splitLinesAuto(inserted), multiPaste = null; + // When pasting N lines into N selections, insert one line per selection + if (paste && sel.ranges.length > 1) { + if (lastCopied && lastCopied.text.join("\n") == inserted) { + if (sel.ranges.length % lastCopied.text.length == 0) { + multiPaste = []; + for (var i = 0; i < lastCopied.text.length; i++) + { multiPaste.push(doc.splitLines(lastCopied.text[i])); } + } + } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) { + multiPaste = map(textLines, function (l) { return [l]; }); + } + } + + var updateInput = cm.curOp.updateInput; + // Normal behavior is to insert the new text into every selection + for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) { + var range = sel.ranges[i$1]; + var from = range.from(), to = range.to(); + if (range.empty()) { + if (deleted && deleted > 0) // Handle deletion + { from = Pos(from.line, from.ch - deleted); } + else if (cm.state.overwrite && !paste) // Handle overwrite + { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); } + else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == textLines.join("\n")) + { from = to = Pos(from.line, 0); } + } + var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines, + origin: origin || (paste ? "paste" : cm.state.cutIncoming > recent ? "cut" : "+input")}; + makeChange(cm.doc, changeEvent); + signalLater(cm, "inputRead", cm, changeEvent); + } + if (inserted && !paste) + { triggerElectric(cm, inserted); } + + ensureCursorVisible(cm); + if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; } + cm.curOp.typing = true; + cm.state.pasteIncoming = cm.state.cutIncoming = -1; + } + + function handlePaste(e, cm) { + var pasted = e.clipboardData && e.clipboardData.getData("Text"); + if (pasted) { + e.preventDefault(); + if (!cm.isReadOnly() && !cm.options.disableInput && cm.hasFocus()) + { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }); } + return true + } + } + + function triggerElectric(cm, inserted) { + // When an 'electric' character is inserted, immediately trigger a reindent + if (!cm.options.electricChars || !cm.options.smartIndent) { return } + var sel = cm.doc.sel; + + for (var i = sel.ranges.length - 1; i >= 0; i--) { + var range = sel.ranges[i]; + if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue } + var mode = cm.getModeAt(range.head); + var indented = false; + if (mode.electricChars) { + for (var j = 0; j < mode.electricChars.length; j++) + { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { + indented = indentLine(cm, range.head.line, "smart"); + break + } } + } else if (mode.electricInput) { + if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch))) + { indented = indentLine(cm, range.head.line, "smart"); } + } + if (indented) { signalLater(cm, "electricInput", cm, range.head.line); } + } + } + + function copyableRanges(cm) { + var text = [], ranges = []; + for (var i = 0; i < cm.doc.sel.ranges.length; i++) { + var line = cm.doc.sel.ranges[i].head.line; + var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}; + ranges.push(lineRange); + text.push(cm.getRange(lineRange.anchor, lineRange.head)); + } + return {text: text, ranges: ranges} + } + + function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) { + field.setAttribute("autocorrect", autocorrect ? "on" : "off"); + field.setAttribute("autocapitalize", autocapitalize ? "on" : "off"); + field.setAttribute("spellcheck", !!spellcheck); + } + + function hiddenTextarea() { + var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none"); + var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); + // The textarea is kept positioned near the cursor to prevent the + // fact that it'll be scrolled into view on input from scrolling + // our fake cursor out of view. On webkit, when wrap=off, paste is + // very slow. So make the area wide instead. + if (webkit) { te.style.width = "1000px"; } + else { te.setAttribute("wrap", "off"); } + // If border: 0; -- iOS fails to open keyboard (issue #1287) + if (ios) { te.style.border = "1px solid black"; } + return div + } + + // The publicly visible API. Note that methodOp(f) means + // 'wrap f in an operation, performed on its `this` parameter'. + + // This is not the complete set of editor methods. Most of the + // methods defined on the Doc type are also injected into + // CodeMirror.prototype, for backwards compatibility and + // convenience. + + function addEditorMethods(CodeMirror) { + var optionHandlers = CodeMirror.optionHandlers; + + var helpers = CodeMirror.helpers = {}; + + CodeMirror.prototype = { + constructor: CodeMirror, + focus: function(){win(this).focus(); this.display.input.focus();}, + + setOption: function(option, value) { + var options = this.options, old = options[option]; + if (options[option] == value && option != "mode") { return } + options[option] = value; + if (optionHandlers.hasOwnProperty(option)) + { operation(this, optionHandlers[option])(this, value, old); } + signal(this, "optionChange", this, option); + }, + + getOption: function(option) {return this.options[option]}, + getDoc: function() {return this.doc}, + + addKeyMap: function(map, bottom) { + this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)); + }, + removeKeyMap: function(map) { + var maps = this.state.keyMaps; + for (var i = 0; i < maps.length; ++i) + { if (maps[i] == map || maps[i].name == map) { + maps.splice(i, 1); + return true + } } + }, + + addOverlay: methodOp(function(spec, options) { + var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); + if (mode.startState) { throw new Error("Overlays may not be stateful.") } + insertSorted(this.state.overlays, + {mode: mode, modeSpec: spec, opaque: options && options.opaque, + priority: (options && options.priority) || 0}, + function (overlay) { return overlay.priority; }); + this.state.modeGen++; + regChange(this); + }), + removeOverlay: methodOp(function(spec) { + var overlays = this.state.overlays; + for (var i = 0; i < overlays.length; ++i) { + var cur = overlays[i].modeSpec; + if (cur == spec || typeof spec == "string" && cur.name == spec) { + overlays.splice(i, 1); + this.state.modeGen++; + regChange(this); + return + } + } + }), + + indentLine: methodOp(function(n, dir, aggressive) { + if (typeof dir != "string" && typeof dir != "number") { + if (dir == null) { dir = this.options.smartIndent ? "smart" : "prev"; } + else { dir = dir ? "add" : "subtract"; } + } + if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); } + }), + indentSelection: methodOp(function(how) { + var ranges = this.doc.sel.ranges, end = -1; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + if (!range.empty()) { + var from = range.from(), to = range.to(); + var start = Math.max(end, from.line); + end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; + for (var j = start; j < end; ++j) + { indentLine(this, j, how); } + var newRanges = this.doc.sel.ranges; + if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) + { replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); } + } else if (range.head.line > end) { + indentLine(this, range.head.line, how, true); + end = range.head.line; + if (i == this.doc.sel.primIndex) { ensureCursorVisible(this); } + } + } + }), + + // Fetch the parser token for a given character. Useful for hacks + // that want to inspect the mode state (say, for completion). + getTokenAt: function(pos, precise) { + return takeToken(this, pos, precise) + }, + + getLineTokens: function(line, precise) { + return takeToken(this, Pos(line), precise, true) + }, + + getTokenTypeAt: function(pos) { + pos = clipPos(this.doc, pos); + var styles = getLineStyles(this, getLine(this.doc, pos.line)); + var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; + var type; + if (ch == 0) { type = styles[2]; } + else { for (;;) { + var mid = (before + after) >> 1; + if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; } + else if (styles[mid * 2 + 1] < ch) { before = mid + 1; } + else { type = styles[mid * 2 + 2]; break } + } } + var cut = type ? type.indexOf("overlay ") : -1; + return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1) + }, + + getModeAt: function(pos) { + var mode = this.doc.mode; + if (!mode.innerMode) { return mode } + return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode + }, + + getHelper: function(pos, type) { + return this.getHelpers(pos, type)[0] + }, + + getHelpers: function(pos, type) { + var found = []; + if (!helpers.hasOwnProperty(type)) { return found } + var help = helpers[type], mode = this.getModeAt(pos); + if (typeof mode[type] == "string") { + if (help[mode[type]]) { found.push(help[mode[type]]); } + } else if (mode[type]) { + for (var i = 0; i < mode[type].length; i++) { + var val = help[mode[type][i]]; + if (val) { found.push(val); } + } + } else if (mode.helperType && help[mode.helperType]) { + found.push(help[mode.helperType]); + } else if (help[mode.name]) { + found.push(help[mode.name]); + } + for (var i$1 = 0; i$1 < help._global.length; i$1++) { + var cur = help._global[i$1]; + if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) + { found.push(cur.val); } + } + return found + }, + + getStateAfter: function(line, precise) { + var doc = this.doc; + line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); + return getContextBefore(this, line + 1, precise).state + }, + + cursorCoords: function(start, mode) { + var pos, range = this.doc.sel.primary(); + if (start == null) { pos = range.head; } + else if (typeof start == "object") { pos = clipPos(this.doc, start); } + else { pos = start ? range.from() : range.to(); } + return cursorCoords(this, pos, mode || "page") + }, + + charCoords: function(pos, mode) { + return charCoords(this, clipPos(this.doc, pos), mode || "page") + }, + + coordsChar: function(coords, mode) { + coords = fromCoordSystem(this, coords, mode || "page"); + return coordsChar(this, coords.left, coords.top) + }, + + lineAtHeight: function(height, mode) { + height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; + return lineAtHeight(this.doc, height + this.display.viewOffset) + }, + heightAtLine: function(line, mode, includeWidgets) { + var end = false, lineObj; + if (typeof line == "number") { + var last = this.doc.first + this.doc.size - 1; + if (line < this.doc.first) { line = this.doc.first; } + else if (line > last) { line = last; end = true; } + lineObj = getLine(this.doc, line); + } else { + lineObj = line; + } + return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page", includeWidgets || end).top + + (end ? this.doc.height - heightAtLine(lineObj) : 0) + }, + + defaultTextHeight: function() { return textHeight(this.display) }, + defaultCharWidth: function() { return charWidth(this.display) }, + + getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}}, + + addWidget: function(pos, node, scroll, vert, horiz) { + var display = this.display; + pos = cursorCoords(this, clipPos(this.doc, pos)); + var top = pos.bottom, left = pos.left; + node.style.position = "absolute"; + node.setAttribute("cm-ignore-events", "true"); + this.display.input.setUneditable(node); + display.sizer.appendChild(node); + if (vert == "over") { + top = pos.top; + } else if (vert == "above" || vert == "near") { + var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), + hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); + // Default to positioning above (if specified and possible); otherwise default to positioning below + if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) + { top = pos.top - node.offsetHeight; } + else if (pos.bottom + node.offsetHeight <= vspace) + { top = pos.bottom; } + if (left + node.offsetWidth > hspace) + { left = hspace - node.offsetWidth; } + } + node.style.top = top + "px"; + node.style.left = node.style.right = ""; + if (horiz == "right") { + left = display.sizer.clientWidth - node.offsetWidth; + node.style.right = "0px"; + } else { + if (horiz == "left") { left = 0; } + else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; } + node.style.left = left + "px"; + } + if (scroll) + { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); } + }, + + triggerOnKeyDown: methodOp(onKeyDown), + triggerOnKeyPress: methodOp(onKeyPress), + triggerOnKeyUp: onKeyUp, + triggerOnMouseDown: methodOp(onMouseDown), + + execCommand: function(cmd) { + if (commands.hasOwnProperty(cmd)) + { return commands[cmd].call(null, this) } + }, + + triggerElectric: methodOp(function(text) { triggerElectric(this, text); }), + + findPosH: function(from, amount, unit, visually) { + var dir = 1; + if (amount < 0) { dir = -1; amount = -amount; } + var cur = clipPos(this.doc, from); + for (var i = 0; i < amount; ++i) { + cur = findPosH(this.doc, cur, dir, unit, visually); + if (cur.hitSide) { break } + } + return cur + }, + + moveH: methodOp(function(dir, unit) { + var this$1 = this; + + this.extendSelectionsBy(function (range) { + if (this$1.display.shift || this$1.doc.extend || range.empty()) + { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) } + else + { return dir < 0 ? range.from() : range.to() } + }, sel_move); + }), + + deleteH: methodOp(function(dir, unit) { + var sel = this.doc.sel, doc = this.doc; + if (sel.somethingSelected()) + { doc.replaceSelection("", null, "+delete"); } + else + { deleteNearSelection(this, function (range) { + var other = findPosH(doc, range.head, dir, unit, false); + return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other} + }); } + }), + + findPosV: function(from, amount, unit, goalColumn) { + var dir = 1, x = goalColumn; + if (amount < 0) { dir = -1; amount = -amount; } + var cur = clipPos(this.doc, from); + for (var i = 0; i < amount; ++i) { + var coords = cursorCoords(this, cur, "div"); + if (x == null) { x = coords.left; } + else { coords.left = x; } + cur = findPosV(this, coords, dir, unit); + if (cur.hitSide) { break } + } + return cur + }, + + moveV: methodOp(function(dir, unit) { + var this$1 = this; + + var doc = this.doc, goals = []; + var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected(); + doc.extendSelectionsBy(function (range) { + if (collapse) + { return dir < 0 ? range.from() : range.to() } + var headPos = cursorCoords(this$1, range.head, "div"); + if (range.goalColumn != null) { headPos.left = range.goalColumn; } + goals.push(headPos.left); + var pos = findPosV(this$1, headPos, dir, unit); + if (unit == "page" && range == doc.sel.primary()) + { addToScrollTop(this$1, charCoords(this$1, pos, "div").top - headPos.top); } + return pos + }, sel_move); + if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++) + { doc.sel.ranges[i].goalColumn = goals[i]; } } + }), + + // Find the word at the given position (as returned by coordsChar). + findWordAt: function(pos) { + var doc = this.doc, line = getLine(doc, pos.line).text; + var start = pos.ch, end = pos.ch; + if (line) { + var helper = this.getHelper(pos, "wordChars"); + if ((pos.sticky == "before" || end == line.length) && start) { --start; } else { ++end; } + var startChar = line.charAt(start); + var check = isWordChar(startChar, helper) + ? function (ch) { return isWordChar(ch, helper); } + : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); } + : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); }; + while (start > 0 && check(line.charAt(start - 1))) { --start; } + while (end < line.length && check(line.charAt(end))) { ++end; } + } + return new Range(Pos(pos.line, start), Pos(pos.line, end)) + }, + + toggleOverwrite: function(value) { + if (value != null && value == this.state.overwrite) { return } + if (this.state.overwrite = !this.state.overwrite) + { addClass(this.display.cursorDiv, "CodeMirror-overwrite"); } + else + { rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); } + + signal(this, "overwriteToggle", this, this.state.overwrite); + }, + hasFocus: function() { return this.display.input.getField() == activeElt(root(this)) }, + isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) }, + + scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }), + getScrollInfo: function() { + var scroller = this.display.scroller; + return {left: scroller.scrollLeft, top: scroller.scrollTop, + height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, + width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, + clientHeight: displayHeight(this), clientWidth: displayWidth(this)} + }, + + scrollIntoView: methodOp(function(range, margin) { + if (range == null) { + range = {from: this.doc.sel.primary().head, to: null}; + if (margin == null) { margin = this.options.cursorScrollMargin; } + } else if (typeof range == "number") { + range = {from: Pos(range, 0), to: null}; + } else if (range.from == null) { + range = {from: range, to: null}; + } + if (!range.to) { range.to = range.from; } + range.margin = margin || 0; + + if (range.from.line != null) { + scrollToRange(this, range); + } else { + scrollToCoordsRange(this, range.from, range.to, range.margin); + } + }), + + setSize: methodOp(function(width, height) { + var this$1 = this; + + var interpret = function (val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; }; + if (width != null) { this.display.wrapper.style.width = interpret(width); } + if (height != null) { this.display.wrapper.style.height = interpret(height); } + if (this.options.lineWrapping) { clearLineMeasurementCache(this); } + var lineNo = this.display.viewFrom; + this.doc.iter(lineNo, this.display.viewTo, function (line) { + if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) + { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, "widget"); break } } } + ++lineNo; + }); + this.curOp.forceUpdate = true; + signal(this, "refresh", this); + }), + + operation: function(f){return runInOp(this, f)}, + startOperation: function(){return startOperation(this)}, + endOperation: function(){return endOperation(this)}, + + refresh: methodOp(function() { + var oldHeight = this.display.cachedTextHeight; + regChange(this); + this.curOp.forceUpdate = true; + clearCaches(this); + scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop); + updateGutterSpace(this.display); + if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping) + { estimateLineHeights(this); } + signal(this, "refresh", this); + }), + + swapDoc: methodOp(function(doc) { + var old = this.doc; + old.cm = null; + // Cancel the current text selection if any (#5821) + if (this.state.selectingText) { this.state.selectingText(); } + attachDoc(this, doc); + clearCaches(this); + this.display.input.reset(); + scrollToCoords(this, doc.scrollLeft, doc.scrollTop); + this.curOp.forceScroll = true; + signalLater(this, "swapDoc", this, old); + return old + }), + + phrase: function(phraseText) { + var phrases = this.options.phrases; + return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText + }, + + getInputField: function(){return this.display.input.getField()}, + getWrapperElement: function(){return this.display.wrapper}, + getScrollerElement: function(){return this.display.scroller}, + getGutterElement: function(){return this.display.gutters} + }; + eventMixin(CodeMirror); + + CodeMirror.registerHelper = function(type, name, value) { + if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; } + helpers[type][name] = value; + }; + CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { + CodeMirror.registerHelper(type, name, value); + helpers[type]._global.push({pred: predicate, val: value}); + }; + } + + // Used for horizontal relative motion. Dir is -1 or 1 (left or + // right), unit can be "codepoint", "char", "column" (like char, but + // doesn't cross line boundaries), "word" (across next word), or + // "group" (to the start of next group of word or + // non-word-non-whitespace chars). The visually param controls + // whether, in right-to-left text, direction 1 means to move towards + // the next index in the string, or towards the character to the right + // of the current position. The resulting position will have a + // hitSide=true property if it reached the end of the document. + function findPosH(doc, pos, dir, unit, visually) { + var oldPos = pos; + var origDir = dir; + var lineObj = getLine(doc, pos.line); + var lineDir = visually && doc.direction == "rtl" ? -dir : dir; + function findNextLine() { + var l = pos.line + lineDir; + if (l < doc.first || l >= doc.first + doc.size) { return false } + pos = new Pos(l, pos.ch, pos.sticky); + return lineObj = getLine(doc, l) + } + function moveOnce(boundToLine) { + var next; + if (unit == "codepoint") { + var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1)); + if (isNaN(ch)) { + next = null; + } else { + var astral = dir > 0 ? ch >= 0xD800 && ch < 0xDC00 : ch >= 0xDC00 && ch < 0xDFFF; + next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir); + } + } else if (visually) { + next = moveVisually(doc.cm, lineObj, pos, dir); + } else { + next = moveLogically(lineObj, pos, dir); + } + if (next == null) { + if (!boundToLine && findNextLine()) + { pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); } + else + { return false } + } else { + pos = next; + } + return true + } + + if (unit == "char" || unit == "codepoint") { + moveOnce(); + } else if (unit == "column") { + moveOnce(true); + } else if (unit == "word" || unit == "group") { + var sawType = null, group = unit == "group"; + var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); + for (var first = true;; first = false) { + if (dir < 0 && !moveOnce(!first)) { break } + var cur = lineObj.text.charAt(pos.ch) || "\n"; + var type = isWordChar(cur, helper) ? "w" + : group && cur == "\n" ? "n" + : !group || /\s/.test(cur) ? null + : "p"; + if (group && !first && !type) { type = "s"; } + if (sawType && sawType != type) { + if (dir < 0) {dir = 1; moveOnce(); pos.sticky = "after";} + break + } + + if (type) { sawType = type; } + if (dir > 0 && !moveOnce(!first)) { break } + } + } + var result = skipAtomic(doc, pos, oldPos, origDir, true); + if (equalCursorPos(oldPos, result)) { result.hitSide = true; } + return result + } + + // For relative vertical movement. Dir may be -1 or 1. Unit can be + // "page" or "line". The resulting position will have a hitSide=true + // property if it reached the end of the document. + function findPosV(cm, pos, dir, unit) { + var doc = cm.doc, x = pos.left, y; + if (unit == "page") { + var pageSize = Math.min(cm.display.wrapper.clientHeight, win(cm).innerHeight || doc(cm).documentElement.clientHeight); + var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3); + y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount; + + } else if (unit == "line") { + y = dir > 0 ? pos.bottom + 3 : pos.top - 3; + } + var target; + for (;;) { + target = coordsChar(cm, x, y); + if (!target.outside) { break } + if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break } + y += dir * 5; + } + return target + } + + // CONTENTEDITABLE INPUT STYLE + + var ContentEditableInput = function(cm) { + this.cm = cm; + this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; + this.polling = new Delayed(); + this.composing = null; + this.gracePeriod = false; + this.readDOMTimeout = null; + }; + + ContentEditableInput.prototype.init = function (display) { + var this$1 = this; + + var input = this, cm = input.cm; + var div = input.div = display.lineDiv; + div.contentEditable = true; + disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize); + + function belongsToInput(e) { + for (var t = e.target; t; t = t.parentNode) { + if (t == div) { return true } + if (/\bCodeMirror-(?:line)?widget\b/.test(t.className)) { break } + } + return false + } + + on(div, "paste", function (e) { + if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } + // IE doesn't fire input events, so we schedule a read for the pasted content in this way + if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); } + }); + + on(div, "compositionstart", function (e) { + this$1.composing = {data: e.data, done: false}; + }); + on(div, "compositionupdate", function (e) { + if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; } + }); + on(div, "compositionend", function (e) { + if (this$1.composing) { + if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); } + this$1.composing.done = true; + } + }); + + on(div, "touchstart", function () { return input.forceCompositionEnd(); }); + + on(div, "input", function () { + if (!this$1.composing) { this$1.readFromDOMSoon(); } + }); + + function onCopyCut(e) { + if (!belongsToInput(e) || signalDOMEvent(cm, e)) { return } + if (cm.somethingSelected()) { + setLastCopied({lineWise: false, text: cm.getSelections()}); + if (e.type == "cut") { cm.replaceSelection("", null, "cut"); } + } else if (!cm.options.lineWiseCopyCut) { + return + } else { + var ranges = copyableRanges(cm); + setLastCopied({lineWise: true, text: ranges.text}); + if (e.type == "cut") { + cm.operation(function () { + cm.setSelections(ranges.ranges, 0, sel_dontScroll); + cm.replaceSelection("", null, "cut"); + }); + } + } + if (e.clipboardData) { + e.clipboardData.clearData(); + var content = lastCopied.text.join("\n"); + // iOS exposes the clipboard API, but seems to discard content inserted into it + e.clipboardData.setData("Text", content); + if (e.clipboardData.getData("Text") == content) { + e.preventDefault(); + return + } + } + // Old-fashioned briefly-focus-a-textarea hack + var kludge = hiddenTextarea(), te = kludge.firstChild; + disableBrowserMagic(te); + cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); + te.value = lastCopied.text.join("\n"); + var hadFocus = activeElt(rootNode(div)); + selectInput(te); + setTimeout(function () { + cm.display.lineSpace.removeChild(kludge); + hadFocus.focus(); + if (hadFocus == div) { input.showPrimarySelection(); } + }, 50); + } + on(div, "copy", onCopyCut); + on(div, "cut", onCopyCut); + }; + + ContentEditableInput.prototype.screenReaderLabelChanged = function (label) { + // Label for screenreaders, accessibility + if(label) { + this.div.setAttribute('aria-label', label); + } else { + this.div.removeAttribute('aria-label'); + } + }; + + ContentEditableInput.prototype.prepareSelection = function () { + var result = prepareSelection(this.cm, false); + result.focus = activeElt(rootNode(this.div)) == this.div; + return result + }; + + ContentEditableInput.prototype.showSelection = function (info, takeFocus) { + if (!info || !this.cm.display.view.length) { return } + if (info.focus || takeFocus) { this.showPrimarySelection(); } + this.showMultipleSelections(info); + }; + + ContentEditableInput.prototype.getSelection = function () { + return this.cm.display.wrapper.ownerDocument.getSelection() + }; + + ContentEditableInput.prototype.showPrimarySelection = function () { + var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary(); + var from = prim.from(), to = prim.to(); + + if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) { + sel.removeAllRanges(); + return + } + + var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); + var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset); + if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && + cmp(minPos(curAnchor, curFocus), from) == 0 && + cmp(maxPos(curAnchor, curFocus), to) == 0) + { return } + + var view = cm.display.view; + var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) || + {node: view[0].measure.map[2], offset: 0}; + var end = to.line < cm.display.viewTo && posToDOM(cm, to); + if (!end) { + var measure = view[view.length - 1].measure; + var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; + end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]}; + } + + if (!start || !end) { + sel.removeAllRanges(); + return + } + + var old = sel.rangeCount && sel.getRangeAt(0), rng; + try { rng = range(start.node, start.offset, end.offset, end.node); } + catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible + if (rng) { + if (!gecko && cm.state.focused) { + sel.collapse(start.node, start.offset); + if (!rng.collapsed) { + sel.removeAllRanges(); + sel.addRange(rng); + } + } else { + sel.removeAllRanges(); + sel.addRange(rng); + } + if (old && sel.anchorNode == null) { sel.addRange(old); } + else if (gecko) { this.startGracePeriod(); } + } + this.rememberSelection(); + }; + + ContentEditableInput.prototype.startGracePeriod = function () { + var this$1 = this; + + clearTimeout(this.gracePeriod); + this.gracePeriod = setTimeout(function () { + this$1.gracePeriod = false; + if (this$1.selectionChanged()) + { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); } + }, 20); + }; + + ContentEditableInput.prototype.showMultipleSelections = function (info) { + removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); + removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); + }; + + ContentEditableInput.prototype.rememberSelection = function () { + var sel = this.getSelection(); + this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset; + this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset; + }; + + ContentEditableInput.prototype.selectionInEditor = function () { + var sel = this.getSelection(); + if (!sel.rangeCount) { return false } + var node = sel.getRangeAt(0).commonAncestorContainer; + return contains(this.div, node) + }; + + ContentEditableInput.prototype.focus = function () { + if (this.cm.options.readOnly != "nocursor") { + if (!this.selectionInEditor() || activeElt(rootNode(this.div)) != this.div) + { this.showSelection(this.prepareSelection(), true); } + this.div.focus(); + } + }; + ContentEditableInput.prototype.blur = function () { this.div.blur(); }; + ContentEditableInput.prototype.getField = function () { return this.div }; + + ContentEditableInput.prototype.supportsTouch = function () { return true }; + + ContentEditableInput.prototype.receivedFocus = function () { + var this$1 = this; + + var input = this; + if (this.selectionInEditor()) + { setTimeout(function () { return this$1.pollSelection(); }, 20); } + else + { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); } + + function poll() { + if (input.cm.state.focused) { + input.pollSelection(); + input.polling.set(input.cm.options.pollInterval, poll); + } + } + this.polling.set(this.cm.options.pollInterval, poll); + }; + + ContentEditableInput.prototype.selectionChanged = function () { + var sel = this.getSelection(); + return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || + sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset + }; + + ContentEditableInput.prototype.pollSelection = function () { + if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return } + var sel = this.getSelection(), cm = this.cm; + // On Android Chrome (version 56, at least), backspacing into an + // uneditable block element will put the cursor in that element, + // and then, because it's not editable, hide the virtual keyboard. + // Because Android doesn't allow us to actually detect backspace + // presses in a sane way, this code checks for when that happens + // and simulates a backspace press in this case. + if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) { + this.cm.triggerOnKeyDown({type: "keydown", keyCode: 8, preventDefault: Math.abs}); + this.blur(); + this.focus(); + return + } + if (this.composing) { return } + this.rememberSelection(); + var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); + var head = domToPos(cm, sel.focusNode, sel.focusOffset); + if (anchor && head) { runInOp(cm, function () { + setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); + if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; } + }); } + }; + + ContentEditableInput.prototype.pollContent = function () { + if (this.readDOMTimeout != null) { + clearTimeout(this.readDOMTimeout); + this.readDOMTimeout = null; + } + + var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary(); + var from = sel.from(), to = sel.to(); + if (from.ch == 0 && from.line > cm.firstLine()) + { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); } + if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) + { to = Pos(to.line + 1, 0); } + if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false } + + var fromIndex, fromLine, fromNode; + if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { + fromLine = lineNo(display.view[0].line); + fromNode = display.view[0].node; + } else { + fromLine = lineNo(display.view[fromIndex].line); + fromNode = display.view[fromIndex - 1].node.nextSibling; + } + var toIndex = findViewIndex(cm, to.line); + var toLine, toNode; + if (toIndex == display.view.length - 1) { + toLine = display.viewTo - 1; + toNode = display.lineDiv.lastChild; + } else { + toLine = lineNo(display.view[toIndex + 1].line) - 1; + toNode = display.view[toIndex + 1].node.previousSibling; + } + + if (!fromNode) { return false } + var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); + var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); + while (newText.length > 1 && oldText.length > 1) { + if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; } + else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; } + else { break } + } + + var cutFront = 0, cutEnd = 0; + var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length); + while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) + { ++cutFront; } + var newBot = lst(newText), oldBot = lst(oldText); + var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), + oldBot.length - (oldText.length == 1 ? cutFront : 0)); + while (cutEnd < maxCutEnd && + newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) + { ++cutEnd; } + // Try to move start of change to start of selection if ambiguous + if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) { + while (cutFront && cutFront > from.ch && + newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { + cutFront--; + cutEnd++; + } + } + + newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, ""); + newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, ""); + + var chFrom = Pos(fromLine, cutFront); + var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); + if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { + replaceRange(cm.doc, newText, chFrom, chTo, "+input"); + return true + } + }; + + ContentEditableInput.prototype.ensurePolled = function () { + this.forceCompositionEnd(); + }; + ContentEditableInput.prototype.reset = function () { + this.forceCompositionEnd(); + }; + ContentEditableInput.prototype.forceCompositionEnd = function () { + if (!this.composing) { return } + clearTimeout(this.readDOMTimeout); + this.composing = null; + this.updateFromDOM(); + this.div.blur(); + this.div.focus(); + }; + ContentEditableInput.prototype.readFromDOMSoon = function () { + var this$1 = this; + + if (this.readDOMTimeout != null) { return } + this.readDOMTimeout = setTimeout(function () { + this$1.readDOMTimeout = null; + if (this$1.composing) { + if (this$1.composing.done) { this$1.composing = null; } + else { return } + } + this$1.updateFromDOM(); + }, 80); + }; + + ContentEditableInput.prototype.updateFromDOM = function () { + var this$1 = this; + + if (this.cm.isReadOnly() || !this.pollContent()) + { runInOp(this.cm, function () { return regChange(this$1.cm); }); } + }; + + ContentEditableInput.prototype.setUneditable = function (node) { + node.contentEditable = "false"; + }; + + ContentEditableInput.prototype.onKeyPress = function (e) { + if (e.charCode == 0 || this.composing) { return } + e.preventDefault(); + if (!this.cm.isReadOnly()) + { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); } + }; + + ContentEditableInput.prototype.readOnlyChanged = function (val) { + this.div.contentEditable = String(val != "nocursor"); + }; + + ContentEditableInput.prototype.onContextMenu = function () {}; + ContentEditableInput.prototype.resetPosition = function () {}; + + ContentEditableInput.prototype.needsContentAttribute = true; + + function posToDOM(cm, pos) { + var view = findViewForLine(cm, pos.line); + if (!view || view.hidden) { return null } + var line = getLine(cm.doc, pos.line); + var info = mapFromLineView(view, line, pos.line); + + var order = getOrder(line, cm.doc.direction), side = "left"; + if (order) { + var partPos = getBidiPartAt(order, pos.ch); + side = partPos % 2 ? "right" : "left"; + } + var result = nodeAndOffsetInLineMap(info.map, pos.ch, side); + result.offset = result.collapse == "right" ? result.end : result.start; + return result + } + + function isInGutter(node) { + for (var scan = node; scan; scan = scan.parentNode) + { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } } + return false + } + + function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos } + + function domTextBetween(cm, from, to, fromLine, toLine) { + var text = "", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false; + function recognizeMarker(id) { return function (marker) { return marker.id == id; } } + function close() { + if (closing) { + text += lineSep; + if (extraLinebreak) { text += lineSep; } + closing = extraLinebreak = false; + } + } + function addText(str) { + if (str) { + close(); + text += str; + } + } + function walk(node) { + if (node.nodeType == 1) { + var cmText = node.getAttribute("cm-text"); + if (cmText) { + addText(cmText); + return + } + var markerID = node.getAttribute("cm-marker"), range; + if (markerID) { + var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); + if (found.length && (range = found[0].find(0))) + { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); } + return + } + if (node.getAttribute("contenteditable") == "false") { return } + var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName); + if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return } + + if (isBlock) { close(); } + for (var i = 0; i < node.childNodes.length; i++) + { walk(node.childNodes[i]); } + + if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; } + if (isBlock) { closing = true; } + } else if (node.nodeType == 3) { + addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " ")); + } + } + for (;;) { + walk(from); + if (from == to) { break } + from = from.nextSibling; + extraLinebreak = false; + } + return text + } + + function domToPos(cm, node, offset) { + var lineNode; + if (node == cm.display.lineDiv) { + lineNode = cm.display.lineDiv.childNodes[offset]; + if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) } + node = null; offset = 0; + } else { + for (lineNode = node;; lineNode = lineNode.parentNode) { + if (!lineNode || lineNode == cm.display.lineDiv) { return null } + if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break } + } + } + for (var i = 0; i < cm.display.view.length; i++) { + var lineView = cm.display.view[i]; + if (lineView.node == lineNode) + { return locateNodeInLineView(lineView, node, offset) } + } + } + + function locateNodeInLineView(lineView, node, offset) { + var wrapper = lineView.text.firstChild, bad = false; + if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) } + if (node == wrapper) { + bad = true; + node = wrapper.childNodes[offset]; + offset = 0; + if (!node) { + var line = lineView.rest ? lst(lineView.rest) : lineView.line; + return badPos(Pos(lineNo(line), line.text.length), bad) + } + } + + var textNode = node.nodeType == 3 ? node : null, topNode = node; + if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { + textNode = node.firstChild; + if (offset) { offset = textNode.nodeValue.length; } + } + while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; } + var measure = lineView.measure, maps = measure.maps; + + function find(textNode, topNode, offset) { + for (var i = -1; i < (maps ? maps.length : 0); i++) { + var map = i < 0 ? measure.map : maps[i]; + for (var j = 0; j < map.length; j += 3) { + var curNode = map[j + 2]; + if (curNode == textNode || curNode == topNode) { + var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]); + var ch = map[j] + offset; + if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)]; } + return Pos(line, ch) + } + } + } + } + var found = find(textNode, topNode, offset); + if (found) { return badPos(found, bad) } + + // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems + for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { + found = find(after, after.firstChild, 0); + if (found) + { return badPos(Pos(found.line, found.ch - dist), bad) } + else + { dist += after.textContent.length; } + } + for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) { + found = find(before, before.firstChild, -1); + if (found) + { return badPos(Pos(found.line, found.ch + dist$1), bad) } + else + { dist$1 += before.textContent.length; } + } + } + + // TEXTAREA INPUT STYLE + + var TextareaInput = function(cm) { + this.cm = cm; + // See input.poll and input.reset + this.prevInput = ""; + + // Flag that indicates whether we expect input to appear real soon + // now (after some event like 'keypress' or 'input') and are + // polling intensively. + this.pollingFast = false; + // Self-resetting timeout for the poller + this.polling = new Delayed(); + // Used to work around IE issue with selection being forgotten when focus moves away from textarea + this.hasSelection = false; + this.composing = null; + this.resetting = false; + }; + + TextareaInput.prototype.init = function (display) { + var this$1 = this; + + var input = this, cm = this.cm; + this.createField(display); + var te = this.textarea; + + display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild); + + // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) + if (ios) { te.style.width = "0px"; } + + on(te, "input", function () { + if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; } + input.poll(); + }); + + on(te, "paste", function (e) { + if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } + + cm.state.pasteIncoming = +new Date; + input.fastPoll(); + }); + + function prepareCopyCut(e) { + if (signalDOMEvent(cm, e)) { return } + if (cm.somethingSelected()) { + setLastCopied({lineWise: false, text: cm.getSelections()}); + } else if (!cm.options.lineWiseCopyCut) { + return + } else { + var ranges = copyableRanges(cm); + setLastCopied({lineWise: true, text: ranges.text}); + if (e.type == "cut") { + cm.setSelections(ranges.ranges, null, sel_dontScroll); + } else { + input.prevInput = ""; + te.value = ranges.text.join("\n"); + selectInput(te); + } + } + if (e.type == "cut") { cm.state.cutIncoming = +new Date; } + } + on(te, "cut", prepareCopyCut); + on(te, "copy", prepareCopyCut); + + on(display.scroller, "paste", function (e) { + if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return } + if (!te.dispatchEvent) { + cm.state.pasteIncoming = +new Date; + input.focus(); + return + } + + // Pass the `paste` event to the textarea so it's handled by its event listener. + var event = new Event("paste"); + event.clipboardData = e.clipboardData; + te.dispatchEvent(event); + }); + + // Prevent normal selection in the editor (we handle our own) + on(display.lineSpace, "selectstart", function (e) { + if (!eventInWidget(display, e)) { e_preventDefault(e); } + }); + + on(te, "compositionstart", function () { + var start = cm.getCursor("from"); + if (input.composing) { input.composing.range.clear(); } + input.composing = { + start: start, + range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"}) + }; + }); + on(te, "compositionend", function () { + if (input.composing) { + input.poll(); + input.composing.range.clear(); + input.composing = null; + } + }); + }; + + TextareaInput.prototype.createField = function (_display) { + // Wraps and hides input textarea + this.wrapper = hiddenTextarea(); + // The semihidden textarea that is focused when the editor is + // focused, and receives input. + this.textarea = this.wrapper.firstChild; + var opts = this.cm.options; + disableBrowserMagic(this.textarea, opts.spellcheck, opts.autocorrect, opts.autocapitalize); + }; + + TextareaInput.prototype.screenReaderLabelChanged = function (label) { + // Label for screenreaders, accessibility + if(label) { + this.textarea.setAttribute('aria-label', label); + } else { + this.textarea.removeAttribute('aria-label'); + } + }; + + TextareaInput.prototype.prepareSelection = function () { + // Redraw the selection and/or cursor + var cm = this.cm, display = cm.display, doc = cm.doc; + var result = prepareSelection(cm); + + // Move the hidden textarea near the cursor to prevent scrolling artifacts + if (cm.options.moveInputWithCursor) { + var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); + var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); + result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, + headPos.top + lineOff.top - wrapOff.top)); + result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, + headPos.left + lineOff.left - wrapOff.left)); + } + + return result + }; + + TextareaInput.prototype.showSelection = function (drawn) { + var cm = this.cm, display = cm.display; + removeChildrenAndAdd(display.cursorDiv, drawn.cursors); + removeChildrenAndAdd(display.selectionDiv, drawn.selection); + if (drawn.teTop != null) { + this.wrapper.style.top = drawn.teTop + "px"; + this.wrapper.style.left = drawn.teLeft + "px"; + } + }; + + // Reset the input to correspond to the selection (or to be empty, + // when not typing and nothing is selected) + TextareaInput.prototype.reset = function (typing) { + if (this.contextMenuPending || this.composing && typing) { return } + var cm = this.cm; + this.resetting = true; + if (cm.somethingSelected()) { + this.prevInput = ""; + var content = cm.getSelection(); + this.textarea.value = content; + if (cm.state.focused) { selectInput(this.textarea); } + if (ie && ie_version >= 9) { this.hasSelection = content; } + } else if (!typing) { + this.prevInput = this.textarea.value = ""; + if (ie && ie_version >= 9) { this.hasSelection = null; } + } + this.resetting = false; + }; + + TextareaInput.prototype.getField = function () { return this.textarea }; + + TextareaInput.prototype.supportsTouch = function () { return false }; + + TextareaInput.prototype.focus = function () { + if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt(rootNode(this.textarea)) != this.textarea)) { + try { this.textarea.focus(); } + catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM + } + }; + + TextareaInput.prototype.blur = function () { this.textarea.blur(); }; + + TextareaInput.prototype.resetPosition = function () { + this.wrapper.style.top = this.wrapper.style.left = 0; + }; + + TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); }; + + // Poll for input changes, using the normal rate of polling. This + // runs as long as the editor is focused. + TextareaInput.prototype.slowPoll = function () { + var this$1 = this; + + if (this.pollingFast) { return } + this.polling.set(this.cm.options.pollInterval, function () { + this$1.poll(); + if (this$1.cm.state.focused) { this$1.slowPoll(); } + }); + }; + + // When an event has just come in that is likely to add or change + // something in the input textarea, we poll faster, to ensure that + // the change appears on the screen quickly. + TextareaInput.prototype.fastPoll = function () { + var missed = false, input = this; + input.pollingFast = true; + function p() { + var changed = input.poll(); + if (!changed && !missed) {missed = true; input.polling.set(60, p);} + else {input.pollingFast = false; input.slowPoll();} + } + input.polling.set(20, p); + }; + + // Read input from the textarea, and update the document to match. + // When something is selected, it is present in the textarea, and + // selected (unless it is huge, in which case a placeholder is + // used). When nothing is selected, the cursor sits after previously + // seen text (can be empty), which is stored in prevInput (we must + // not reset the textarea when typing, because that breaks IME). + TextareaInput.prototype.poll = function () { + var this$1 = this; + + var cm = this.cm, input = this.textarea, prevInput = this.prevInput; + // Since this is called a *lot*, try to bail out as cheaply as + // possible when it is clear that nothing happened. hasSelection + // will be the case when there is a lot of text in the textarea, + // in which case reading its value would be expensive. + if (this.contextMenuPending || this.resetting || !cm.state.focused || + (hasSelection(input) && !prevInput && !this.composing) || + cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) + { return false } + + var text = input.value; + // If nothing changed, bail. + if (text == prevInput && !cm.somethingSelected()) { return false } + // Work around nonsensical selection resetting in IE9/10, and + // inexplicable appearance of private area unicode characters on + // some key combos in Mac (#2689). + if (ie && ie_version >= 9 && this.hasSelection === text || + mac && /[\uf700-\uf7ff]/.test(text)) { + cm.display.input.reset(); + return false + } + + if (cm.doc.sel == cm.display.selForContextMenu) { + var first = text.charCodeAt(0); + if (first == 0x200b && !prevInput) { prevInput = "\u200b"; } + if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") } + } + // Find the part of the input that is actually new + var same = 0, l = Math.min(prevInput.length, text.length); + while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; } + + runInOp(cm, function () { + applyTextInput(cm, text.slice(same), prevInput.length - same, + null, this$1.composing ? "*compose" : null); + + // Don't leave long text in the textarea, since it makes further polling slow + if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = ""; } + else { this$1.prevInput = text; } + + if (this$1.composing) { + this$1.composing.range.clear(); + this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"), + {className: "CodeMirror-composing"}); + } + }); + return true + }; + + TextareaInput.prototype.ensurePolled = function () { + if (this.pollingFast && this.poll()) { this.pollingFast = false; } + }; + + TextareaInput.prototype.onKeyPress = function () { + if (ie && ie_version >= 9) { this.hasSelection = null; } + this.fastPoll(); + }; + + TextareaInput.prototype.onContextMenu = function (e) { + var input = this, cm = input.cm, display = cm.display, te = input.textarea; + if (input.contextMenuPending) { input.contextMenuPending(); } + var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; + if (!pos || presto) { return } // Opera is difficult. + + // Reset the current text selection only if the click is done outside of the selection + // and 'resetSelectionOnContextMenu' option is true. + var reset = cm.options.resetSelectionOnContextMenu; + if (reset && cm.doc.sel.contains(pos) == -1) + { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); } + + var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText; + var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect(); + input.wrapper.style.cssText = "position: static"; + te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; + var oldScrollY; + if (webkit) { oldScrollY = te.ownerDocument.defaultView.scrollY; } // Work around Chrome issue (#2712) + display.input.focus(); + if (webkit) { te.ownerDocument.defaultView.scrollTo(null, oldScrollY); } + display.input.reset(); + // Adds "Select all" to context menu in FF + if (!cm.somethingSelected()) { te.value = input.prevInput = " "; } + input.contextMenuPending = rehide; + display.selForContextMenu = cm.doc.sel; + clearTimeout(display.detectingSelectAll); + + // Select-all will be greyed out if there's nothing to select, so + // this adds a zero-width space so that we can later check whether + // it got selected. + function prepareSelectAllHack() { + if (te.selectionStart != null) { + var selected = cm.somethingSelected(); + var extval = "\u200b" + (selected ? te.value : ""); + te.value = "\u21da"; // Used to catch context-menu undo + te.value = extval; + input.prevInput = selected ? "" : "\u200b"; + te.selectionStart = 1; te.selectionEnd = extval.length; + // Re-set this, in case some other handler touched the + // selection in the meantime. + display.selForContextMenu = cm.doc.sel; + } + } + function rehide() { + if (input.contextMenuPending != rehide) { return } + input.contextMenuPending = false; + input.wrapper.style.cssText = oldWrapperCSS; + te.style.cssText = oldCSS; + if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); } + + // Try to detect the user choosing select-all + if (te.selectionStart != null) { + if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); } + var i = 0, poll = function () { + if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && + te.selectionEnd > 0 && input.prevInput == "\u200b") { + operation(cm, selectAll)(cm); + } else if (i++ < 10) { + display.detectingSelectAll = setTimeout(poll, 500); + } else { + display.selForContextMenu = null; + display.input.reset(); + } + }; + display.detectingSelectAll = setTimeout(poll, 200); + } + } + + if (ie && ie_version >= 9) { prepareSelectAllHack(); } + if (captureRightClick) { + e_stop(e); + var mouseup = function () { + off(window, "mouseup", mouseup); + setTimeout(rehide, 20); + }; + on(window, "mouseup", mouseup); + } else { + setTimeout(rehide, 50); + } + }; + + TextareaInput.prototype.readOnlyChanged = function (val) { + if (!val) { this.reset(); } + this.textarea.disabled = val == "nocursor"; + this.textarea.readOnly = !!val; + }; + + TextareaInput.prototype.setUneditable = function () {}; + + TextareaInput.prototype.needsContentAttribute = false; + + function fromTextArea(textarea, options) { + options = options ? copyObj(options) : {}; + options.value = textarea.value; + if (!options.tabindex && textarea.tabIndex) + { options.tabindex = textarea.tabIndex; } + if (!options.placeholder && textarea.placeholder) + { options.placeholder = textarea.placeholder; } + // Set autofocus to true if this textarea is focused, or if it has + // autofocus and no other element is focused. + if (options.autofocus == null) { + var hasFocus = activeElt(rootNode(textarea)); + options.autofocus = hasFocus == textarea || + textarea.getAttribute("autofocus") != null && hasFocus == document.body; + } + + function save() {textarea.value = cm.getValue();} + + var realSubmit; + if (textarea.form) { + on(textarea.form, "submit", save); + // Deplorable hack to make the submit method do the right thing. + if (!options.leaveSubmitMethodAlone) { + var form = textarea.form; + realSubmit = form.submit; + try { + var wrappedSubmit = form.submit = function () { + save(); + form.submit = realSubmit; + form.submit(); + form.submit = wrappedSubmit; + }; + } catch(e) {} + } + } + + options.finishInit = function (cm) { + cm.save = save; + cm.getTextArea = function () { return textarea; }; + cm.toTextArea = function () { + cm.toTextArea = isNaN; // Prevent this from being ran twice + save(); + textarea.parentNode.removeChild(cm.getWrapperElement()); + textarea.style.display = ""; + if (textarea.form) { + off(textarea.form, "submit", save); + if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == "function") + { textarea.form.submit = realSubmit; } + } + }; + }; + + textarea.style.display = "none"; + var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); }, + options); + return cm + } + + function addLegacyProps(CodeMirror) { + CodeMirror.off = off; + CodeMirror.on = on; + CodeMirror.wheelEventPixels = wheelEventPixels; + CodeMirror.Doc = Doc; + CodeMirror.splitLines = splitLinesAuto; + CodeMirror.countColumn = countColumn; + CodeMirror.findColumn = findColumn; + CodeMirror.isWordChar = isWordCharBasic; + CodeMirror.Pass = Pass; + CodeMirror.signal = signal; + CodeMirror.Line = Line; + CodeMirror.changeEnd = changeEnd; + CodeMirror.scrollbarModel = scrollbarModel; + CodeMirror.Pos = Pos; + CodeMirror.cmpPos = cmp; + CodeMirror.modes = modes; + CodeMirror.mimeModes = mimeModes; + CodeMirror.resolveMode = resolveMode; + CodeMirror.getMode = getMode; + CodeMirror.modeExtensions = modeExtensions; + CodeMirror.extendMode = extendMode; + CodeMirror.copyState = copyState; + CodeMirror.startState = startState; + CodeMirror.innerMode = innerMode; + CodeMirror.commands = commands; + CodeMirror.keyMap = keyMap; + CodeMirror.keyName = keyName; + CodeMirror.isModifierKey = isModifierKey; + CodeMirror.lookupKey = lookupKey; + CodeMirror.normalizeKeyMap = normalizeKeyMap; + CodeMirror.StringStream = StringStream; + CodeMirror.SharedTextMarker = SharedTextMarker; + CodeMirror.TextMarker = TextMarker; + CodeMirror.LineWidget = LineWidget; + CodeMirror.e_preventDefault = e_preventDefault; + CodeMirror.e_stopPropagation = e_stopPropagation; + CodeMirror.e_stop = e_stop; + CodeMirror.addClass = addClass; + CodeMirror.contains = contains; + CodeMirror.rmClass = rmClass; + CodeMirror.keyNames = keyNames; + } + + // EDITOR CONSTRUCTOR + + defineOptions(CodeMirror); + + addEditorMethods(CodeMirror); + + // Set up methods on CodeMirror's prototype to redirect to the editor's document. + var dontDelegate = "iter insert remove copy getEditor constructor".split(" "); + for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) + { CodeMirror.prototype[prop] = (function(method) { + return function() {return method.apply(this.doc, arguments)} + })(Doc.prototype[prop]); } } + + eventMixin(Doc); + CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput}; + + // Extra arguments are stored as the mode's dependencies, which is + // used by (legacy) mechanisms like loadmode.js to automatically + // load a mode. (Preferred mechanism is the require/define calls.) + CodeMirror.defineMode = function(name/*, mode, …*/) { + if (!CodeMirror.defaults.mode && name != "null") { CodeMirror.defaults.mode = name; } + defineMode.apply(this, arguments); + }; + + CodeMirror.defineMIME = defineMIME; + + // Minimal default mode. + CodeMirror.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); }); + CodeMirror.defineMIME("text/plain", "null"); + + // EXTENSIONS + + CodeMirror.defineExtension = function (name, func) { + CodeMirror.prototype[name] = func; + }; + CodeMirror.defineDocExtension = function (name, func) { + Doc.prototype[name] = func; + }; + + CodeMirror.fromTextArea = fromTextArea; + + addLegacyProps(CodeMirror); + + CodeMirror.version = "5.65.18"; + + return CodeMirror; + +}))); diff --git a/dingus/codemirror/python.js b/dingus/codemirror/python.js new file mode 100644 index 0000000..3946cee --- /dev/null +++ b/dingus/codemirror/python.js @@ -0,0 +1,402 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/5/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b"); + } + + var wordOperators = wordRegexp(["and", "or", "not", "is"]); + var commonKeywords = ["as", "assert", "break", "class", "continue", + "def", "del", "elif", "else", "except", "finally", + "for", "from", "global", "if", "import", + "lambda", "pass", "raise", "return", + "try", "while", "with", "yield", "in", "False", "True"]; + var commonBuiltins = ["abs", "all", "any", "bin", "bool", "bytearray", "callable", "chr", + "classmethod", "compile", "complex", "delattr", "dict", "dir", "divmod", + "enumerate", "eval", "filter", "float", "format", "frozenset", + "getattr", "globals", "hasattr", "hash", "help", "hex", "id", + "input", "int", "isinstance", "issubclass", "iter", "len", + "list", "locals", "map", "max", "memoryview", "min", "next", + "object", "oct", "open", "ord", "pow", "property", "range", + "repr", "reversed", "round", "set", "setattr", "slice", + "sorted", "staticmethod", "str", "sum", "super", "tuple", + "type", "vars", "zip", "__import__", "NotImplemented", + "Ellipsis", "__debug__"]; + CodeMirror.registerHelper("hintWords", "python", commonKeywords.concat(commonBuiltins).concat(["exec", "print"])); + + function top(state) { + return state.scopes[state.scopes.length - 1]; + } + + CodeMirror.defineMode("python", function(conf, parserConf) { + var ERRORCLASS = "error"; + + var delimiters = parserConf.delimiters || parserConf.singleDelimiters || /^[\(\)\[\]\{\}@,:`=;\.\\]/; + // (Backwards-compatibility with old, cumbersome config system) + var operators = [parserConf.singleOperators, parserConf.doubleOperators, parserConf.doubleDelimiters, parserConf.tripleDelimiters, + parserConf.operators || /^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/] + for (var i = 0; i < operators.length; i++) if (!operators[i]) operators.splice(i--, 1) + + var hangingIndent = parserConf.hangingIndent || conf.indentUnit; + + var myKeywords = commonKeywords, myBuiltins = commonBuiltins; + if (parserConf.extra_keywords != undefined) + myKeywords = myKeywords.concat(parserConf.extra_keywords); + + if (parserConf.extra_builtins != undefined) + myBuiltins = myBuiltins.concat(parserConf.extra_builtins); + + var py3 = !(parserConf.version && Number(parserConf.version) < 3) + if (py3) { + // since http://legacy.python.org/dev/peps/pep-0465/ @ is also an operator + var identifiers = parserConf.identifiers|| /^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*/; + myKeywords = myKeywords.concat(["nonlocal", "None", "aiter", "anext", "async", "await", "breakpoint", "match", "case"]); + myBuiltins = myBuiltins.concat(["ascii", "bytes", "exec", "print"]); + var stringPrefixes = new RegExp("^(([rbuf]|(br)|(rb)|(fr)|(rf))?('{3}|\"{3}|['\"]))", "i"); + } else { + var identifiers = parserConf.identifiers|| /^[_A-Za-z][_A-Za-z0-9]*/; + myKeywords = myKeywords.concat(["exec", "print"]); + myBuiltins = myBuiltins.concat(["apply", "basestring", "buffer", "cmp", "coerce", "execfile", + "file", "intern", "long", "raw_input", "reduce", "reload", + "unichr", "unicode", "xrange", "None"]); + var stringPrefixes = new RegExp("^(([rubf]|(ur)|(br))?('{3}|\"{3}|['\"]))", "i"); + } + var keywords = wordRegexp(myKeywords); + var builtins = wordRegexp(myBuiltins); + + // tokenizers + function tokenBase(stream, state) { + var sol = stream.sol() && state.lastToken != "\\" + if (sol) state.indent = stream.indentation() + // Handle scope changes + if (sol && top(state).type == "py") { + var scopeOffset = top(state).offset; + if (stream.eatSpace()) { + var lineOffset = stream.indentation(); + if (lineOffset > scopeOffset) + pushPyScope(state); + else if (lineOffset < scopeOffset && dedent(stream, state) && stream.peek() != "#") + state.errorToken = true; + return null; + } else { + var style = tokenBaseInner(stream, state); + if (scopeOffset > 0 && dedent(stream, state)) + style += " " + ERRORCLASS; + return style; + } + } + return tokenBaseInner(stream, state); + } + + function tokenBaseInner(stream, state, inFormat) { + if (stream.eatSpace()) return null; + + // Handle Comments + if (!inFormat && stream.match(/^#.*/)) return "comment"; + + // Handle Number Literals + if (stream.match(/^[0-9\.]/, false)) { + var floatLiteral = false; + // Floats + if (stream.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i)) { floatLiteral = true; } + if (stream.match(/^[\d_]+\.\d*/)) { floatLiteral = true; } + if (stream.match(/^\.\d+/)) { floatLiteral = true; } + if (floatLiteral) { + // Float literals may be "imaginary" + stream.eat(/J/i); + return "number"; + } + // Integers + var intLiteral = false; + // Hex + if (stream.match(/^0x[0-9a-f_]+/i)) intLiteral = true; + // Binary + if (stream.match(/^0b[01_]+/i)) intLiteral = true; + // Octal + if (stream.match(/^0o[0-7_]+/i)) intLiteral = true; + // Decimal + if (stream.match(/^[1-9][\d_]*(e[\+\-]?[\d_]+)?/)) { + // Decimal literals may be "imaginary" + stream.eat(/J/i); + // TODO - Can you have imaginary longs? + intLiteral = true; + } + // Zero by itself with no other piece of number. + if (stream.match(/^0(?![\dx])/i)) intLiteral = true; + if (intLiteral) { + // Integer literals may be "long" + stream.eat(/L/i); + return "number"; + } + } + + // Handle Strings + if (stream.match(stringPrefixes)) { + var isFmtString = stream.current().toLowerCase().indexOf('f') !== -1; + if (!isFmtString) { + state.tokenize = tokenStringFactory(stream.current(), state.tokenize); + return state.tokenize(stream, state); + } else { + state.tokenize = formatStringFactory(stream.current(), state.tokenize); + return state.tokenize(stream, state); + } + } + + for (var i = 0; i < operators.length; i++) + if (stream.match(operators[i])) return "operator" + + if (stream.match(delimiters)) return "punctuation"; + + if (state.lastToken == "." && stream.match(identifiers)) + return "property"; + + if (stream.match(keywords) || stream.match(wordOperators)) + return "keyword"; + + if (stream.match(builtins)) + return "builtin"; + + if (stream.match(/^(self|cls)\b/)) + return "variable-2"; + + if (stream.match(identifiers)) { + if (state.lastToken == "def" || state.lastToken == "class") + return "def"; + return "variable"; + } + + // Handle non-detected items + stream.next(); + return inFormat ? null :ERRORCLASS; + } + + function formatStringFactory(delimiter, tokenOuter) { + while ("rubf".indexOf(delimiter.charAt(0).toLowerCase()) >= 0) + delimiter = delimiter.substr(1); + + var singleline = delimiter.length == 1; + var OUTCLASS = "string"; + + function tokenNestedExpr(depth) { + return function(stream, state) { + var inner = tokenBaseInner(stream, state, true) + if (inner == "punctuation") { + if (stream.current() == "{") { + state.tokenize = tokenNestedExpr(depth + 1) + } else if (stream.current() == "}") { + if (depth > 1) state.tokenize = tokenNestedExpr(depth - 1) + else state.tokenize = tokenString + } + } + return inner + } + } + + function tokenString(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^'"\{\}\\]/); + if (stream.eat("\\")) { + stream.next(); + if (singleline && stream.eol()) + return OUTCLASS; + } else if (stream.match(delimiter)) { + state.tokenize = tokenOuter; + return OUTCLASS; + } else if (stream.match('{{')) { + // ignore {{ in f-str + return OUTCLASS; + } else if (stream.match('{', false)) { + // switch to nested mode + state.tokenize = tokenNestedExpr(0) + if (stream.current()) return OUTCLASS; + else return state.tokenize(stream, state) + } else if (stream.match('}}')) { + return OUTCLASS; + } else if (stream.match('}')) { + // single } in f-string is an error + return ERRORCLASS; + } else { + stream.eat(/['"]/); + } + } + if (singleline) { + if (parserConf.singleLineStringErrors) + return ERRORCLASS; + else + state.tokenize = tokenOuter; + } + return OUTCLASS; + } + tokenString.isString = true; + return tokenString; + } + + function tokenStringFactory(delimiter, tokenOuter) { + while ("rubf".indexOf(delimiter.charAt(0).toLowerCase()) >= 0) + delimiter = delimiter.substr(1); + + var singleline = delimiter.length == 1; + var OUTCLASS = "string"; + + function tokenString(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^'"\\]/); + if (stream.eat("\\")) { + stream.next(); + if (singleline && stream.eol()) + return OUTCLASS; + } else if (stream.match(delimiter)) { + state.tokenize = tokenOuter; + return OUTCLASS; + } else { + stream.eat(/['"]/); + } + } + if (singleline) { + if (parserConf.singleLineStringErrors) + return ERRORCLASS; + else + state.tokenize = tokenOuter; + } + return OUTCLASS; + } + tokenString.isString = true; + return tokenString; + } + + function pushPyScope(state) { + while (top(state).type != "py") state.scopes.pop() + state.scopes.push({offset: top(state).offset + conf.indentUnit, + type: "py", + align: null}) + } + + function pushBracketScope(stream, state, type) { + var align = stream.match(/^[\s\[\{\(]*(?:#|$)/, false) ? null : stream.column() + 1 + state.scopes.push({offset: state.indent + hangingIndent, + type: type, + align: align}) + } + + function dedent(stream, state) { + var indented = stream.indentation(); + while (state.scopes.length > 1 && top(state).offset > indented) { + if (top(state).type != "py") return true; + state.scopes.pop(); + } + return top(state).offset != indented; + } + + function tokenLexer(stream, state) { + if (stream.sol()) { + state.beginningOfLine = true; + state.dedent = false; + } + + var style = state.tokenize(stream, state); + var current = stream.current(); + + // Handle decorators + if (state.beginningOfLine && current == "@") + return stream.match(identifiers, false) ? "meta" : py3 ? "operator" : ERRORCLASS; + + if (/\S/.test(current)) state.beginningOfLine = false; + + if ((style == "variable" || style == "builtin") + && state.lastToken == "meta") + style = "meta"; + + // Handle scope changes. + if (current == "pass" || current == "return") + state.dedent = true; + + if (current == "lambda") state.lambda = true; + if (current == ":" && !state.lambda && top(state).type == "py" && stream.match(/^\s*(?:#|$)/, false)) + pushPyScope(state); + + if (current.length == 1 && !/string|comment/.test(style)) { + var delimiter_index = "[({".indexOf(current); + if (delimiter_index != -1) + pushBracketScope(stream, state, "])}".slice(delimiter_index, delimiter_index+1)); + + delimiter_index = "])}".indexOf(current); + if (delimiter_index != -1) { + if (top(state).type == current) state.indent = state.scopes.pop().offset - hangingIndent + else return ERRORCLASS; + } + } + if (state.dedent && stream.eol() && top(state).type == "py" && state.scopes.length > 1) + state.scopes.pop(); + + return style; + } + + var external = { + startState: function(basecolumn) { + return { + tokenize: tokenBase, + scopes: [{offset: basecolumn || 0, type: "py", align: null}], + indent: basecolumn || 0, + lastToken: null, + lambda: false, + dedent: 0 + }; + }, + + token: function(stream, state) { + var addErr = state.errorToken; + if (addErr) state.errorToken = false; + var style = tokenLexer(stream, state); + + if (style && style != "comment") + state.lastToken = (style == "keyword" || style == "punctuation") ? stream.current() : style; + if (style == "punctuation") style = null; + + if (stream.eol() && state.lambda) + state.lambda = false; + return addErr ? style + " " + ERRORCLASS : style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase) + return state.tokenize.isString ? CodeMirror.Pass : 0; + + var scope = top(state) + var closing = scope.type == textAfter.charAt(0) || + scope.type == "py" && !state.dedent && /^(else:|elif |except |finally:)/.test(textAfter) + if (scope.align != null) + return scope.align - (closing ? 1 : 0) + else + return scope.offset - (closing ? hangingIndent : 0) + }, + + electricInput: /^\s*([\}\]\)]|else:|elif |except |finally:)$/, + closeBrackets: {triples: "'\""}, + lineComment: "#", + fold: "indent" + }; + return external; + }); + + CodeMirror.defineMIME("text/x-python", "python"); + + var words = function(str) { return str.split(" "); }; + + CodeMirror.defineMIME("text/x-cython", { + name: "python", + extra_keywords: words("by cdef cimport cpdef ctypedef enum except "+ + "extern gil include nogil property public "+ + "readonly struct union DEF IF ELIF ELSE") + }); + +}); diff --git a/dingus/dingus.html b/dingus/dingus.html new file mode 100644 index 0000000..80cd5f2 --- /dev/null +++ b/dingus/dingus.html @@ -0,0 +1,33 @@ + + + + Dingus + + + + + + + + + + + +
+
+ +
+ +
+ +
+ +
+ +
+
+ + + + diff --git a/dingus/dingus.js b/dingus/dingus.js new file mode 100644 index 0000000..1326274 --- /dev/null +++ b/dingus/dingus.js @@ -0,0 +1,60 @@ +let pending_grammar = null; +let next_grammar = null; + +function submit_grammar(code) { + if (pending_grammar) { + console.log("Grammar still pending, parking it"); + next_grammar = code; + } else { + pending_grammar = code; + worker.postMessage({kind: "grammar_module", data: code}); + console.log("Grammar posted"); + } +} + +const worker = new Worker('worker.js'); +worker.onmessage = (e) => { + const message = e.data; + if (message.kind === "grammar_status") { + if ((message.status === "ok") || (message.status === "error")) { + pending_grammar = null; + if (next_grammar) { + pending_grammar = next_grammar; + next_grammar = null; + + worker.postMessage({kind: "grammar_module", data: pending_grammar}); + console.log("Posted another grammar"); + } + } + } +}; + + +function setup_editors() { + const grammar_editor = CodeMirror.fromTextArea( + document.getElementById("grammar"), + { + lineNumbers: true, + mode: "python", + value: "from parser import Grammar\n\nclass MyGrammar(Grammar):\n pass\n", + }, + ); + + let change_timer_id = null; + grammar_editor.doc.on("change", () => { + clearTimeout(change_timer_id); + change_timer_id = setTimeout(() => { + change_timer_id = null; + submit_grammar(grammar_editor.doc.getValue()); + }, 100); + }); + + const input_editor = CodeMirror.fromTextArea( + document.getElementById("input"), + { + lineNumbers: true, + }, + ); +} + +setup_editors(); diff --git a/dingus/pyodide/ffi.d.ts b/dingus/pyodide/ffi.d.ts new file mode 100644 index 0000000..9964b06 --- /dev/null +++ b/dingus/pyodide/ffi.d.ts @@ -0,0 +1,1115 @@ +// Generated by dts-bundle-generator v8.1.2 + +export type TypedArray = Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array; +interface PyProxy { + [x: string]: any; +} +/** + * A :js:class:`~pyodide.ffi.PyProxy` is an object that allows idiomatic use of a Python object from + * JavaScript. See :ref:`type-translations-pyproxy`. + */ +declare class PyProxy { + /** @private */ + $$flags: number; + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; + /** + * @hideconstructor + */ + constructor(); + /** @hidden */ + get [Symbol.toStringTag](): string; + /** + * The name of the type of the object. + * + * Usually the value is ``"module.name"`` but for builtins or + * interpreter-defined types it is just ``"name"``. As pseudocode this is: + * + * .. code-block:: python + * + * ty = type(x) + * if ty.__module__ == 'builtins' or ty.__module__ == "__main__": + * return ty.__name__ + * else: + * ty.__module__ + "." + ty.__name__ + * + */ + get type(): string; + /** + * Returns `str(o)` (unless `pyproxyToStringRepr: true` was passed to + * :js:func:`~globalThis.loadPyodide` in which case it will return `repr(o)`) + */ + toString(): string; + /** + * Destroy the :js:class:`~pyodide.ffi.PyProxy`. This will release the memory. Any further attempt + * to use the object will raise an error. + * + * In a browser supporting :js:data:`FinalizationRegistry`, Pyodide will + * automatically destroy the :js:class:`~pyodide.ffi.PyProxy` when it is garbage collected, however + * there is no guarantee that the finalizer will be run in a timely manner so + * it is better to destroy the proxy explicitly. + * + * @param options + * @param options.message The error message to print if use is attempted after + * destroying. Defaults to "Object has already been destroyed". + * + */ + destroy(options?: { + message?: string; + destroyRoundtrip?: boolean; + }): void; + /** + * Make a new :js:class:`~pyodide.ffi.PyProxy` pointing to the same Python object. + * Useful if the :js:class:`~pyodide.ffi.PyProxy` is destroyed somewhere else. + */ + copy(): PyProxy; + /** + * Converts the :js:class:`~pyodide.ffi.PyProxy` into a JavaScript object as best as possible. By + * default does a deep conversion, if a shallow conversion is desired, you can + * use ``proxy.toJs({depth : 1})``. See :ref:`Explicit Conversion of PyProxy + * ` for more info. + * @param options + * @return The JavaScript object resulting from the conversion. + */ + toJs({ depth, pyproxies, create_pyproxies, dict_converter, default_converter, }?: { + /** How many layers deep to perform the conversion. Defaults to infinite */ + depth?: number; + /** + * If provided, :js:meth:`toJs` will store all PyProxies created in this + * list. This allows you to easily destroy all the PyProxies by iterating + * the list without having to recurse over the generated structure. The most + * common use case is to create a new empty list, pass the list as + * ``pyproxies``, and then later iterate over ``pyproxies`` to destroy all of + * created proxies. + */ + pyproxies?: PyProxy[]; + /** + * If false, :js:meth:`toJs` will throw a + * :py:exc:`~pyodide.ffi.ConversionError` rather than producing a + * :js:class:`~pyodide.ffi.PyProxy`. + */ + create_pyproxies?: boolean; + /** + * A function to be called on an iterable of pairs ``[key, value]``. Convert + * this iterable of pairs to the desired output. For instance, + * :js:func:`Object.fromEntries` would convert the dict to an object, + * :js:func:`Array.from` converts it to an :js:class:`Array` of pairs, and + * ``(it) => new Map(it)`` converts it to a :js:class:`Map` (which is the + * default behavior). + */ + dict_converter?: (array: Iterable<[ + key: string, + value: any + ]>) => any; + /** + * Optional argument to convert objects with no default conversion. See the + * documentation of :meth:`~pyodide.ffi.to_js`. + */ + default_converter?: (obj: PyProxy, convert: (obj: PyProxy) => any, cacheConversion: (obj: PyProxy, result: any) => void) => any; + }): any; +} +/** + * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object has a :meth:`~object.__len__` + * method. + */ +declare class PyProxyWithLength extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +interface PyProxyWithLength extends PyLengthMethods { +} +declare class PyLengthMethods { + /** + * The length of the object. + */ + get length(): number; +} +/** + * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object has a + * :meth:`~object.__getitem__` method. + */ +declare class PyProxyWithGet extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +interface PyProxyWithGet extends PyGetItemMethods { +} +declare class PyGetItemMethods { + /** + * This translates to the Python code ``obj[key]``. + * + * @param key The key to look up. + * @returns The corresponding value. + */ + get(key: any): any; + /** + * Returns the object treated as a json adaptor. + * + * With a JsonAdaptor: + * 1. property access / modification / deletion is implemented with + * :meth:`~object.__getitem__`, :meth:`~object.__setitem__`, and + * :meth:`~object.__delitem__` respectively. + * 2. If an attribute is accessed and the result implements + * :meth:`~object.__getitem__` then the result will also be a json + * adaptor. + * + * For instance, ``JSON.stringify(proxy.asJsJson())`` acts like an + * inverse to Python's :py:func:`json.loads`. + */ + asJsJson(): PyProxy & {}; +} +/** + * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object has a + * :meth:`~object.__setitem__` or :meth:`~object.__delitem__` method. + */ +declare class PyProxyWithSet extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +interface PyProxyWithSet extends PySetItemMethods { +} +declare class PySetItemMethods { + /** + * This translates to the Python code ``obj[key] = value``. + * + * @param key The key to set. + * @param value The value to set it to. + */ + set(key: any, value: any): void; + /** + * This translates to the Python code ``del obj[key]``. + * + * @param key The key to delete. + */ + delete(key: any): void; +} +/** + * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object has a + * :meth:`~object.__contains__` method. + */ +declare class PyProxyWithHas extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +interface PyProxyWithHas extends PyContainsMethods { +} +declare class PyContainsMethods { + /** + * This translates to the Python code ``key in obj``. + * + * @param key The key to check for. + * @returns Is ``key`` present? + */ + has(key: any): boolean; +} +/** + * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object is :std:term:`iterable` + * (i.e., it has an :meth:`~object.__iter__` method). + */ +declare class PyIterable extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +interface PyIterable extends PyIterableMethods { +} +declare class PyIterableMethods { + /** + * This translates to the Python code ``iter(obj)``. Return an iterator + * associated to the proxy. See the documentation for + * :js:data:`Symbol.iterator`. + * + * This will be used implicitly by ``for(let x of proxy){}``. + */ + [Symbol.iterator](): Iterator; +} +/** + * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object is :std:term:`asynchronous + * iterable` (i.e., has an :meth:`~object.__aiter__` method). + */ +declare class PyAsyncIterable extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +interface PyAsyncIterable extends PyAsyncIterableMethods { +} +declare class PyAsyncIterableMethods { + /** + * This translates to the Python code ``aiter(obj)``. Return an async iterator + * associated to the proxy. See the documentation for :js:data:`Symbol.asyncIterator`. + * + * This will be used implicitly by ``for(await let x of proxy){}``. + */ + [Symbol.asyncIterator](): AsyncIterator; +} +/** + * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object is an :term:`iterator` + * (i.e., has a :meth:`~generator.send` or :meth:`~iterator.__next__` method). + */ +declare class PyIterator extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +interface PyIterator extends PyIteratorMethods { +} +declare class PyIteratorMethods { + /** @private */ + [Symbol.iterator](): this; + /** + * This translates to the Python code ``next(obj)``. Returns the next value of + * the generator. See the documentation for :js:meth:`Generator.next` The + * argument will be sent to the Python generator. + * + * This will be used implicitly by ``for(let x of proxy){}``. + * + * @param arg The value to send to the generator. The value will be assigned + * as a result of a yield expression. + * @returns An Object with two properties: ``done`` and ``value``. When the + * generator yields ``some_value``, ``next`` returns ``{done : false, value : + * some_value}``. When the generator raises a :py:exc:`StopIteration` + * exception, ``next`` returns ``{done : true, value : result_value}``. + */ + next(arg?: any): IteratorResult; +} +/** + * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object is a :std:term:`generator` + * (i.e., it is an instance of :py:class:`~collections.abc.Generator`). + */ +declare class PyGenerator extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +interface PyGenerator extends PyGeneratorMethods { +} +declare class PyGeneratorMethods { + /** + * Throws an exception into the Generator. + * + * See the documentation for :js:meth:`Generator.throw`. + * + * @param exc Error The error to throw into the generator. Must be an + * instanceof ``Error``. + * @returns An Object with two properties: ``done`` and ``value``. When the + * generator yields ``some_value``, ``return`` returns ``{done : false, value + * : some_value}``. When the generator raises a + * ``StopIteration(result_value)`` exception, ``return`` returns ``{done : + * true, value : result_value}``. + */ + throw(exc: any): IteratorResult; + /** + * Throws a :py:exc:`GeneratorExit` into the generator and if the + * :py:exc:`GeneratorExit` is not caught returns the argument value ``{done: + * true, value: v}``. If the generator catches the :py:exc:`GeneratorExit` and + * returns or yields another value the next value of the generator this is + * returned in the normal way. If it throws some error other than + * :py:exc:`GeneratorExit` or :py:exc:`StopIteration`, that error is propagated. See + * the documentation for :js:meth:`Generator.return`. + * + * @param v The value to return from the generator. + * @returns An Object with two properties: ``done`` and ``value``. When the + * generator yields ``some_value``, ``return`` returns ``{done : false, value + * : some_value}``. When the generator raises a + * ``StopIteration(result_value)`` exception, ``return`` returns ``{done : + * true, value : result_value}``. + */ + return(v: any): IteratorResult; +} +/** + * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object is an + * :std:term:`asynchronous iterator` + */ +declare class PyAsyncIterator extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +interface PyAsyncIterator extends PyAsyncIteratorMethods { +} +declare class PyAsyncIteratorMethods { + /** @private */ + [Symbol.asyncIterator](): this; + /** + * This translates to the Python code ``anext(obj)``. Returns the next value + * of the asynchronous iterator. The argument will be sent to the Python + * iterator (if it's a generator for instance). + * + * This will be used implicitly by ``for(let x of proxy){}``. + * + * @param arg The value to send to a generator. The value will be assigned as + * a result of a yield expression. + * @returns An Object with two properties: ``done`` and ``value``. When the + * iterator yields ``some_value``, ``next`` returns ``{done : false, value : + * some_value}``. When the giterator is done, ``next`` returns + * ``{done : true }``. + */ + next(arg?: any): Promise>; +} +/** + * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object is an + * :std:term:`asynchronous generator` (i.e., it is an instance of + * :py:class:`~collections.abc.AsyncGenerator`) + */ +declare class PyAsyncGenerator extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +interface PyAsyncGenerator extends PyAsyncGeneratorMethods { +} +declare class PyAsyncGeneratorMethods { + /** + * Throws an exception into the Generator. + * + * See the documentation for :js:meth:`AsyncGenerator.throw`. + * + * @param exc Error The error to throw into the generator. Must be an + * instanceof ``Error``. + * @returns An Object with two properties: ``done`` and ``value``. When the + * generator yields ``some_value``, ``return`` returns ``{done : false, value + * : some_value}``. When the generator raises a + * ``StopIteration(result_value)`` exception, ``return`` returns ``{done : + * true, value : result_value}``. + */ + throw(exc: any): Promise>; + /** + * Throws a :py:exc:`GeneratorExit` into the generator and if the + * :py:exc:`GeneratorExit` is not caught returns the argument value ``{done: + * true, value: v}``. If the generator catches the :py:exc:`GeneratorExit` and + * returns or yields another value the next value of the generator this is + * returned in the normal way. If it throws some error other than + * :py:exc:`GeneratorExit` or :py:exc:`StopAsyncIteration`, that error is + * propagated. See the documentation for :js:meth:`AsyncGenerator.throw` + * + * @param v The value to return from the generator. + * @returns An Object with two properties: ``done`` and ``value``. When the + * generator yields ``some_value``, ``return`` returns ``{done : false, value + * : some_value}``. When the generator raises a :py:exc:`StopAsyncIteration` + * exception, ``return`` returns ``{done : true, value : result_value}``. + */ + return(v: any): Promise>; +} +/** + * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object is an + * :py:class:`~collections.abc.Sequence` (i.e., a :py:class:`list`) + */ +declare class PySequence extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +interface PySequence extends PySequenceMethods { +} +declare class PySequenceMethods { + /** @hidden */ + get [Symbol.isConcatSpreadable](): boolean; + /** + * See :js:meth:`Array.join`. The :js:meth:`Array.join` method creates and + * returns a new string by concatenating all of the elements in the + * :py:class:`~collections.abc.Sequence`. + * + * @param separator A string to separate each pair of adjacent elements of the + * Sequence. + * + * @returns A string with all Sequence elements joined. + */ + join(separator?: string): string; + /** + * See :js:meth:`Array.slice`. The :js:meth:`Array.slice` method returns a + * shallow copy of a portion of a :py:class:`~collections.abc.Sequence` into a + * new array object selected from ``start`` to ``stop`` (`stop` not included) + * @param start Zero-based index at which to start extraction. Negative index + * counts back from the end of the Sequence. + * @param stop Zero-based index at which to end extraction. Negative index + * counts back from the end of the Sequence. + * @returns A new array containing the extracted elements. + */ + slice(start?: number, stop?: number): any; + /** + * See :js:meth:`Array.lastIndexOf`. Returns the last index at which a given + * element can be found in the Sequence, or -1 if it is not present. + * @param elt Element to locate in the Sequence. + * @param fromIndex Zero-based index at which to start searching backwards, + * converted to an integer. Negative index counts back from the end of the + * Sequence. + * @returns The last index of the element in the Sequence; -1 if not found. + */ + lastIndexOf(elt: any, fromIndex?: number): number; + /** + * See :js:meth:`Array.indexOf`. Returns the first index at which a given + * element can be found in the Sequence, or -1 if it is not present. + * @param elt Element to locate in the Sequence. + * @param fromIndex Zero-based index at which to start searching, converted to + * an integer. Negative index counts back from the end of the Sequence. + * @returns The first index of the element in the Sequence; -1 if not found. + */ + indexOf(elt: any, fromIndex?: number): number; + /** + * See :js:meth:`Array.forEach`. Executes a provided function once for each + * ``Sequence`` element. + * @param callbackfn A function to execute for each element in the ``Sequence``. Its + * return value is discarded. + * @param thisArg A value to use as ``this`` when executing ``callbackFn``. + */ + forEach(callbackfn: (elt: any) => void, thisArg?: any): void; + /** + * See :js:meth:`Array.map`. Creates a new array populated with the results of + * calling a provided function on every element in the calling ``Sequence``. + * @param callbackfn A function to execute for each element in the ``Sequence``. Its + * return value is added as a single element in the new array. + * @param thisArg A value to use as ``this`` when executing ``callbackFn``. + */ + map(callbackfn: (elt: any, index: number, array: any) => U, thisArg?: any): U[]; + /** + * See :js:meth:`Array.filter`. Creates a shallow copy of a portion of a given + * ``Sequence``, filtered down to just the elements from the given array that pass + * the test implemented by the provided function. + * @param predicate A function to execute for each element in the array. It + * should return a truthy value to keep the element in the resulting array, + * and a falsy value otherwise. + * @param thisArg A value to use as ``this`` when executing ``predicate``. + */ + filter(predicate: (elt: any, index: number, array: any) => boolean, thisArg?: any): any[]; + /** + * See :js:meth:`Array.some`. Tests whether at least one element in the + * ``Sequence`` passes the test implemented by the provided function. + * @param predicate A function to execute for each element in the + * ``Sequence``. It should return a truthy value to indicate the element + * passes the test, and a falsy value otherwise. + * @param thisArg A value to use as ``this`` when executing ``predicate``. + */ + some(predicate: (value: any, index: number, array: any[]) => unknown, thisArg?: any): boolean; + /** + * See :js:meth:`Array.every`. Tests whether every element in the ``Sequence`` + * passes the test implemented by the provided function. + * @param predicate A function to execute for each element in the + * ``Sequence``. It should return a truthy value to indicate the element + * passes the test, and a falsy value otherwise. + * @param thisArg A value to use as ``this`` when executing ``predicate``. + */ + every(predicate: (value: any, index: number, array: any[]) => unknown, thisArg?: any): boolean; + /** + * See :js:meth:`Array.reduce`. Executes a user-supplied "reducer" callback + * function on each element of the Sequence, in order, passing in the return + * value from the calculation on the preceding element. The final result of + * running the reducer across all elements of the Sequence is a single value. + * @param callbackfn A function to execute for each element in the ``Sequence``. Its + * return value is discarded. + */ + reduce(callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any) => any, initialValue?: any): any; + /** + * See :js:meth:`Array.reduceRight`. Applies a function against an accumulator + * and each value of the Sequence (from right to left) to reduce it to a + * single value. + * @param callbackfn A function to execute for each element in the Sequence. + * Its return value is discarded. + */ + reduceRight(callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any) => any, initialValue: any): any; + /** + * See :js:meth:`Array.at`. Takes an integer value and returns the item at + * that index. + * @param index Zero-based index of the Sequence element to be returned, + * converted to an integer. Negative index counts back from the end of the + * Sequence. + * @returns The element in the Sequence matching the given index. + */ + at(index: number): any; + /** + * The :js:meth:`Array.concat` method is used to merge two or more arrays. + * This method does not change the existing arrays, but instead returns a new + * array. + * @param rest Arrays and/or values to concatenate into a new array. + * @returns A new Array instance. + */ + concat(...rest: ConcatArray[]): any[]; + /** + * The :js:meth:`Array.includes` method determines whether a Sequence + * includes a certain value among its entries, returning true or false as + * appropriate. + * @param elt + * @returns + */ + includes(elt: any): any; + /** + * The :js:meth:`Array.entries` method returns a new iterator object that + * contains the key/value pairs for each index in the ``Sequence``. + * @returns A new iterator object. + */ + entries(): IterableIterator<[ + number, + any + ]>; + /** + * The :js:meth:`Array.keys` method returns a new iterator object that + * contains the keys for each index in the ``Sequence``. + * @returns A new iterator object. + */ + keys(): IterableIterator; + /** + * The :js:meth:`Array.values` method returns a new iterator object that + * contains the values for each index in the ``Sequence``. + * @returns A new iterator object. + */ + values(): IterableIterator; + /** + * The :js:meth:`Array.find` method returns the first element in the provided + * array that satisfies the provided testing function. + * @param predicate A function to execute for each element in the + * ``Sequence``. It should return a truthy value to indicate a matching + * element has been found, and a falsy value otherwise. + * @param thisArg A value to use as ``this`` when executing ``predicate``. + * @returns The first element in the ``Sequence`` that satisfies the provided + * testing function. + */ + find(predicate: (value: any, index: number, obj: any[]) => any, thisArg?: any): any; + /** + * The :js:meth:`Array.findIndex` method returns the index of the first + * element in the provided array that satisfies the provided testing function. + * @param predicate A function to execute for each element in the + * ``Sequence``. It should return a truthy value to indicate a matching + * element has been found, and a falsy value otherwise. + * @param thisArg A value to use as ``this`` when executing ``predicate``. + * @returns The index of the first element in the ``Sequence`` that satisfies + * the provided testing function. + */ + findIndex(predicate: (value: any, index: number, obj: any[]) => any, thisArg?: any): number; + toJSON(this: any): unknown[]; + /** + * Returns the object treated as a json adaptor. + * + * With a JsonAdaptor: + * 1. property access / modification / deletion is implemented with + * :meth:`~object.__getitem__`, :meth:`~object.__setitem__`, and + * :meth:`~object.__delitem__` respectively. + * 2. If an attribute is accessed and the result implements + * :meth:`~object.__getitem__` then the result will also be a json + * adaptor. + * + * For instance, ``JSON.stringify(proxy.asJsJson())`` acts like an + * inverse to Python's :py:func:`json.loads`. + */ + asJsJson(): PyProxy & {}; +} +/** + * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object is an + * :py:class:`~collections.abc.MutableSequence` (i.e., a :py:class:`list`) + */ +declare class PyMutableSequence extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +interface PyMutableSequence extends PyMutableSequenceMethods { +} +declare class PyMutableSequenceMethods { + /** + * The :js:meth:`Array.reverse` method reverses a :js:class:`PyMutableSequence` in + * place. + * @returns A reference to the same :js:class:`PyMutableSequence` + */ + reverse(): PyMutableSequence; + /** + * The :js:meth:`Array.sort` method sorts the elements of a + * :js:class:`PyMutableSequence` in place. + * @param compareFn A function that defines the sort order. + * @returns A reference to the same :js:class:`PyMutableSequence` + */ + sort(compareFn?: (a: any, b: any) => number): PyMutableSequence; + /** + * The :js:meth:`Array.splice` method changes the contents of a + * :js:class:`PyMutableSequence` by removing or replacing existing elements and/or + * adding new elements in place. + * @param start Zero-based index at which to start changing the + * :js:class:`PyMutableSequence`. + * @param deleteCount An integer indicating the number of elements in the + * :js:class:`PyMutableSequence` to remove from ``start``. + * @param items The elements to add to the :js:class:`PyMutableSequence`, beginning from + * ``start``. + * @returns An array containing the deleted elements. + */ + splice(start: number, deleteCount?: number, ...items: any[]): any[]; + /** + * The :js:meth:`Array.push` method adds the specified elements to the end of + * a :js:class:`PyMutableSequence`. + * @param elts The element(s) to add to the end of the :js:class:`PyMutableSequence`. + * @returns The new length property of the object upon which the method was + * called. + */ + push(...elts: any[]): any; + /** + * The :js:meth:`Array.pop` method removes the last element from a + * :js:class:`PyMutableSequence`. + * @returns The removed element from the :js:class:`PyMutableSequence`; undefined if the + * :js:class:`PyMutableSequence` is empty. + */ + pop(): any; + /** + * The :js:meth:`Array.shift` method removes the first element from a + * :js:class:`PyMutableSequence`. + * @returns The removed element from the :js:class:`PyMutableSequence`; undefined if the + * :js:class:`PyMutableSequence` is empty. + */ + shift(): any; + /** + * The :js:meth:`Array.unshift` method adds the specified elements to the + * beginning of a :js:class:`PyMutableSequence`. + * @param elts The elements to add to the front of the :js:class:`PyMutableSequence`. + * @returns The new length of the :js:class:`PyMutableSequence`. + */ + unshift(...elts: any[]): any; + /** + * The :js:meth:`Array.copyWithin` method shallow copies part of a + * :js:class:`PyMutableSequence` to another location in the same :js:class:`PyMutableSequence` + * without modifying its length. + * @param target Zero-based index at which to copy the sequence to. + * @param start Zero-based index at which to start copying elements from. + * @param end Zero-based index at which to end copying elements from. + * @returns The modified :js:class:`PyMutableSequence`. + */ + copyWithin(target: number, start?: number, end?: number): any; + /** + * The :js:meth:`Array.fill` method changes all elements in an array to a + * static value, from a start index to an end index. + * @param value Value to fill the array with. + * @param start Zero-based index at which to start filling. Default 0. + * @param end Zero-based index at which to end filling. Default + * ``list.length``. + * @returns + */ + fill(value: any, start?: number, end?: number): any; +} +/** + * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object is :ref:`awaitable + * ` (i.e., has an :meth:`~object.__await__` method). + */ +declare class PyAwaitable extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +interface PyAwaitable extends Promise { +} +/** + * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object is + * :std:term:`callable` (i.e., has an :py:meth:`~object.__call__` method). + */ +declare class PyCallable extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyCallable; +} +interface PyCallable extends PyCallableMethods { + (...args: any[]): any; +} +declare class PyCallableMethods { + /** + * The ``apply()`` method calls the specified function with a given this + * value, and arguments provided as an array (or an array-like object). Like + * :js:meth:`Function.apply`. + * + * @param thisArg The ``this`` argument. Has no effect unless the + * :js:class:`~pyodide.ffi.PyCallable` has :js:meth:`captureThis` set. If + * :js:meth:`captureThis` is set, it will be passed as the first argument to + * the Python function. + * @param jsargs The array of arguments + * @returns The result from the function call. + */ + apply(thisArg: any, jsargs: any): any; + /** + * Calls the function with a given this value and arguments provided + * individually. See :js:meth:`Function.call`. + * + * @param thisArg The ``this`` argument. Has no effect unless the + * :js:class:`~pyodide.ffi.PyCallable` has :js:meth:`captureThis` set. If + * :js:meth:`captureThis` is set, it will be passed as the first argument to + * the Python function. + * @param jsargs The arguments + * @returns The result from the function call. + */ + call(thisArg: any, ...jsargs: any): any; + /** + * Call the Python function. The first parameter controls various parameters + * that change the way the call is performed. + * + * @param options + * @param options.kwargs If true, the last argument is treated as a collection + * of keyword arguments. + * @param options.promising If true, the call is made with stack switching + * enabled. Not needed if the callee is an async + * Python function. + * @param options.relaxed If true, extra arguments are ignored instead of + * raising a :py:exc:`TypeError`. + * @param jsargs Arguments to the Python function. + * @returns + */ + callWithOptions({ relaxed, kwargs, promising, }: { + relaxed?: boolean; + kwargs?: boolean; + promising?: boolean; + }, ...jsargs: any): any; + /** + * Call the function with keyword arguments. The last argument must be an + * object with the keyword arguments. + */ + callKwargs(...jsargs: any): any; + /** + * Call the function in a "relaxed" manner. Any extra arguments will be + * ignored. This matches the behavior of JavaScript functions more accurately. + * + * Any extra arguments will be ignored. This matches the behavior of + * JavaScript functions more accurately. Missing arguments are **NOT** filled + * with `None`. If too few arguments are passed, this will still raise a + * TypeError. + * + * This uses :py:func:`pyodide.code.relaxed_call`. + */ + callRelaxed(...jsargs: any): any; + /** + * Call the function with keyword arguments in a "relaxed" manner. The last + * argument must be an object with the keyword arguments. Any extra arguments + * will be ignored. This matches the behavior of JavaScript functions more + * accurately. + * + * Missing arguments are **NOT** filled with ``None``. If too few arguments are + * passed, this will still raise a :py:exc:`TypeError`. Also, if the same argument is + * passed as both a keyword argument and a positional argument, it will raise + * an error. + * + * This uses :py:func:`pyodide.code.relaxed_call`. + */ + callKwargsRelaxed(...jsargs: any): any; + /** + * Call the function with stack switching enabled. The last argument must be + * an object with the keyword arguments. Functions called this way can use + * :py:meth:`~pyodide.ffi.run_sync` to block until an + * :py:class:`~collections.abc.Awaitable` is resolved. Only works in runtimes + * with JS Promise integration. + * + * .. admonition:: Experimental + * :class: warning + * + * This feature is not yet stable. + * + * @experimental + */ + callPromising(...jsargs: any): Promise; + /** + * Call the function with stack switching enabled. The last argument must be + * an object with the keyword arguments. Functions called this way can use + * :py:meth:`~pyodide.ffi.run_sync` to block until an + * :py:class:`~collections.abc.Awaitable` is resolved. Only works in runtimes + * with JS Promise integration. + * + * .. admonition:: Experimental + * :class: warning + * + * This feature is not yet stable. + * + * @experimental + */ + callPromisingKwargs(...jsargs: any): Promise; + /** + * The ``bind()`` method creates a new function that, when called, has its + * ``this`` keyword set to the provided value, with a given sequence of + * arguments preceding any provided when the new function is called. See + * :js:meth:`Function.bind`. + * + * If the :js:class:`~pyodide.ffi.PyCallable` does not have + * :js:meth:`captureThis` set, the ``this`` parameter will be discarded. If it + * does have :js:meth:`captureThis` set, ``thisArg`` will be set to the first + * argument of the Python function. The returned proxy and the original proxy + * have the same lifetime so destroying either destroys both. + * + * @param thisArg The value to be passed as the ``this`` parameter to the + * target function ``func`` when the bound function is called. + * @param jsargs Extra arguments to prepend to arguments provided to the bound + * function when invoking ``func``. + * @returns + */ + bind(thisArg: any, ...jsargs: any): PyProxy; + /** + * Returns a :js:class:`~pyodide.ffi.PyProxy` that passes ``this`` as the first argument to the + * Python function. The returned :js:class:`~pyodide.ffi.PyProxy` has the internal ``captureThis`` + * property set. + * + * It can then be used as a method on a JavaScript object. The returned proxy + * and the original proxy have the same lifetime so destroying either destroys + * both. + * + * For example: + * + * .. code-block:: pyodide + * + * let obj = { a : 7 }; + * pyodide.runPython(` + * def f(self): + * return self.a + * `); + * // Without captureThis, it doesn't work to use f as a method for obj: + * obj.f = pyodide.globals.get("f"); + * obj.f(); // raises "TypeError: f() missing 1 required positional argument: 'self'" + * // With captureThis, it works fine: + * obj.f = pyodide.globals.get("f").captureThis(); + * obj.f(); // returns 7 + * + * @returns The resulting :js:class:`~pyodide.ffi.PyProxy`. It has the same lifetime as the + * original :js:class:`~pyodide.ffi.PyProxy` but passes ``this`` to the wrapped function. + * + */ + captureThis(): PyProxy; +} +/** + * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object supports the + * Python :external:doc:`c-api/buffer`. + * + * Examples of buffers include {py:class}`bytes` objects and numpy + * {external+numpy:ref}`arrays`. + */ +declare class PyBuffer extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyBuffer; +} +interface PyBuffer extends PyBufferMethods { +} +declare class PyBufferMethods { + /** + * Get a view of the buffer data which is usable from JavaScript. No copy is + * ever performed. + * + * We do not support suboffsets, if the buffer requires suboffsets we will + * throw an error. JavaScript nd array libraries can't handle suboffsets + * anyways. In this case, you should use the :js:meth:`~PyProxy.toJs` api or + * copy the buffer to one that doesn't use suboffsets (using e.g., + * :py:func:`numpy.ascontiguousarray`). + * + * If the buffer stores big endian data or half floats, this function will + * fail without an explicit type argument. For big endian data you can use + * :js:meth:`~PyProxy.toJs`. :js:class:`DataView` has support for big endian + * data, so you might want to pass ``'dataview'`` as the type argument in that + * case. + * + * @param type The type of the :js:attr:`~pyodide.ffi.PyBufferView.data` field + * in the output. Should be one of: ``"i8"``, ``"u8"``, ``"u8clamped"``, + * ``"i16"``, ``"u16"``, ``"i32"``, ``"u32"``, ``"i32"``, ``"u32"``, + * ``"i64"``, ``"u64"``, ``"f32"``, ``"f64"``, or ``"dataview"``. This argument + * is optional, if absent :js:meth:`~pyodide.ffi.PyBuffer.getBuffer` will try + * to determine the appropriate output type based on the buffer format string + * (see :std:ref:`struct-format-strings`). + */ + getBuffer(type?: string): PyBufferView; +} +/** + * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object is a :py:class:`dict`. + */ +declare class PyDict extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +interface PyDict extends PyProxyWithGet, PyProxyWithSet, PyProxyWithHas, PyProxyWithLength, PyIterable { +} +/** + * A class to allow access to Python data buffers from JavaScript. These are + * produced by :js:meth:`~pyodide.ffi.PyBuffer.getBuffer` and cannot be constructed directly. + * When you are done, release it with the :js:func:`~PyBufferView.release` method. + * See the Python :external:doc:`c-api/buffer` documentation for more + * information. + * + * To find the element ``x[a_1, ..., a_n]``, you could use the following code: + * + * .. code-block:: js + * + * function multiIndexToIndex(pybuff, multiIndex) { + * if (multindex.length !== pybuff.ndim) { + * throw new Error("Wrong length index"); + * } + * let idx = pybuff.offset; + * for (let i = 0; i < pybuff.ndim; i++) { + * if (multiIndex[i] < 0) { + * multiIndex[i] = pybuff.shape[i] - multiIndex[i]; + * } + * if (multiIndex[i] < 0 || multiIndex[i] >= pybuff.shape[i]) { + * throw new Error("Index out of range"); + * } + * idx += multiIndex[i] * pybuff.stride[i]; + * } + * return idx; + * } + * console.log("entry is", pybuff.data[multiIndexToIndex(pybuff, [2, 0, -1])]); + * + * .. admonition:: Converting between TypedArray types + * :class: warning + * + * The following naive code to change the type of a typed array does not + * work: + * + * .. code-block:: js + * + * // Incorrectly convert a TypedArray. + * // Produces a Uint16Array that points to the entire WASM memory! + * let myarray = new Uint16Array(buffer.data.buffer); + * + * Instead, if you want to convert the output TypedArray, you need to say: + * + * .. code-block:: js + * + * // Correctly convert a TypedArray. + * let myarray = new Uint16Array( + * buffer.data.buffer, + * buffer.data.byteOffset, + * buffer.data.byteLength + * ); + */ +declare class PyBufferView { + /** + * The offset of the first entry of the array. For instance if our array + * is 3d, then you will find ``array[0,0,0]`` at + * ``pybuf.data[pybuf.offset]`` + */ + offset: number; + /** + * If the data is read only, you should not modify it. There is no way for us + * to enforce this, but it may cause very weird behavior. See + * :py:attr:`memoryview.readonly`. + */ + readonly: boolean; + /** + * The format string for the buffer. See :ref:`struct-format-strings` + * and :py:attr:`memoryview.format`. + */ + format: string; + /** + * How large is each entry in bytes? See :py:attr:`memoryview.itemsize`. + */ + itemsize: number; + /** + * The number of dimensions of the buffer. If ``ndim`` is 0, the buffer + * represents a single scalar or struct. Otherwise, it represents an + * array. See :py:attr:`memoryview.ndim`. + */ + ndim: number; + /** + * The total number of bytes the buffer takes up. This is equal to + * :js:attr:`buff.data.byteLength `. See + * :py:attr:`memoryview.nbytes`. + */ + nbytes: number; + /** + * The shape of the buffer, that is how long it is in each dimension. + * The length will be equal to ``ndim``. For instance, a 2x3x4 array + * would have shape ``[2, 3, 4]``. See :py:attr:`memoryview.shape`. + */ + shape: number[]; + /** + * An array of of length ``ndim`` giving the number of elements to skip + * to get to a new element in each dimension. See the example definition + * of a ``multiIndexToIndex`` function above. See :py:attr:`memoryview.strides`. + */ + strides: number[]; + /** + * The actual data. A typed array of an appropriate size backed by a segment + * of the WASM memory. + * + * The ``type`` argument of :js:meth:`~pyodide.ffi.PyBuffer.getBuffer` determines + * which sort of :js:class:`TypedArray` or :js:class:`DataView` to return. By + * default :js:meth:`~pyodide.ffi.PyBuffer.getBuffer` will look at the format string + * to determine the most appropriate option. Most often the result is a + * :js:class:`Uint8Array`. + * + * .. admonition:: Contiguity + * :class: warning + * + * If the buffer is not contiguous, the :js:attr:`~PyBufferView.readonly` + * TypedArray will contain data that is not part of the buffer. Modifying + * this data leads to undefined behavior. + * + * .. admonition:: Read only buffers + * :class: warning + * + * If :js:attr:`buffer.readonly ` is ``true``, you + * should not modify the buffer. Modifying a read only buffer leads to + * undefined behavior. + * + */ + data: TypedArray; + /** + * Is it C contiguous? See :py:attr:`memoryview.c_contiguous`. + */ + c_contiguous: boolean; + /** + * Is it Fortran contiguous? See :py:attr:`memoryview.f_contiguous`. + */ + f_contiguous: boolean; + /** + * @private + */ + _released: boolean; + /** + * @private + */ + _view_ptr: number; + /** @private */ + constructor(); + /** + * Release the buffer. This allows the memory to be reclaimed. + */ + release(): void; +} +/** + * A JavaScript error caused by a Python exception. + * + * In order to reduce the risk of large memory leaks, the :js:class:`PythonError` + * contains no reference to the Python exception that caused it. You can find + * the actual Python exception that caused this error as + * :py:data:`sys.last_exc`. + * + * See :ref:`type translations of errors ` for more + * information. + * + * .. admonition:: Avoid leaking stack Frames + * :class: warning + * + * If you make a :js:class:`~pyodide.ffi.PyProxy` of + * :py:data:`sys.last_exc`, you should be especially careful to + * :js:meth:`~pyodide.ffi.PyProxy.destroy` it when you are done. You may leak a large + * amount of memory including the local variables of all the stack frames in + * the traceback if you don't. The easiest way is to only handle the + * exception in Python. + * + * @hideconstructor + */ +declare class PythonError extends Error { + /** + * The address of the error we are wrapping. We may later compare this + * against sys.last_exc. + * WARNING: we don't own a reference to this pointer, dereferencing it + * may be a use-after-free error! + * @private + */ + __error_address: number; + /** + * The name of the Python error class, e.g, :py:exc:`RuntimeError` or + * :py:exc:`KeyError`. + */ + type: string; + constructor(type: string, message: string, error_address: number); +} +/** + * See :ref:`js-api-pyodide-ffi` + * @hidetype + */ +declare const ffi: { + PyProxy: typeof PyProxy; + PyProxyWithLength: typeof PyProxyWithLength; + PyProxyWithGet: typeof PyProxyWithGet; + PyProxyWithSet: typeof PyProxyWithSet; + PyProxyWithHas: typeof PyProxyWithHas; + PyDict: typeof PyDict; + PyIterable: typeof PyIterable; + PyAsyncIterable: typeof PyAsyncIterable; + PyIterator: typeof PyIterator; + PyAsyncIterator: typeof PyAsyncIterator; + PyGenerator: typeof PyGenerator; + PyAsyncGenerator: typeof PyAsyncGenerator; + PyAwaitable: typeof PyAwaitable; + PyCallable: typeof PyCallable; + PyBuffer: typeof PyBuffer; + PyBufferView: typeof PyBufferView; + PythonError: typeof PythonError; + PySequence: typeof PySequence; + PyMutableSequence: typeof PyMutableSequence; +}; + +export type {}; +export type {PyAsyncGenerator, PyAsyncIterable, PyAsyncIterator, PyAwaitable, PyBuffer, PyBufferView, PyCallable, PyDict, PyGenerator, PyIterable, PyIterator, PyMutableSequence, PyProxy, PyProxyWithGet, PyProxyWithHas, PyProxyWithLength, PyProxyWithSet, PySequence, PythonError}; diff --git a/dingus/pyodide/micropip-0.6.0-py3-none-any.whl.metadata b/dingus/pyodide/micropip-0.6.0-py3-none-any.whl.metadata new file mode 100644 index 0000000..e0af34c --- /dev/null +++ b/dingus/pyodide/micropip-0.6.0-py3-none-any.whl.metadata @@ -0,0 +1,421 @@ +Metadata-Version: 2.1 +Name: micropip +Version: 0.6.0 +Summary: A lightweight Python package installer for the web +Author: Pyodide developers +License: Mozilla Public License Version 2.0 + ================================== + + 1. Definitions + -------------- + + 1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + + 1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + + 1.3. "Contribution" + means Covered Software of a particular Contributor. + + 1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + + 1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + + 1.6. "Executable Form" + means any form of the work other than Source Code Form. + + 1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + + 1.8. "License" + means this document. + + 1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + + 1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + + 1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + + 1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + + 1.13. "Source Code Form" + means the form of the work preferred for making modifications. + + 1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + + 2. License Grants and Conditions + -------------------------------- + + 2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + (a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + (b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + + 2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + + 2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + + (a) for any code that a Contributor has removed from Covered Software; + or + + (b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + (c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + + 2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + + 2.5. Representation + + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights + to grant the rights to its Contributions conveyed by this License. + + 2.6. Fair Use + + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + + 2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted + in Section 2.1. + + 3. Responsibilities + ------------------- + + 3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + + 3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + (a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + + (b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + + 3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + + 3.4. Notices + + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, + or limitations of liability) contained within the Source Code Form of + the Covered Software, except that You may alter any license notices to + the extent required to remedy known factual inaccuracies. + + 3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + + 4. Inability to Comply Due to Statute or Regulation + --------------------------------------------------- + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Software due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description must + be placed in a text file included with all distributions of the Covered + Software under this License. Except to the extent prohibited by statute + or regulation, such description must be sufficiently detailed for a + recipient of ordinary skill to be able to understand it. + + 5. Termination + -------------- + + 5.1. The rights granted under this License will terminate automatically + if You fail to comply with any of its terms. However, if You become + compliant, then the rights granted under this License from a particular + Contributor are reinstated (a) provisionally, unless and until such + Contributor explicitly and finally terminates Your grants, and (b) on an + ongoing basis, if such Contributor fails to notify You of the + non-compliance by some reasonable means prior to 60 days after You have + come back into compliance. Moreover, Your grants from a particular + Contributor are reinstated on an ongoing basis if such Contributor + notifies You of the non-compliance by some reasonable means, this is the + first time You have received notice of non-compliance with this License + from such Contributor, and You become compliant prior to 30 days after + Your receipt of the notice. + + 5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + + 5.3. In the event of termination under Sections 5.1 or 5.2 above, all + end user license agreements (excluding distributors and resellers) which + have been validly granted by You or Your distributors under this License + prior to termination shall survive termination. + + ************************************************************************ + * * + * 6. Disclaimer of Warranty * + * ------------------------- * + * * + * Covered Software is provided under this License on an "as is" * + * basis, without warranty of any kind, either expressed, implied, or * + * statutory, including, without limitation, warranties that the * + * Covered Software is free of defects, merchantable, fit for a * + * particular purpose or non-infringing. The entire risk as to the * + * quality and performance of the Covered Software is with You. * + * Should any Covered Software prove defective in any respect, You * + * (not any Contributor) assume the cost of any necessary servicing, * + * repair, or correction. This disclaimer of warranty constitutes an * + * essential part of this License. No use of any Covered Software is * + * authorized under this License except under this disclaimer. * + * * + ************************************************************************ + + ************************************************************************ + * * + * 7. Limitation of Liability * + * -------------------------- * + * * + * Under no circumstances and under no legal theory, whether tort * + * (including negligence), contract, or otherwise, shall any * + * Contributor, or anyone who distributes Covered Software as * + * permitted above, be liable to You for any direct, indirect, * + * special, incidental, or consequential damages of any character * + * including, without limitation, damages for lost profits, loss of * + * goodwill, work stoppage, computer failure or malfunction, or any * + * and all other commercial damages or losses, even if such party * + * shall have been informed of the possibility of such damages. This * + * limitation of liability shall not apply to liability for death or * + * personal injury resulting from such party's negligence to the * + * extent applicable law prohibits such limitation. Some * + * jurisdictions do not allow the exclusion or limitation of * + * incidental or consequential damages, so this exclusion and * + * limitation may not apply to You. * + * * + ************************************************************************ + + 8. Litigation + ------------- + + Any litigation relating to this License may be brought only in the + courts of a jurisdiction where the defendant maintains its principal + place of business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. + Nothing in this Section shall prevent a party's ability to bring + cross-claims or counter-claims. + + 9. Miscellaneous + ---------------- + + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides + that the language of a contract shall be construed against the drafter + shall not be used to construe this License against a Contributor. + + 10. Versions of the License + --------------------------- + + 10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + + 10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + + 10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + + 10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses + + If You choose to distribute Source Code Form that is Incompatible With + Secondary Licenses under the terms of this version of the License, the + notice described in Exhibit B of this License must be attached. + + Exhibit A - Source Code Form License Notice + ------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to look + for such a notice. + + You may add additional accurate notices of copyright ownership. + + Exhibit B - "Incompatible With Secondary Licenses" Notice + --------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. + +Project-URL: Homepage, https://github.com/pyodide/micropip +Project-URL: Bug Tracker, https://github.com/pyodide/micropip/issues +Classifier: Programming Language :: Python :: 3 +Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0) +Classifier: Operating System :: OS Independent +Requires-Python: >=3.10 +Description-Content-Type: text/markdown +License-File: LICENSE +Requires-Dist: packaging >=23.0 +Provides-Extra: test +Requires-Dist: pytest-httpserver ; extra == 'test' +Requires-Dist: pytest-pyodide ; extra == 'test' +Requires-Dist: pytest-cov ; extra == 'test' +Requires-Dist: pytest <8.0.0 ; extra == 'test' +Requires-Dist: build ==0.7.0 ; extra == 'test' + +# micropip + +[![PyPI Latest Release](https://img.shields.io/pypi/v/micropip.svg)](https://pypi.org/project/micropip/) +![GHA](https://github.com/pyodide/micropip/actions/workflows/main.yml/badge.svg) + +A lightweight Python package installer for the web + +## Installation + +In [Pyodide](https://pyodide.org), you can install micropip, + - either implicitly by importing it in the REPL + - or explicitly via `pyodide.loadPackage('micropip')`. You can also install by URL from PyPI for instance. + +## Usage + +```py +import micropip +await micropip.install() +``` +For more information see the +[documentation](https://pyodide.org/en/stable/usage/loading-packages.html#micropip). + +## License + +micropip uses the [Mozilla Public License Version +2.0](https://choosealicense.com/licenses/mpl-2.0/). diff --git a/dingus/pyodide/package.json b/dingus/pyodide/package.json new file mode 100644 index 0000000..379ffee --- /dev/null +++ b/dingus/pyodide/package.json @@ -0,0 +1,135 @@ +{ + "name": "pyodide", + "version": "0.26.2", + "description": "The Pyodide JavaScript package", + "keywords": [ + "python", + "webassembly" + ], + "homepage": "https://github.com/pyodide/pyodide", + "repository": { + "type": "git", + "url": "https://github.com/pyodide/pyodide" + }, + "bugs": { + "url": "https://github.com/pyodide/pyodide/issues" + }, + "license": "Apache-2.0", + "devDependencies": { + "@types/assert": "^1.5.6", + "@types/expect": "^24.3.0", + "@types/mocha": "^9.1.0", + "@types/node": "^20.8.4", + "@types/ws": "^8.5.3", + "chai": "^4.3.6", + "chai-as-promised": "^7.1.1", + "cross-env": "^7.0.3", + "dts-bundle-generator": "^8.1.1", + "esbuild": "^0.17.12", + "express": "^4.17.3", + "mocha": "^9.0.2", + "npm-run-all": "^4.1.5", + "nyc": "^15.1.0", + "prettier": "^2.2.1", + "ts-mocha": "^9.0.2", + "tsd": "^0.24.1", + "typedoc": "^0.25.1", + "typescript": "^4.6.4", + "wabt": "^1.0.32" + }, + "main": "pyodide.js", + "exports": { + ".": { + "require": "./pyodide.js", + "import": "./pyodide.mjs", + "types": "./pyodide.d.ts" + }, + "./ffi": { + "types": "./ffi.d.ts" + }, + "./pyodide.asm.wasm": "./pyodide.asm.wasm", + "./pyodide.asm.js": "./pyodide.asm.js", + "./python_stdlib.zip": "./python_stdlib.zip", + "./pyodide.mjs": "./pyodide.mjs", + "./pyodide.js": "./pyodide.js", + "./package.json": "./package.json", + "./pyodide-lock.json": "./pyodide-lock.json" + }, + "files": [ + "pyodide.asm.js", + "pyodide.asm.wasm", + "python_stdlib.zip", + "pyodide.mjs", + "pyodide.js.map", + "pyodide.mjs.map", + "pyodide.d.ts", + "ffi.d.ts", + "pyodide-lock.json", + "console.html" + ], + "browser": { + "child_process": false, + "crypto": false, + "fs": false, + "fs/promises": false, + "path": false, + "url": false, + "vm": false, + "ws": false + }, + "scripts": { + "build": "tsc --noEmit && node esbuild.config.mjs", + "test": "npm-run-all test:*", + "test:unit": "cross-env TEST_NODE=1 ts-mocha --node-option=experimental-loader=./test/loader.mjs --node-option=experimental-wasm-stack-switching -p tsconfig.test.json test/unit/**/*.test.*", + "test:node": "cross-env TEST_NODE=1 mocha test/integration/**/*.test.js", + "test:browser": "mocha test/integration/**/*.test.js", + "tsc": "tsc --noEmit", + "coverage": "cross-env TEST_NODE=1 npm-run-all coverage:*", + "coverage:build": "nyc npm run test:node" + }, + "mocha": { + "bail": false, + "timeout": 30000, + "full-trace": true, + "inline-diffs": true, + "check-leaks": false, + "global": [ + "pyodide", + "page", + "chai" + ] + }, + "nyc": { + "reporter": [ + "html", + "text-summary" + ], + "include": [ + "*.ts" + ], + "all": true, + "clean": true, + "cache": false, + "instrument": false, + "checkCoverage": true, + "statements": 95, + "functions": 95, + "branches": 80, + "lines": 95 + }, + "tsd": { + "compilerOptions": { + "lib": [ + "ES2017", + "DOM" + ] + } + }, + "dependencies": { + "ws": "^8.5.0" + }, + "types": "./pyodide.d.ts", + "engines": { + "node": ">=18.0.0" + } +} diff --git a/dingus/pyodide/packaging-23.2-py3-none-any.whl.metadata b/dingus/pyodide/packaging-23.2-py3-none-any.whl.metadata new file mode 100644 index 0000000..54db5b5 --- /dev/null +++ b/dingus/pyodide/packaging-23.2-py3-none-any.whl.metadata @@ -0,0 +1,102 @@ +Metadata-Version: 2.1 +Name: packaging +Version: 23.2 +Summary: Core utilities for Python packages +Author-email: Donald Stufft +Requires-Python: >=3.7 +Description-Content-Type: text/x-rst +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: Apache Software License +Classifier: License :: OSI Approved :: BSD License +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Typing :: Typed +Project-URL: Documentation, https://packaging.pypa.io/ +Project-URL: Source, https://github.com/pypa/packaging + +packaging +========= + +.. start-intro + +Reusable core utilities for various Python Packaging +`interoperability specifications `_. + +This library provides utilities that implement the interoperability +specifications which have clearly one correct behaviour (eg: :pep:`440`) +or benefit greatly from having a single shared implementation (eg: :pep:`425`). + +.. end-intro + +The ``packaging`` project includes the following: version handling, specifiers, +markers, requirements, tags, utilities. + +Documentation +------------- + +The `documentation`_ provides information and the API for the following: + +- Version Handling +- Specifiers +- Markers +- Requirements +- Tags +- Utilities + +Installation +------------ + +Use ``pip`` to install these utilities:: + + pip install packaging + +The ``packaging`` library uses calendar-based versioning (``YY.N``). + +Discussion +---------- + +If you run into bugs, you can file them in our `issue tracker`_. + +You can also join ``#pypa`` on Freenode to ask questions or get involved. + + +.. _`documentation`: https://packaging.pypa.io/ +.. _`issue tracker`: https://github.com/pypa/packaging/issues + + +Code of Conduct +--------------- + +Everyone interacting in the packaging project's codebases, issue trackers, chat +rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_. + +.. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md + +Contributing +------------ + +The ``CONTRIBUTING.rst`` file outlines how to contribute to this project as +well as how to report a potential security issue. The documentation for this +project also covers information about `project development`_ and `security`_. + +.. _`project development`: https://packaging.pypa.io/en/latest/development/ +.. _`security`: https://packaging.pypa.io/en/latest/security/ + +Project History +--------------- + +Please review the ``CHANGELOG.rst`` file or the `Changelog documentation`_ for +recent changes and project history. + +.. _`Changelog documentation`: https://packaging.pypa.io/en/latest/changelog/ + diff --git a/dingus/pyodide/pyodide-core-0.26.2.tar b/dingus/pyodide/pyodide-core-0.26.2.tar new file mode 100644 index 0000000..907c695 Binary files /dev/null and b/dingus/pyodide/pyodide-core-0.26.2.tar differ diff --git a/dingus/pyodide/pyodide-lock.json b/dingus/pyodide/pyodide-lock.json new file mode 100644 index 0000000..2899035 --- /dev/null +++ b/dingus/pyodide/pyodide-lock.json @@ -0,0 +1 @@ +{"info": {"abi_version": "2024_0", "arch": "wasm32", "platform": "emscripten_3_1_58", "python": "3.12.1", "version": "0.26.2"}, "packages": {"aiohttp": {"depends": ["aiosignal", "async-timeout", "attrs", "charset-normalizer", "frozenlist", "multidict", "yarl"], "file_name": "aiohttp-3.9.5-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["aiohttp"], "install_dir": "site", "name": "aiohttp", "package_type": "package", "sha256": "6088a31903b924ea67eada351427cf70f305496fed21a242c1734dac3d40f036", "shared_library": false, "unvendored_tests": true, "version": "3.9.5"}, "aiohttp-tests": {"depends": ["aiohttp"], "file_name": "aiohttp-tests.tar", "imports": [], "install_dir": "site", "name": "aiohttp-tests", "package_type": "package", "sha256": "2cd1eb06e9226b304f24d0109b54b1f206eb2020467fc901e6520493901afe4f", "shared_library": false, "unvendored_tests": false, "version": "3.9.5"}, "aiosignal": {"depends": ["frozenlist"], "file_name": "aiosignal-1.3.1-py3-none-any.whl", "imports": ["aiosignal"], "install_dir": "site", "name": "aiosignal", "package_type": "package", "sha256": "289e08fe4d2bf5f0fd078cda221eec3c8c15c53e8349a53a02d37a14ed3d633d", "shared_library": false, "unvendored_tests": false, "version": "1.3.1"}, "altair": {"depends": ["typing-extensions", "jinja2", "jsonschema", "numpy", "pandas", "toolz", "packaging"], "file_name": "altair-5.3.0-py3-none-any.whl", "imports": ["altair"], "install_dir": "site", "name": "altair", "package_type": "package", "sha256": "e42dc5b5a839b1c2578f67ebf24d440a378b34d3e41a13a180b138f88db1d0a6", "shared_library": false, "unvendored_tests": false, "version": "5.3.0"}, "annotated-types": {"depends": [], "file_name": "annotated_types-0.6.0-py3-none-any.whl", "imports": ["annotated_types"], "install_dir": "site", "name": "annotated-types", "package_type": "package", "sha256": "e90f0194794f813497fe8ce12ea86e9de3f29a43e5baba94e538e0104786aaad", "shared_library": false, "unvendored_tests": true, "version": "0.6.0"}, "annotated-types-tests": {"depends": ["annotated-types"], "file_name": "annotated-types-tests.tar", "imports": [], "install_dir": "site", "name": "annotated-types-tests", "package_type": "package", "sha256": "74a2fd76c8f789641922c52ccd3c661c49c4814c0002b548f90bdfe89948fad4", "shared_library": false, "unvendored_tests": false, "version": "0.6.0"}, "asciitree": {"depends": [], "file_name": "asciitree-0.3.3-py3-none-any.whl", "imports": ["asciitree"], "install_dir": "site", "name": "asciitree", "package_type": "package", "sha256": "47d19b776c5a8989ed3d7d6cfc839c4b00ecac4bb62c2773d7b20781ec2a9f62", "shared_library": false, "unvendored_tests": false, "version": "0.3.3"}, "astropy": {"depends": ["packaging", "numpy", "pyerfa", "pyyaml", "astropy_iers_data"], "file_name": "astropy-6.0.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["astropy"], "install_dir": "site", "name": "astropy", "package_type": "package", "sha256": "64bf3464b05c2c02671d5072d056e398f63aff888b07e0b2ccdda27ea39271ce", "shared_library": false, "unvendored_tests": false, "version": "6.0.1"}, "astropy-iers-data": {"depends": [], "file_name": "astropy_iers_data-0.2024.4.22.0.29.50-py3-none-any.whl", "imports": ["astropy_iers_data"], "install_dir": "site", "name": "astropy_iers_data", "package_type": "package", "sha256": "f6203d69eff2e4bbd6760433378c2213f12167c8b5bfa948c390b4c8c8c79cf7", "shared_library": false, "unvendored_tests": true, "version": "0.2024.4.22.0.29.50"}, "astropy-iers-data-tests": {"depends": ["astropy_iers_data"], "file_name": "astropy_iers_data-tests.tar", "imports": [], "install_dir": "site", "name": "astropy_iers_data-tests", "package_type": "package", "sha256": "01e88fa3230cabf825cab8c0736842a4265de78da3bd0472f91c57ea29f828e1", "shared_library": false, "unvendored_tests": false, "version": "0.2024.4.22.0.29.50"}, "asttokens": {"depends": ["six"], "file_name": "asttokens-2.4.1-py2.py3-none-any.whl", "imports": ["asttokens"], "install_dir": "site", "name": "asttokens", "package_type": "package", "sha256": "3aa30dd61370a5c080ad397316e215b278c1ef43dac3671a5a4882240052edc9", "shared_library": false, "unvendored_tests": false, "version": "2.4.1"}, "async-timeout": {"depends": [], "file_name": "async_timeout-4.0.3-py3-none-any.whl", "imports": ["async_timeout"], "install_dir": "site", "name": "async-timeout", "package_type": "package", "sha256": "ed2b902261daed0c5fdb9a125737660b25928f6546c51150b9a0706cf1013ac7", "shared_library": false, "unvendored_tests": false, "version": "4.0.3"}, "atomicwrites": {"depends": [], "file_name": "atomicwrites-1.4.1-py2.py3-none-any.whl", "imports": ["atomicwrites"], "install_dir": "site", "name": "atomicwrites", "package_type": "package", "sha256": "54059ad39810afa5ae9492c8ad201182bff96abc83bdc5abb0bf620519ba8acf", "shared_library": false, "unvendored_tests": false, "version": "1.4.1"}, "attrs": {"depends": ["six"], "file_name": "attrs-23.2.0-py3-none-any.whl", "imports": ["attr", "attrs"], "install_dir": "site", "name": "attrs", "package_type": "package", "sha256": "9957c6cba96816a1f8ecf2fa8c24f36c4054a64b508d376c428547c9f2c14958", "shared_library": false, "unvendored_tests": false, "version": "23.2.0"}, "autograd": {"depends": ["numpy", "future"], "file_name": "autograd-1.6.2-py3-none-any.whl", "imports": ["autograd"], "install_dir": "site", "name": "autograd", "package_type": "package", "sha256": "383a7655a47e52461b27a535d274baa9c0ad1fa29042ba5cc97c8cef155cc827", "shared_library": false, "unvendored_tests": true, "version": "1.6.2"}, "autograd-tests": {"depends": ["autograd"], "file_name": "autograd-tests.tar", "imports": [], "install_dir": "site", "name": "autograd-tests", "package_type": "package", "sha256": "712548a2cc6812b5f01400c9d8142749fdd2e786ea94cb385ba5eb35ef4852f3", "shared_library": false, "unvendored_tests": false, "version": "1.6.2"}, "awkward-cpp": {"depends": ["numpy"], "file_name": "awkward_cpp-33-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["awkward_cpp"], "install_dir": "site", "name": "awkward-cpp", "package_type": "package", "sha256": "c39904d30cd43d123ad0fa18cecd0e8b5213f0da038b1626743144cdcca7ec82", "shared_library": false, "unvendored_tests": false, "version": "33"}, "b2d": {"depends": ["numpy", "pydantic", "setuptools", "annotated-types"], "file_name": "b2d-0.7.4-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["b2d"], "install_dir": "site", "name": "b2d", "package_type": "package", "sha256": "bdc5dfdb1a5d19083db9632e028da757f69f62381be5e2f4ccc56ef543531c8a", "shared_library": false, "unvendored_tests": false, "version": "0.7.4"}, "bcrypt": {"depends": [], "file_name": "bcrypt-4.1.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["bcrypt"], "install_dir": "site", "name": "bcrypt", "package_type": "package", "sha256": "b41c5c91cdbff8cef054a9dd8d5fe51afcae562fbf0757d8ff546a04b7496de5", "shared_library": false, "unvendored_tests": false, "version": "4.1.2"}, "beautifulsoup4": {"depends": ["soupsieve"], "file_name": "beautifulsoup4-4.12.3-py3-none-any.whl", "imports": ["bs4"], "install_dir": "site", "name": "beautifulsoup4", "package_type": "package", "sha256": "514625102da92966ac01d404d30da2a5bc6218df17982d689c8c51314b2e38cc", "shared_library": false, "unvendored_tests": true, "version": "4.12.3"}, "beautifulsoup4-tests": {"depends": ["beautifulsoup4"], "file_name": "beautifulsoup4-tests.tar", "imports": [], "install_dir": "site", "name": "beautifulsoup4-tests", "package_type": "package", "sha256": "6011c6f47c5ecf87b951d3f76a3744ceb28f81608f48d3eb29fb86a74d7d21c6", "shared_library": false, "unvendored_tests": false, "version": "4.12.3"}, "biopython": {"depends": ["numpy"], "file_name": "biopython-1.83-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["Bio", "BioSQL"], "install_dir": "site", "name": "biopython", "package_type": "package", "sha256": "73b1216ea35dd854f5d94c1fb6df044998047bc7f159e1d8d63f11cce2ad2a4b", "shared_library": false, "unvendored_tests": false, "version": "1.83"}, "bitarray": {"depends": [], "file_name": "bitarray-2.9.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["bitarray"], "install_dir": "site", "name": "bitarray", "package_type": "package", "sha256": "ffeb78f214d1ab40806cbdf35a56b51ef4c24009313cbdeeca679e7c2ffae96c", "shared_library": false, "unvendored_tests": true, "version": "2.9.2"}, "bitarray-tests": {"depends": ["bitarray"], "file_name": "bitarray-tests.tar", "imports": [], "install_dir": "site", "name": "bitarray-tests", "package_type": "package", "sha256": "0e6aaef83e455204ff896611dab0ca5459907b9a629e329a977cc43e8285e80c", "shared_library": false, "unvendored_tests": false, "version": "2.9.2"}, "bitstring": {"depends": ["bitarray"], "file_name": "bitstring-4.1.4-py3-none-any.whl", "imports": ["bitstring"], "install_dir": "site", "name": "bitstring", "package_type": "package", "sha256": "e15c74646ada5c2a1cd8b6188385aa56db511a834e64a47a03821a796e03370a", "shared_library": false, "unvendored_tests": false, "version": "4.1.4"}, "bleach": {"depends": ["webencodings", "packaging", "six"], "file_name": "bleach-6.1.0-py3-none-any.whl", "imports": ["bleach"], "install_dir": "site", "name": "bleach", "package_type": "package", "sha256": "42585c524fadf8b8d7479f67ee9f311af8053388d72b3e77ab1a04d32803c2c8", "shared_library": false, "unvendored_tests": false, "version": "6.1.0"}, "bokeh": {"depends": ["contourpy", "numpy", "jinja2", "pandas", "pillow", "python-dateutil", "six", "typing-extensions", "pyyaml", "xyzservices"], "file_name": "bokeh-3.4.1-py3-none-any.whl", "imports": ["bokeh"], "install_dir": "site", "name": "bokeh", "package_type": "package", "sha256": "c2e3658459d5c59b8bf2422f02816221106035a504e4aa78fb03e8f8af38ad42", "shared_library": false, "unvendored_tests": false, "version": "3.4.1"}, "boost-histogram": {"depends": ["numpy"], "file_name": "boost_histogram-1.4.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["boost_histogram"], "install_dir": "site", "name": "boost-histogram", "package_type": "package", "sha256": "f683765ea58ef1845e1be4bc1edbcac7011be75e45312e66b272bad75bd43625", "shared_library": false, "unvendored_tests": false, "version": "1.4.1"}, "brotli": {"depends": [], "file_name": "Brotli-1.1.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["brotli"], "install_dir": "site", "name": "brotli", "package_type": "package", "sha256": "4f68a4a9216bf42a2039b2cb53ff26790bdf9665a48a405021ff3328134c3333", "shared_library": false, "unvendored_tests": false, "version": "1.1.0"}, "cachetools": {"depends": [], "file_name": "cachetools-5.3.3-py3-none-any.whl", "imports": ["cachetools"], "install_dir": "site", "name": "cachetools", "package_type": "package", "sha256": "bf0249e3aa984c2255ef1871a47ad5d87399fd84a3f52113a48a77c381fb56a8", "shared_library": false, "unvendored_tests": false, "version": "5.3.3"}, "cartopy": {"depends": ["shapely", "pyshp", "pyproj", "geos", "matplotlib", "scipy"], "file_name": "Cartopy-0.23.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cartopy"], "install_dir": "site", "name": "Cartopy", "package_type": "package", "sha256": "d6b20633542b8d0b26c08732df65f46b00ae3b93a3e204c2bbcfec9f393f3e15", "shared_library": false, "unvendored_tests": true, "version": "0.23.0"}, "cartopy-tests": {"depends": ["cartopy"], "file_name": "Cartopy-tests.tar", "imports": [], "install_dir": "site", "name": "Cartopy-tests", "package_type": "package", "sha256": "31006543a90b1a6f4e965867c078a0d3acc1bbc8ded8232dbe0088114ad483b8", "shared_library": false, "unvendored_tests": false, "version": "0.23.0"}, "cbor-diag": {"depends": [], "file_name": "cbor_diag-1.0.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cbor_diag"], "install_dir": "site", "name": "cbor-diag", "package_type": "package", "sha256": "351abf4501b03585a398842d4c2c73e3fc06e6bed7a8efd8c17fe28add82a1d7", "shared_library": false, "unvendored_tests": false, "version": "1.0.1"}, "certifi": {"depends": [], "file_name": "certifi-2024.2.2-py3-none-any.whl", "imports": ["certifi"], "install_dir": "site", "name": "certifi", "package_type": "package", "sha256": "4510575e9f8975facae14e9a22445374cc8439a46fce4b72e6f887ec9cda02e0", "shared_library": false, "unvendored_tests": false, "version": "2024.2.2"}, "cffi": {"depends": ["pycparser"], "file_name": "cffi-1.16.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cffi"], "install_dir": "site", "name": "cffi", "package_type": "package", "sha256": "827684347a32d6f51beb3385721999fd1c253961a010bbbc432d49bb201dd908", "shared_library": false, "unvendored_tests": false, "version": "1.16.0"}, "cffi-example": {"depends": ["cffi"], "file_name": "cffi_example-0.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cffi_example"], "install_dir": "site", "name": "cffi_example", "package_type": "package", "sha256": "fe2ddfbf021f374a5d309fbf4a1798ac839d80aa1fe53cfcd91927b4d31694ba", "shared_library": false, "unvendored_tests": false, "version": "0.1"}, "cftime": {"depends": ["numpy"], "file_name": "cftime-1.6.3-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cftime"], "install_dir": "site", "name": "cftime", "package_type": "package", "sha256": "d11842a43c7f3381469d4902b90caf4723e8624e5f9b135ae5cee09090480663", "shared_library": false, "unvendored_tests": false, "version": "1.6.3"}, "charset-normalizer": {"depends": [], "file_name": "charset_normalizer-3.3.2-py3-none-any.whl", "imports": ["charset_normalizer"], "install_dir": "site", "name": "charset-normalizer", "package_type": "package", "sha256": "af149540cc3083b7c662fc2a795ceff445fc2432cf0351b8b8e00d74e6390c8b", "shared_library": false, "unvendored_tests": false, "version": "3.3.2"}, "clarabel": {"depends": ["numpy", "scipy"], "file_name": "clarabel-0.7.1-cp37-abi3-pyodide_2024_0_wasm32.whl", "imports": ["clarabel"], "install_dir": "site", "name": "clarabel", "package_type": "package", "sha256": "79a225c85e3e91dac04d937c5343cc5a02526c2d03c3bd4dbc0abca30831c83b", "shared_library": false, "unvendored_tests": false, "version": "0.7.1"}, "click": {"depends": [], "file_name": "click-8.1.7-py3-none-any.whl", "imports": ["click"], "install_dir": "site", "name": "click", "package_type": "package", "sha256": "c31cfb0d88953514bf67cc070d83a7c70f0dba2d9e159a577149278cf2e9966c", "shared_library": false, "unvendored_tests": false, "version": "8.1.7"}, "cligj": {"depends": ["click"], "file_name": "cligj-0.7.2-py3-none-any.whl", "imports": ["cligj"], "install_dir": "site", "name": "cligj", "package_type": "package", "sha256": "d6d01437abf8a83bccf8170305d3b8269dd25290cab615de4f7c1d6a6a5eb3f5", "shared_library": false, "unvendored_tests": false, "version": "0.7.2"}, "cloudpickle": {"depends": [], "file_name": "cloudpickle-3.0.0-py3-none-any.whl", "imports": ["cloudpickle"], "install_dir": "site", "name": "cloudpickle", "package_type": "package", "sha256": "7c1f9d252f82721c2a16850a6a960f67d982025404e06547258ba4e16afa7e9d", "shared_library": false, "unvendored_tests": false, "version": "3.0.0"}, "cmyt": {"depends": ["colorspacious", "matplotlib", "more-itertools", "numpy"], "file_name": "cmyt-2.0.0-py3-none-any.whl", "imports": ["cmyt"], "install_dir": "site", "name": "cmyt", "package_type": "package", "sha256": "3d92ef916db4669a3dc5d00f0471b59641aa19c3d8b5788ea9acd0a7217cd0ff", "shared_library": false, "unvendored_tests": true, "version": "2.0.0"}, "cmyt-tests": {"depends": ["cmyt"], "file_name": "cmyt-tests.tar", "imports": [], "install_dir": "site", "name": "cmyt-tests", "package_type": "package", "sha256": "03e7c6409abe8cfcc3d4013136d10ab4dadb3e4b8f356b42ee37ed097450a8fa", "shared_library": false, "unvendored_tests": false, "version": "2.0.0"}, "colorspacious": {"depends": ["numpy"], "file_name": "colorspacious-1.1.2-py2.py3-none-any.whl", "imports": ["colorspacious"], "install_dir": "site", "name": "colorspacious", "package_type": "package", "sha256": "1ed18f9a52743943675ae9665121d9cda46aab15afec9557eaf5bf43ce98d002", "shared_library": false, "unvendored_tests": false, "version": "1.1.2"}, "contourpy": {"depends": ["numpy"], "file_name": "contourpy-1.2.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["contourpy"], "install_dir": "site", "name": "contourpy", "package_type": "package", "sha256": "fbffef4ec9af049ce5e8ec2d45e61e037d7315bfb09e89917ef2e4d642e2afe2", "shared_library": false, "unvendored_tests": false, "version": "1.2.1"}, "coolprop": {"depends": ["numpy", "matplotlib"], "file_name": "CoolProp-6.6.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["CoolProp"], "install_dir": "site", "name": "coolprop", "package_type": "package", "sha256": "45ddd9cca772b58f1d0f145638ddca52e40e432819f26b6d83c6f4ce3053c556", "shared_library": false, "unvendored_tests": true, "version": "6.6.0"}, "coolprop-tests": {"depends": ["coolprop"], "file_name": "coolprop-tests.tar", "imports": [], "install_dir": "site", "name": "coolprop-tests", "package_type": "package", "sha256": "12c5e2854fa0ddab3bbd7ea0fad99afd912557fdd7e2d64770670eb4e68083d3", "shared_library": false, "unvendored_tests": false, "version": "6.6.0"}, "coverage": {"depends": ["sqlite3"], "file_name": "coverage-7.4.4-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["coverage"], "install_dir": "site", "name": "coverage", "package_type": "package", "sha256": "ebda0730fd46b5dd5014852d971cbe67cd5fb86a856ceb11a7a3ea77e561c90c", "shared_library": false, "unvendored_tests": false, "version": "7.4.4"}, "cpp-exceptions-test": {"depends": [], "file_name": "cpp-exceptions-test-0.1.zip", "imports": [], "install_dir": "dynlib", "name": "cpp-exceptions-test", "package_type": "shared_library", "sha256": "41a72c176c5c0572f94fc14e6f59cba7781abf2cd0e9cffce3628561cb8a5002", "shared_library": true, "unvendored_tests": false, "version": "0.1"}, "cpp-exceptions-test2": {"depends": [], "file_name": "cpp_exceptions_test2-1.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cpp-exceptions-test2"], "install_dir": "site", "name": "cpp-exceptions-test2", "package_type": "package", "sha256": "8e9d91f402926dddedf667b155c520ceaee9821503a5651d7068c220f94c7912", "shared_library": false, "unvendored_tests": false, "version": "1.0"}, "cramjam": {"depends": [], "file_name": "cramjam-2.8.3-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cramjam"], "install_dir": "site", "name": "cramjam", "package_type": "package", "sha256": "49dc5635b3799ffe3ae41b94f3a93bfc4bfe37df46d36c54c614b0fd4ebff6ee", "shared_library": false, "unvendored_tests": false, "version": "2.8.3"}, "crc32c": {"depends": [], "file_name": "crc32c-2.4-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["crc32c"], "install_dir": "site", "name": "crc32c", "package_type": "package", "sha256": "3790d358b4fd85b786e164c8d85f6540904343d7b65f6481079d2b01b0afcc65", "shared_library": false, "unvendored_tests": false, "version": "2.4"}, "cryptography": {"depends": ["openssl", "six", "cffi"], "file_name": "cryptography-42.0.5-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cryptography"], "install_dir": "site", "name": "cryptography", "package_type": "package", "sha256": "b5b8229f8d16b159683f6c470b3b1e4fbf4105521b32ed3b6f2bade64da418c9", "shared_library": false, "unvendored_tests": false, "version": "42.0.5"}, "cssselect": {"depends": [], "file_name": "cssselect-1.2.0-py2.py3-none-any.whl", "imports": ["cssselect"], "install_dir": "site", "name": "cssselect", "package_type": "package", "sha256": "0ce446c3951dd4ce38a7f58141c446e1dfadee280cf5ab41aa4a571788a8d73e", "shared_library": false, "unvendored_tests": false, "version": "1.2.0"}, "cvxpy-base": {"depends": ["numpy", "scipy", "clarabel"], "file_name": "cvxpy_base-1.5.1-py3-none-any.whl", "imports": ["cvxpy"], "install_dir": "site", "name": "cvxpy-base", "package_type": "package", "sha256": "5dabcd12c3e46ae86277781c03f02d22389de03bf3f3c5f6dfca4f46d96d5fdc", "shared_library": false, "unvendored_tests": true, "version": "1.5.1"}, "cvxpy-base-tests": {"depends": ["cvxpy-base"], "file_name": "cvxpy-base-tests.tar", "imports": [], "install_dir": "site", "name": "cvxpy-base-tests", "package_type": "package", "sha256": "bca2250f770b321a116ae7a31807499d63954095eb9921102e5833a691238711", "shared_library": false, "unvendored_tests": false, "version": "1.5.1"}, "cycler": {"depends": ["six"], "file_name": "cycler-0.12.1-py3-none-any.whl", "imports": ["cycler"], "install_dir": "site", "name": "cycler", "package_type": "package", "sha256": "8f792dd570cd61065b1b0c2d159a1db0b22decbf1f0d5e76c279dadf1b1968cc", "shared_library": false, "unvendored_tests": false, "version": "0.12.1"}, "cysignals": {"depends": [], "file_name": "cysignals-1.11.4-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cysignals"], "install_dir": "site", "name": "cysignals", "package_type": "package", "sha256": "7d6b314b506351911c62955f1d1ac25206030b52f935f71ba0ab93f8dc3f34dd", "shared_library": false, "unvendored_tests": false, "version": "1.11.4"}, "cytoolz": {"depends": ["toolz"], "file_name": "cytoolz-0.12.3-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cytoolz"], "install_dir": "site", "name": "cytoolz", "package_type": "package", "sha256": "4fc085152e3d9632afb01345ff44277cfd7a070e5e224a6235b746d0798a5681", "shared_library": false, "unvendored_tests": true, "version": "0.12.3"}, "cytoolz-tests": {"depends": ["cytoolz"], "file_name": "cytoolz-tests.tar", "imports": [], "install_dir": "site", "name": "cytoolz-tests", "package_type": "package", "sha256": "3f759fdbb44a36557f08f9aea5b483bc27d48df8d21f9653469d86455681daec", "shared_library": false, "unvendored_tests": false, "version": "0.12.3"}, "decorator": {"depends": [], "file_name": "decorator-5.1.1-py3-none-any.whl", "imports": ["decorator"], "install_dir": "site", "name": "decorator", "package_type": "package", "sha256": "90d0b02a62008dd2920787a4b8ed1c36ea20711d4d231b91b148d9bd7e4b31a1", "shared_library": false, "unvendored_tests": false, "version": "5.1.1"}, "demes": {"depends": ["attrs", "ruamel.yaml"], "file_name": "demes-0.2.3-py3-none-any.whl", "imports": ["demes"], "install_dir": "site", "name": "demes", "package_type": "package", "sha256": "21bda86d095796fdb5f09aa29c464a41de93ce5f21afda7329b000a8699eeb4d", "shared_library": false, "unvendored_tests": false, "version": "0.2.3"}, "deprecation": {"depends": ["packaging"], "file_name": "deprecation-2.1.0-py2.py3-none-any.whl", "imports": ["deprecation"], "install_dir": "site", "name": "deprecation", "package_type": "package", "sha256": "7c0ae0e74009096e602fa72948e99db043754ba43dbe3244c22ca25dc180a8a2", "shared_library": false, "unvendored_tests": false, "version": "2.1.0"}, "distlib": {"depends": [], "file_name": "distlib-0.3.8-py2.py3-none-any.whl", "imports": ["distlib"], "install_dir": "site", "name": "distlib", "package_type": "package", "sha256": "4c45a732d3c1b8dec47b8099b15e5ab567e0bf16c354e90e3d69ff192f13055d", "shared_library": false, "unvendored_tests": false, "version": "0.3.8"}, "docutils": {"depends": [], "file_name": "docutils-0.21.1-py3-none-any.whl", "imports": ["docutils"], "install_dir": "site", "name": "docutils", "package_type": "package", "sha256": "cd0680ff4e4d675c42045707004d83f904baaad565af542dce74b144a821ca36", "shared_library": false, "unvendored_tests": false, "version": "0.21.1"}, "duckdb": {"depends": [], "file_name": "duckdb-1.0.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["duckdb"], "install_dir": "site", "name": "duckdb", "package_type": "package", "sha256": "0e0900047bc37eb974d459a957772e691d28b9c06c4c76dd94f3136d34c2b6b2", "shared_library": false, "unvendored_tests": false, "version": "1.0.0"}, "ewah-bool-utils": {"depends": [], "file_name": "ewah_bool_utils-1.2.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["ewah_bool_utils"], "install_dir": "site", "name": "ewah_bool_utils", "package_type": "package", "sha256": "f28b8af779ad1cd30ebed3b718bc75aa0b8bdbaddf1c91c7ffbb3f9324cfb600", "shared_library": false, "unvendored_tests": true, "version": "1.2.0"}, "ewah-bool-utils-tests": {"depends": ["ewah_bool_utils"], "file_name": "ewah_bool_utils-tests.tar", "imports": [], "install_dir": "site", "name": "ewah_bool_utils-tests", "package_type": "package", "sha256": "5249bf39f6081164db176053ea548035f0c1c1c53dcb9e3655a7d7b50cc1405c", "shared_library": false, "unvendored_tests": false, "version": "1.2.0"}, "exceptiongroup": {"depends": [], "file_name": "exceptiongroup-1.2.1-py3-none-any.whl", "imports": ["exceptiongroup"], "install_dir": "site", "name": "exceptiongroup", "package_type": "package", "sha256": "e3bd9ffc51e87442f87660f594e020c31a03adb2c7f5b69cb91ba34781fd7f02", "shared_library": false, "unvendored_tests": false, "version": "1.2.1"}, "executing": {"depends": [], "file_name": "executing-2.0.1-py2.py3-none-any.whl", "imports": ["executing"], "install_dir": "site", "name": "executing", "package_type": "package", "sha256": "74c63c43045eb0abf6ca5860a1afd7535d0d13c5851a62339b5a269bc0cfd8f6", "shared_library": false, "unvendored_tests": false, "version": "2.0.1"}, "fastparquet": {"depends": ["cramjam", "numpy", "pandas", "fsspec", "packaging"], "file_name": "fastparquet-2024.2.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["fastparquet"], "install_dir": "site", "name": "fastparquet", "package_type": "package", "sha256": "a039d59c0791b962b2aefd46ac68b2a2ba6c7eac363127b0aced608ddac3b8b8", "shared_library": false, "unvendored_tests": false, "version": "2024.2.0"}, "fiona": {"depends": ["attrs", "certifi", "setuptools", "six", "click", "cligj"], "file_name": "fiona-1.9.5-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["fiona"], "install_dir": "site", "name": "fiona", "package_type": "package", "sha256": "b048305f68aa333a90e59a819b6f5d561a44404fc2a760e60ecd2b18b1b1e58e", "shared_library": false, "unvendored_tests": true, "version": "1.9.5"}, "fiona-tests": {"depends": ["fiona"], "file_name": "fiona-tests.tar", "imports": [], "install_dir": "site", "name": "fiona-tests", "package_type": "package", "sha256": "9e71e2bcee3a9594222d9c31e48661f9578d79b293feae1f206f792116be7d4a", "shared_library": false, "unvendored_tests": false, "version": "1.9.5"}, "fonttools": {"depends": [], "file_name": "fonttools-4.51.0-py3-none-any.whl", "imports": ["fontTools"], "install_dir": "site", "name": "fonttools", "package_type": "package", "sha256": "b7d28f625ce7b8d90a4fce3d6af6fc6d86efd86d0c6591667f5687b7c98e9340", "shared_library": false, "unvendored_tests": false, "version": "4.51.0"}, "fpcast-test": {"depends": [], "file_name": "fpcast_test-0.1.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["fpcast_test"], "install_dir": "site", "name": "fpcast-test", "package_type": "package", "sha256": "29f86ce14d9e1735cf63b8b05538b6828bb1c42b308c436ac85696891e1c1e5c", "shared_library": false, "unvendored_tests": false, "version": "0.1.1"}, "freesasa": {"depends": [], "file_name": "freesasa-2.2.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["freesasa"], "install_dir": "site", "name": "freesasa", "package_type": "package", "sha256": "f6ba23b5bcca5d932514fdeaa3025dbcf419da7bc4f0c4f3ba20b6d5e934a0be", "shared_library": false, "unvendored_tests": false, "version": "2.2.1"}, "frozenlist": {"depends": [], "file_name": "frozenlist-1.4.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["frozenlist"], "install_dir": "site", "name": "frozenlist", "package_type": "package", "sha256": "990597bc07ef8cb7b6792f6da83639fd1723075d7a59fdd468d563baa9e58d86", "shared_library": false, "unvendored_tests": false, "version": "1.4.1"}, "fsspec": {"depends": [], "file_name": "fsspec-2024.3.1-py3-none-any.whl", "imports": ["fsspec"], "install_dir": "site", "name": "fsspec", "package_type": "package", "sha256": "bc33c8ef3acf1c9d884ddbb0539a4e3154a163584c2156d577a54792d38a618b", "shared_library": false, "unvendored_tests": true, "version": "2024.3.1"}, "fsspec-tests": {"depends": ["fsspec"], "file_name": "fsspec-tests.tar", "imports": [], "install_dir": "site", "name": "fsspec-tests", "package_type": "package", "sha256": "9928aa44d45072c4f56f8bbcd9bef3850b78b1164b574313864879a5be088b15", "shared_library": false, "unvendored_tests": false, "version": "2024.3.1"}, "future": {"depends": [], "file_name": "future-1.0.0-py3-none-any.whl", "imports": ["future"], "install_dir": "site", "name": "future", "package_type": "package", "sha256": "9fb6f5e21f52c2257849de2eaaa7f001ffdaabc85893174b91a8322bd7034314", "shared_library": false, "unvendored_tests": true, "version": "1.0.0"}, "future-tests": {"depends": ["future"], "file_name": "future-tests.tar", "imports": [], "install_dir": "site", "name": "future-tests", "package_type": "package", "sha256": "58dec98f9d485ba30fc3977d53ccbbebc06a88a07124cfc9e9ec8d37d22be47f", "shared_library": false, "unvendored_tests": false, "version": "1.0.0"}, "galpy": {"depends": ["numpy", "scipy", "matplotlib", "astropy", "future", "setuptools"], "file_name": "galpy-1.9.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["galpy"], "install_dir": "site", "name": "galpy", "package_type": "package", "sha256": "006e6a2eb6b79a2a087a4641c5ebc4d39ef6dac62b622c2809399244e7d002a3", "shared_library": false, "unvendored_tests": false, "version": "1.9.2"}, "gdal": {"depends": ["geos"], "file_name": "gdal-3.8.3.zip", "imports": [], "install_dir": "dynlib", "name": "gdal", "package_type": "shared_library", "sha256": "58e93a05f212bed8fd33998a0e10335ff57c612fed0f302f6ebdc9faf2f05024", "shared_library": true, "unvendored_tests": false, "version": "3.8.3"}, "gensim": {"depends": ["numpy", "scipy", "six", "smart_open", "wrapt"], "file_name": "gensim-4.3.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["gensim"], "install_dir": "site", "name": "gensim", "package_type": "package", "sha256": "90cf180dcde0f9ce7bf5d9b64aafb946045fef8e3c418ebf0f54c6cb96d0852d", "shared_library": false, "unvendored_tests": true, "version": "4.3.2"}, "gensim-tests": {"depends": ["gensim"], "file_name": "gensim-tests.tar", "imports": [], "install_dir": "site", "name": "gensim-tests", "package_type": "package", "sha256": "d1beb65d4a0280d477c83fd4d88678b71921dbe4f55faca6e631ac6d0a00927b", "shared_library": false, "unvendored_tests": false, "version": "4.3.2"}, "geopandas": {"depends": ["shapely", "fiona", "pyproj", "packaging", "pandas"], "file_name": "geopandas-0.14.3-py3-none-any.whl", "imports": ["geopandas"], "install_dir": "site", "name": "geopandas", "package_type": "package", "sha256": "2872e7e6761281281a7c3cda8330ba488650ad9a92dd92f3ef488461fa440dbf", "shared_library": false, "unvendored_tests": true, "version": "0.14.3"}, "geopandas-tests": {"depends": ["geopandas"], "file_name": "geopandas-tests.tar", "imports": [], "install_dir": "site", "name": "geopandas-tests", "package_type": "package", "sha256": "1078ca8cbc646b5ceddb58dfdd96ef462b283589538dc6a8e15a859655a0a07a", "shared_library": false, "unvendored_tests": false, "version": "0.14.3"}, "geos": {"depends": [], "file_name": "geos-3.12.1.zip", "imports": [], "install_dir": "dynlib", "name": "geos", "package_type": "shared_library", "sha256": "f2460ecedbdbc850c064c47fec2fb8bc848411d46b88b6540cd6539bdc2bf2c5", "shared_library": true, "unvendored_tests": false, "version": "3.12.1"}, "gmpy2": {"depends": [], "file_name": "gmpy2-2.1.5-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["gmpy2"], "install_dir": "site", "name": "gmpy2", "package_type": "package", "sha256": "ad8c6e1cc1077e7fa1cd9fe67bcd7997d348afc823b231a53994abca6d26cbd1", "shared_library": false, "unvendored_tests": false, "version": "2.1.5"}, "gsw": {"depends": ["numpy"], "file_name": "gsw-3.6.17-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["gsw"], "install_dir": "site", "name": "gsw", "package_type": "package", "sha256": "963053edf480a2ec69570549b345bd79d1c578ad6033645247d1bf5dff9950da", "shared_library": false, "unvendored_tests": true, "version": "3.6.17"}, "gsw-tests": {"depends": ["gsw"], "file_name": "gsw-tests.tar", "imports": [], "install_dir": "site", "name": "gsw-tests", "package_type": "package", "sha256": "b252565d8c205edadd2fb6d133cbf98f0eee7533b6a33796983481d767cc3a0c", "shared_library": false, "unvendored_tests": false, "version": "3.6.17"}, "h5py": {"depends": ["numpy", "pkgconfig"], "file_name": "h5py-3.11.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["h5py"], "install_dir": "site", "name": "h5py", "package_type": "package", "sha256": "72de1e23bb3fea83dddfe13b887ddd490d2b248128af9707877812f7ddfbcff2", "shared_library": false, "unvendored_tests": true, "version": "3.11.0"}, "h5py-tests": {"depends": ["h5py"], "file_name": "h5py-tests.tar", "imports": [], "install_dir": "site", "name": "h5py-tests", "package_type": "package", "sha256": "d3c7dd7f4070c0e662845c949b9c8ae8d5db3a7646a939fcb6b422626928d64c", "shared_library": false, "unvendored_tests": false, "version": "3.11.0"}, "hashlib": {"depends": ["openssl"], "file_name": "hashlib-1.0.0.zip", "imports": ["_hashlib"], "install_dir": "stdlib", "name": "hashlib", "package_type": "cpython_module", "sha256": "59224708879351a6f88707bc4c4b91c611c24c88633e3bc4c1e6d1a37e43a70e", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "html5lib": {"depends": ["webencodings", "six"], "file_name": "html5lib-1.1-py2.py3-none-any.whl", "imports": ["html5lib"], "install_dir": "site", "name": "html5lib", "package_type": "package", "sha256": "b184a5ae9bae2efe9360d11c5840bc76b080578974174e91dfd7b9b09bd6ddf2", "shared_library": false, "unvendored_tests": false, "version": "1.1"}, "idna": {"depends": [], "file_name": "idna-3.7-py3-none-any.whl", "imports": ["idna"], "install_dir": "site", "name": "idna", "package_type": "package", "sha256": "ff695f90301caac96e76ba066a34979f439601baa989b3ee85dd9e943dfbc0e2", "shared_library": false, "unvendored_tests": false, "version": "3.7"}, "igraph": {"depends": ["texttable"], "file_name": "igraph-0.11.4-cp39-abi3-pyodide_2024_0_wasm32.whl", "imports": ["igraph"], "install_dir": "site", "name": "igraph", "package_type": "package", "sha256": "b59b281431bd4dfc355e32fe9855111f30e044ae2f7fac3677817efc7b7632aa", "shared_library": false, "unvendored_tests": false, "version": "0.11.4"}, "imageio": {"depends": ["numpy", "pillow"], "file_name": "imageio-2.34.1-py3-none-any.whl", "imports": ["imageio"], "install_dir": "site", "name": "imageio", "package_type": "package", "sha256": "42b8160aff8ffd5d88a1c4810e1a550fb2e882c35e128b3de9e8ffc1235bf110", "shared_library": false, "unvendored_tests": false, "version": "2.34.1"}, "iniconfig": {"depends": [], "file_name": "iniconfig-2.0.0-py3-none-any.whl", "imports": ["iniconfig"], "install_dir": "site", "name": "iniconfig", "package_type": "package", "sha256": "84d8e37fe9b15641a7934913c071a85a3df3d8a839a8c878eae28dbe173bd0fb", "shared_library": false, "unvendored_tests": false, "version": "2.0.0"}, "ipython": {"depends": ["asttokens", "decorator", "executing", "matplotlib-inline", "prompt_toolkit", "pure_eval", "pygments", "six", "stack_data", "traitlets", "sqlite3", "wcwidth"], "file_name": "ipython-8.23.0-py3-none-any.whl", "imports": ["IPython"], "install_dir": "site", "name": "ipython", "package_type": "package", "sha256": "5ac05cc4a95b60456472eb7050c64cf8aceeefb22e2aacde5b2e91855f16151b", "shared_library": false, "unvendored_tests": true, "version": "8.23.0"}, "ipython-tests": {"depends": ["ipython"], "file_name": "ipython-tests.tar", "imports": [], "install_dir": "site", "name": "ipython-tests", "package_type": "package", "sha256": "2a4494426675ef7acef985a952985cb192b3006a7a8f98634b50b32af94f213e", "shared_library": false, "unvendored_tests": false, "version": "8.23.0"}, "jedi": {"depends": ["parso"], "file_name": "jedi-0.19.1-py2.py3-none-any.whl", "imports": ["jedi"], "install_dir": "site", "name": "jedi", "package_type": "package", "sha256": "eff67fc7fe830038a02aa18a4e10ae1ca55c6844c0ed25d59bdd2e91b14f50f2", "shared_library": false, "unvendored_tests": true, "version": "0.19.1"}, "jedi-tests": {"depends": ["jedi"], "file_name": "jedi-tests.tar", "imports": [], "install_dir": "site", "name": "jedi-tests", "package_type": "package", "sha256": "87e5b8f4b1740e8374e89752e9520251046a3f79dc93e379db946f53a5c3e180", "shared_library": false, "unvendored_tests": false, "version": "0.19.1"}, "jinja2": {"depends": ["markupsafe"], "file_name": "Jinja2-3.1.3-py3-none-any.whl", "imports": ["jinja2"], "install_dir": "site", "name": "Jinja2", "package_type": "package", "sha256": "a67af0936202917ce7e7c1bbf116f30b64faf51274969246d79df3906a377b51", "shared_library": false, "unvendored_tests": false, "version": "3.1.3"}, "joblib": {"depends": [], "file_name": "joblib-1.4.0-py3-none-any.whl", "imports": ["joblib"], "install_dir": "site", "name": "joblib", "package_type": "package", "sha256": "e4b7a2419a8e607ec8953559c551fa24c0d83a18835816dce8bf7b897979b482", "shared_library": false, "unvendored_tests": true, "version": "1.4.0"}, "joblib-tests": {"depends": ["joblib"], "file_name": "joblib-tests.tar", "imports": [], "install_dir": "site", "name": "joblib-tests", "package_type": "package", "sha256": "721f8b5c85c12ddc1636fe1a4d25a6f51873d2772788a36aea443dee64161213", "shared_library": false, "unvendored_tests": false, "version": "1.4.0"}, "jsonschema": {"depends": ["attrs", "pyrsistent", "referencing", "jsonschema_specifications"], "file_name": "jsonschema-4.21.1-py3-none-any.whl", "imports": ["jsonschema"], "install_dir": "site", "name": "jsonschema", "package_type": "package", "sha256": "e274e546d8d4d239aaae79464c0377dc348ea731dc98e15e1146593a53c48c6d", "shared_library": false, "unvendored_tests": true, "version": "4.21.1"}, "jsonschema-specifications": {"depends": [], "file_name": "jsonschema_specifications-2023.12.1-py3-none-any.whl", "imports": ["jsonschema_specifications"], "install_dir": "site", "name": "jsonschema_specifications", "package_type": "package", "sha256": "e16032c52a370236318c402a35d20fb35144a99632c2e93356e2af2588297174", "shared_library": false, "unvendored_tests": true, "version": "2023.12.1"}, "jsonschema-specifications-tests": {"depends": ["jsonschema_specifications"], "file_name": "jsonschema_specifications-tests.tar", "imports": [], "install_dir": "site", "name": "jsonschema_specifications-tests", "package_type": "package", "sha256": "a5175389f7d56db18f612a8c0f9c668559483ab7226f639efc1c680448a1c044", "shared_library": false, "unvendored_tests": false, "version": "2023.12.1"}, "jsonschema-tests": {"depends": ["jsonschema"], "file_name": "jsonschema-tests.tar", "imports": [], "install_dir": "site", "name": "jsonschema-tests", "package_type": "package", "sha256": "a8bf6fc28164c2dca80f1a50865febe8e4ee470014b6e439e75f911b9a7afc51", "shared_library": false, "unvendored_tests": false, "version": "4.21.1"}, "kiwisolver": {"depends": [], "file_name": "kiwisolver-1.4.5-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["kiwisolver"], "install_dir": "site", "name": "kiwisolver", "package_type": "package", "sha256": "ece362ebe2e2805091d82f4bdae35789bd014b1c6ca83022a3ca8304551a17cc", "shared_library": false, "unvendored_tests": false, "version": "1.4.5"}, "lakers-python": {"depends": [], "file_name": "lakers_python-0.3.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["lakers"], "install_dir": "site", "name": "lakers-python", "package_type": "package", "sha256": "94c9a4b0feb9a32b3540b07cbfa2f2f7dc32695587b133e20dc28e27f4faeb7d", "shared_library": false, "unvendored_tests": false, "version": "0.3.0"}, "lazy-loader": {"depends": [], "file_name": "lazy_loader-0.4-py3-none-any.whl", "imports": ["lazy_loader"], "install_dir": "site", "name": "lazy_loader", "package_type": "package", "sha256": "fa163e7874338185c113b0994437d0f2bf94a1407d81bdff0ea1438190828ed0", "shared_library": false, "unvendored_tests": true, "version": "0.4"}, "lazy-loader-tests": {"depends": ["lazy_loader"], "file_name": "lazy_loader-tests.tar", "imports": [], "install_dir": "site", "name": "lazy_loader-tests", "package_type": "package", "sha256": "a34c95e919538e5448d6bda24356a043f5213f548680d943414fc0b0d03f56e9", "shared_library": false, "unvendored_tests": false, "version": "0.4"}, "lazy-object-proxy": {"depends": [], "file_name": "lazy_object_proxy-1.10.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["lazy_object_proxy"], "install_dir": "site", "name": "lazy-object-proxy", "package_type": "package", "sha256": "9f1de00db989a27f085489e812d859b247b5eb9f2aac688f97312c0d8d77463c", "shared_library": false, "unvendored_tests": false, "version": "1.10.0"}, "libcst": {"depends": ["pyyaml"], "file_name": "libcst-1.3.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["libcst"], "install_dir": "site", "name": "libcst", "package_type": "package", "sha256": "14f21f1e4559f6767acdd7bd5c9b4ef0537086e8a2bf2b13cf005036e3099721", "shared_library": false, "unvendored_tests": true, "version": "1.3.1"}, "libcst-tests": {"depends": ["libcst"], "file_name": "libcst-tests.tar", "imports": [], "install_dir": "site", "name": "libcst-tests", "package_type": "package", "sha256": "b90c4887a9d13f47f0fb56921b5b83d234400df38d1e93daace4042592b6fcaf", "shared_library": false, "unvendored_tests": false, "version": "1.3.1"}, "libhdf5": {"depends": [], "file_name": "libhdf5-1.12.1.zip", "imports": [], "install_dir": "dynlib", "name": "libhdf5", "package_type": "shared_library", "sha256": "7f5499446b384110c001206f2730a797868d98aa4cddfe9a84cc2f8559d5ff08", "shared_library": true, "unvendored_tests": false, "version": "1.12.1"}, "libheif": {"depends": [], "file_name": "libheif-1.12.0.zip", "imports": [], "install_dir": "dynlib", "name": "libheif", "package_type": "shared_library", "sha256": "58fdc4de6cf6e875ffef57a8f22e09dea52a0227ec10fdb61508a7c64907aff6", "shared_library": true, "unvendored_tests": false, "version": "1.12.0"}, "libmagic": {"depends": [], "file_name": "libmagic-5.42.zip", "imports": [], "install_dir": "dynlib", "name": "libmagic", "package_type": "shared_library", "sha256": "7d75ca108a9c7869aa0850eaf0d115f1ea64c550a2e0e19718a7776c7d75b620", "shared_library": true, "unvendored_tests": false, "version": "5.42"}, "libnetcdf": {"depends": [], "file_name": "libnetcdf-4.9.2.zip", "imports": [], "install_dir": "dynlib", "name": "libnetcdf", "package_type": "shared_library", "sha256": "4ab07aa04206e3ac80980c19479118b4ad0898c5bfee9ab821a8afa8a54adeab", "shared_library": true, "unvendored_tests": false, "version": "4.9.2"}, "lightgbm": {"depends": ["numpy", "scipy", "scikit-learn"], "file_name": "lightgbm-4.3.0-py3-none-pyodide_2024_0_wasm32.whl", "imports": ["lightgbm"], "install_dir": "site", "name": "lightgbm", "package_type": "package", "sha256": "3c432113047c4d79c60f1d206689387a390825ad41d81177782972b5b77ac547", "shared_library": false, "unvendored_tests": false, "version": "4.3.0"}, "logbook": {"depends": ["ssl"], "file_name": "Logbook-1.7.0.post0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["logbook"], "install_dir": "site", "name": "logbook", "package_type": "package", "sha256": "9b44f19dad023f9dfb7e31826f0e5a54b93355491fcee67f234c1f7af981b734", "shared_library": false, "unvendored_tests": false, "version": "1.7.0.post0"}, "lxml": {"depends": [], "file_name": "lxml-5.2.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["lxml"], "install_dir": "site", "name": "lxml", "package_type": "package", "sha256": "e797697b231f5a8e055b25b93c8aa7f27aae5f16e399f0210749cec8478a72d5", "shared_library": false, "unvendored_tests": false, "version": "5.2.1"}, "lzma": {"depends": [], "file_name": "lzma-1.0.0.zip", "imports": ["lzma", "_lzma"], "install_dir": "stdlib", "name": "lzma", "package_type": "cpython_module", "sha256": "2d39887e78d890e177f60114f91a19b85d6207ba742c43a984710a11227ab9e8", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "markupsafe": {"depends": [], "file_name": "MarkupSafe-2.1.5-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["markupsafe"], "install_dir": "site", "name": "MarkupSafe", "package_type": "package", "sha256": "7910ac1be8f17f6cc2d361907f7839a88230298eccaf9ae1d2699a9eed47fc68", "shared_library": false, "unvendored_tests": false, "version": "2.1.5"}, "matplotlib": {"depends": ["cycler", "fonttools", "kiwisolver", "numpy", "packaging", "pillow", "pyparsing", "python-dateutil", "pytz", "matplotlib-pyodide"], "file_name": "matplotlib-3.5.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pylab", "mpl_toolkits", "matplotlib"], "install_dir": "site", "name": "matplotlib", "package_type": "package", "sha256": "30c97e6d60be94e12d2a2f180605378167ec6301405bb25506cfddc4f5f6a65f", "shared_library": false, "unvendored_tests": true, "version": "3.5.2"}, "matplotlib-inline": {"depends": ["traitlets"], "file_name": "matplotlib_inline-0.1.7-py3-none-any.whl", "imports": ["matplotlib-inline"], "install_dir": "site", "name": "matplotlib-inline", "package_type": "package", "sha256": "c84ab7a9da3b448e2b653673b9fe546ad097bed156fe24d3c392eaa73bfcc9ff", "shared_library": false, "unvendored_tests": false, "version": "0.1.7"}, "matplotlib-pyodide": {"depends": [], "file_name": "matplotlib_pyodide-0.2.2-py3-none-any.whl", "imports": ["matplotlib_pyodide"], "install_dir": "site", "name": "matplotlib-pyodide", "package_type": "package", "sha256": "204a3a683cab15c30e9d4b56b18ea0d6a09c35787ce7dcec249a21c7a6be7193", "shared_library": false, "unvendored_tests": false, "version": "0.2.2"}, "matplotlib-tests": {"depends": ["matplotlib"], "file_name": "matplotlib-tests.tar", "imports": [], "install_dir": "site", "name": "matplotlib-tests", "package_type": "package", "sha256": "55a6646cfb97d23f07ece4b3e923a148760b435cbbf9f658512d569e0c59cbc3", "shared_library": false, "unvendored_tests": false, "version": "3.5.2"}, "memory-allocator": {"depends": [], "file_name": "memory_allocator-0.1.4-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["memory_allocator"], "install_dir": "site", "name": "memory-allocator", "package_type": "package", "sha256": "e596337e30a43ab903559feb38f48bb6623b2672fc432417bb8ebe6c8b593191", "shared_library": false, "unvendored_tests": false, "version": "0.1.4"}, "micropip": {"depends": ["packaging"], "file_name": "micropip-0.6.0-py3-none-any.whl", "imports": ["micropip"], "install_dir": "site", "name": "micropip", "package_type": "package", "sha256": "eab82bfa421d1b241dc8f0d00a731776f1526726c2e1eff54a40c1817620141d", "shared_library": false, "unvendored_tests": false, "version": "0.6.0"}, "mmh3": {"depends": [], "file_name": "mmh3-4.1.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["mmh3"], "install_dir": "site", "name": "mmh3", "package_type": "package", "sha256": "f578483027ae436d63f97a53e51d258f8b9ab7c5a6407dac751cdaaaa17161e1", "shared_library": false, "unvendored_tests": false, "version": "4.1.0"}, "mne": {"depends": ["numpy", "scipy", "setuptools", "decorator", "lazy_loader", "packaging"], "file_name": "mne-1.7.0-py3-none-any.whl", "imports": ["mne"], "install_dir": "site", "name": "mne", "package_type": "package", "sha256": "f41e8b7b5c6e6568118bb06cd9764cab8f827f70cde9c93749adc9d45e79879e", "shared_library": false, "unvendored_tests": true, "version": "1.7.0"}, "mne-tests": {"depends": ["mne"], "file_name": "mne-tests.tar", "imports": [], "install_dir": "site", "name": "mne-tests", "package_type": "package", "sha256": "5fe253359ac4a14063613e8bad0776351b2053e3b7762ebadce4e16a2b083eaf", "shared_library": false, "unvendored_tests": false, "version": "1.7.0"}, "more-itertools": {"depends": [], "file_name": "more_itertools-10.2.0-py3-none-any.whl", "imports": ["more_itertools"], "install_dir": "site", "name": "more-itertools", "package_type": "package", "sha256": "ed80996de76b19681ab7001f0ef69eff1dda87e1bb82b3d9305c9542461460e1", "shared_library": false, "unvendored_tests": false, "version": "10.2.0"}, "mpmath": {"depends": [], "file_name": "mpmath-1.3.0-py3-none-any.whl", "imports": ["mpmath"], "install_dir": "site", "name": "mpmath", "package_type": "package", "sha256": "e069d4891a6d0d151e8a328be47269a8acd96653a0767f7e99541c055bbb2ea5", "shared_library": false, "unvendored_tests": true, "version": "1.3.0"}, "mpmath-tests": {"depends": ["mpmath"], "file_name": "mpmath-tests.tar", "imports": [], "install_dir": "site", "name": "mpmath-tests", "package_type": "package", "sha256": "d32b2add0e1762efb3d50d54de3e539c3421769709bf3d4516519d07050fb8bb", "shared_library": false, "unvendored_tests": false, "version": "1.3.0"}, "msgpack": {"depends": [], "file_name": "msgpack-1.0.8-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["msgpack"], "install_dir": "site", "name": "msgpack", "package_type": "package", "sha256": "e5013d7bca8b6b97a733589a6b7d71854bdf61faebe00fed35239e57352a846a", "shared_library": false, "unvendored_tests": false, "version": "1.0.8"}, "msgspec": {"depends": [], "file_name": "msgspec-0.18.6-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["msgspec"], "install_dir": "site", "name": "msgspec", "package_type": "package", "sha256": "3e653ae0c60e2071a29926eb6611c22c10ae66a4c7a475b6b0741d7f3ec07669", "shared_library": false, "unvendored_tests": false, "version": "0.18.6"}, "msprime": {"depends": ["numpy", "newick", "tskit", "demes", "rpds-py"], "file_name": "msprime-1.3.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["msprime"], "install_dir": "site", "name": "msprime", "package_type": "package", "sha256": "bbfdb250d75aa1fd336e486447738cba2c4e5746d5298c3d96d64b8b13e0a3b6", "shared_library": false, "unvendored_tests": false, "version": "1.3.1"}, "multidict": {"depends": [], "file_name": "multidict-6.0.5-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["multidict"], "install_dir": "site", "name": "multidict", "package_type": "package", "sha256": "e6378ead8893badd7f46cebd22b611bd564b1ea427f7299750dfceb0e3fb87d4", "shared_library": false, "unvendored_tests": false, "version": "6.0.5"}, "munch": {"depends": ["setuptools", "six"], "file_name": "munch-4.0.0-py2.py3-none-any.whl", "imports": ["munch"], "install_dir": "site", "name": "munch", "package_type": "package", "sha256": "1f8bc2bbb9eed143b0bda24e79fa05acb07400ac5be6094bbf2634b5169429b7", "shared_library": false, "unvendored_tests": false, "version": "4.0.0"}, "mypy": {"depends": [], "file_name": "mypy-1.9.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["mypyc", "mypy"], "install_dir": "site", "name": "mypy", "package_type": "package", "sha256": "afaa844b1ce2fe3dedd5c56d8bb72d78652d2ecb516f704cb07a532c5f5e4f1e", "shared_library": false, "unvendored_tests": true, "version": "1.9.0"}, "mypy-tests": {"depends": ["mypy"], "file_name": "mypy-tests.tar", "imports": [], "install_dir": "site", "name": "mypy-tests", "package_type": "package", "sha256": "a1a56a7e7da813156cd2f6d680906ca722e55241dc4d8e29b61337b76f356b8c", "shared_library": false, "unvendored_tests": false, "version": "1.9.0"}, "netcdf4": {"depends": ["numpy", "packaging", "h5py", "cftime", "certifi"], "file_name": "netCDF4-1.6.5-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["netCDF4"], "install_dir": "site", "name": "netcdf4", "package_type": "package", "sha256": "2658b0190db032ffa3bfd2e4752ec8f7d7630807cfd96a4dd6ccf6b77b14f143", "shared_library": false, "unvendored_tests": false, "version": "1.6.5"}, "networkx": {"depends": ["decorator", "setuptools", "matplotlib", "numpy"], "file_name": "networkx-3.3-py3-none-any.whl", "imports": ["networkx"], "install_dir": "site", "name": "networkx", "package_type": "package", "sha256": "630b08f32ae7c1063cefd545d4975ab1db56daff066fc2c5435a18bef79b5212", "shared_library": false, "unvendored_tests": true, "version": "3.3"}, "networkx-tests": {"depends": ["networkx"], "file_name": "networkx-tests.tar", "imports": [], "install_dir": "site", "name": "networkx-tests", "package_type": "package", "sha256": "1b12894a984c0f3225ac299f0c8ddbee8fb59c9f6197eda8857f6d6ed12460d8", "shared_library": false, "unvendored_tests": false, "version": "3.3"}, "newick": {"depends": [], "file_name": "newick-1.9.0-py2.py3-none-any.whl", "imports": ["newick"], "install_dir": "site", "name": "newick", "package_type": "package", "sha256": "ecee5d13f31b680bd9a19d14c8b32f63e328abd3ad5d5d61aba364061d6ffa8a", "shared_library": false, "unvendored_tests": false, "version": "1.9.0"}, "nh3": {"depends": [], "file_name": "nh3-0.2.17-cp37-abi3-pyodide_2024_0_wasm32.whl", "imports": ["nh3"], "install_dir": "site", "name": "nh3", "package_type": "package", "sha256": "2c63b0e3b30cabc5d5f1af1e03a8fa853394bfddf490565725c621c2c7d15af8", "shared_library": false, "unvendored_tests": false, "version": "0.2.17"}, "nlopt": {"depends": ["numpy"], "file_name": "nlopt-2.7.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["nlopt"], "install_dir": "site", "name": "nlopt", "package_type": "package", "sha256": "9cc0aca5476be5704f98e4417c5a57493dcbae70f0bbb502ff42f6c440f366bd", "shared_library": false, "unvendored_tests": false, "version": "2.7.0"}, "nltk": {"depends": ["regex", "sqlite3"], "file_name": "nltk-3.8.1-py3-none-any.whl", "imports": ["nltk"], "install_dir": "site", "name": "nltk", "package_type": "package", "sha256": "7354fa5fd517abb6d9090422151468de170162bc186c24e42cd3560f822c2ea2", "shared_library": false, "unvendored_tests": true, "version": "3.8.1"}, "nltk-tests": {"depends": ["nltk"], "file_name": "nltk-tests.tar", "imports": [], "install_dir": "site", "name": "nltk-tests", "package_type": "package", "sha256": "eee2bb4de9a70279b362b9d52ff6109fcb6ed56988e26a5d04d9d546d4b31578", "shared_library": false, "unvendored_tests": false, "version": "3.8.1"}, "numcodecs": {"depends": ["numpy", "msgpack"], "file_name": "numcodecs-0.11.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["numcodecs"], "install_dir": "site", "name": "numcodecs", "package_type": "package", "sha256": "01195b6e3e891adfd28f9365097ed43d5698bb3a80717e49f42214cd6f01562a", "shared_library": false, "unvendored_tests": true, "version": "0.11.0"}, "numcodecs-tests": {"depends": ["numcodecs"], "file_name": "numcodecs-tests.tar", "imports": [], "install_dir": "site", "name": "numcodecs-tests", "package_type": "package", "sha256": "0209af28c0c1b57f35f1046c01432029e6b37a49d865d76efde395dc717481aa", "shared_library": false, "unvendored_tests": false, "version": "0.11.0"}, "numpy": {"depends": [], "file_name": "numpy-1.26.4-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["numpy"], "install_dir": "site", "name": "numpy", "package_type": "package", "sha256": "c10c9f822e30a4d266da8af4538c528517886756ef4bda847777eda7a104142b", "shared_library": false, "unvendored_tests": true, "version": "1.26.4"}, "numpy-tests": {"depends": ["numpy"], "file_name": "numpy-tests.tar", "imports": [], "install_dir": "site", "name": "numpy-tests", "package_type": "package", "sha256": "d222be4109a2be7a7d7bc7dd03f8260e7ef44dc500cd0330d184d2c3f17ab726", "shared_library": false, "unvendored_tests": false, "version": "1.26.4"}, "openblas": {"depends": [], "file_name": "openblas-0.3.26.zip", "imports": [], "install_dir": "dynlib", "name": "openblas", "package_type": "shared_library", "sha256": "84b0cfb85c82a12c3c613624d55a85af0fb70bf61db156900d44997e39cf861d", "shared_library": true, "unvendored_tests": false, "version": "0.3.26"}, "opencv-python": {"depends": ["numpy"], "file_name": "opencv_python-4.9.0.80-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cv2"], "install_dir": "site", "name": "opencv-python", "package_type": "package", "sha256": "9a3944c2aa078fd83ebc0cbd96fd9fa35f110e8ad6785423f3a1bc4b80a51c0b", "shared_library": false, "unvendored_tests": false, "version": "4.9.0.80"}, "openssl": {"depends": [], "file_name": "openssl-1.1.1n.zip", "imports": [], "install_dir": "dynlib", "name": "openssl", "package_type": "shared_library", "sha256": "5932985b83ae88149e56d506640a1fa63412adf5c7a42d978fb8a9a0cee881a0", "shared_library": true, "unvendored_tests": false, "version": "1.1.1n"}, "optlang": {"depends": ["sympy", "six", "swiglpk"], "file_name": "optlang-1.8.1-py2.py3-none-any.whl", "imports": ["optlang"], "install_dir": "site", "name": "optlang", "package_type": "package", "sha256": "ec766f2a8467cf7cfe8fb059d44110a10f693ab22e9b0f760f96b3caaf4f79f1", "shared_library": false, "unvendored_tests": true, "version": "1.8.1"}, "optlang-tests": {"depends": ["optlang"], "file_name": "optlang-tests.tar", "imports": [], "install_dir": "site", "name": "optlang-tests", "package_type": "package", "sha256": "e2aa2e126345b7721a3b17a6a3e2deb5101c590f3f3dd3c062454d331b710172", "shared_library": false, "unvendored_tests": false, "version": "1.8.1"}, "orjson": {"depends": [], "file_name": "orjson-3.10.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["orjson"], "install_dir": "site", "name": "orjson", "package_type": "package", "sha256": "574f79510a3ac891c4f1c67c1278ffc54b3d1916db6c6e2dd2aca67e3ad6bb78", "shared_library": false, "unvendored_tests": false, "version": "3.10.1"}, "packaging": {"depends": [], "file_name": "packaging-23.2-py3-none-any.whl", "imports": ["packaging"], "install_dir": "site", "name": "packaging", "package_type": "package", "sha256": "86884228b6bdea119d430dc08ab208aa19c3682da6edfafb397ca3eb20089cbd", "shared_library": false, "unvendored_tests": false, "version": "23.2"}, "pandas": {"depends": ["numpy", "python-dateutil", "pytz"], "file_name": "pandas-2.2.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pandas"], "install_dir": "site", "name": "pandas", "package_type": "package", "sha256": "85a950037fdac0c1b8a5bb2058261873c24e92785bb7520e8d1ba2de1a14150d", "shared_library": false, "unvendored_tests": true, "version": "2.2.0"}, "pandas-tests": {"depends": ["pandas"], "file_name": "pandas-tests.tar", "imports": [], "install_dir": "site", "name": "pandas-tests", "package_type": "package", "sha256": "74ecf3958556ba0c95ed8d57a526c9ae6feeeb5038595a54d188aa1e0c8c4380", "shared_library": false, "unvendored_tests": false, "version": "2.2.0"}, "parso": {"depends": [], "file_name": "parso-0.8.4-py2.py3-none-any.whl", "imports": ["parso"], "install_dir": "site", "name": "parso", "package_type": "package", "sha256": "a93f1e7bbdfcc9e9899e8e63df2b7b91f776ffea2dc5838a88b21d7cba711ee2", "shared_library": false, "unvendored_tests": false, "version": "0.8.4"}, "patsy": {"depends": ["numpy", "six"], "file_name": "patsy-0.5.6-py2.py3-none-any.whl", "imports": ["patsy"], "install_dir": "site", "name": "patsy", "package_type": "package", "sha256": "7de961cd7eb912225eb0f5d1a1bc34cb36a82d898f83c13adc39d7c047819dee", "shared_library": false, "unvendored_tests": true, "version": "0.5.6"}, "patsy-tests": {"depends": ["patsy"], "file_name": "patsy-tests.tar", "imports": [], "install_dir": "site", "name": "patsy-tests", "package_type": "package", "sha256": "15b4b21c6e142be7af21501e95393b090402f99e853024485f61c73c600a6496", "shared_library": false, "unvendored_tests": false, "version": "0.5.6"}, "peewee": {"depends": ["sqlite3", "cffi"], "file_name": "peewee-3.17.3-py3-none-any.whl", "imports": ["peewee"], "install_dir": "site", "name": "peewee", "package_type": "package", "sha256": "29eee12de5b2239d60213f6da6b9122f5c9b005315e1bae57b494424283372d9", "shared_library": false, "unvendored_tests": true, "version": "3.17.3"}, "peewee-tests": {"depends": ["peewee"], "file_name": "peewee-tests.tar", "imports": [], "install_dir": "site", "name": "peewee-tests", "package_type": "package", "sha256": "b1133566d475a35f87d6a4f9a86c29a0106b1c6332e6f3159775956203d33a01", "shared_library": false, "unvendored_tests": false, "version": "3.17.3"}, "pillow": {"depends": [], "file_name": "pillow-10.2.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["PIL"], "install_dir": "site", "name": "Pillow", "package_type": "package", "sha256": "1fe8eba67033fde889723bdb9135f417ea3d9cc9030cbb61ec6d32abb0638bd1", "shared_library": false, "unvendored_tests": false, "version": "10.2.0"}, "pillow-heif": {"depends": ["cffi", "pillow", "libheif"], "file_name": "pillow_heif-0.8.0-cp36-abi3-pyodide_2024_0_wasm32.whl", "imports": ["pillow_heif"], "install_dir": "site", "name": "pillow_heif", "package_type": "package", "sha256": "d05d145c7843f3d34d57ed0a3544c9154a1a1244c7f71fac55bd853bc8da22c6", "shared_library": false, "unvendored_tests": false, "version": "0.8.0"}, "pkgconfig": {"depends": [], "file_name": "pkgconfig-1.5.5-py3-none-any.whl", "imports": ["pkgconfig"], "install_dir": "site", "name": "pkgconfig", "package_type": "package", "sha256": "3bd5eb33a6fee161d26e00883e4565eae392dbc3f68bf043bbf8b76f93991695", "shared_library": false, "unvendored_tests": false, "version": "1.5.5"}, "pluggy": {"depends": [], "file_name": "pluggy-1.5.0-py3-none-any.whl", "imports": ["pluggy"], "install_dir": "site", "name": "pluggy", "package_type": "package", "sha256": "162baf0eefec7a0e65b8ebda8dd691a6451145b013aefc1425ae50023b8552b3", "shared_library": false, "unvendored_tests": false, "version": "1.5.0"}, "pplpy": {"depends": ["gmpy2", "cysignals"], "file_name": "pplpy-0.8.10-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["ppl"], "install_dir": "site", "name": "pplpy", "package_type": "package", "sha256": "aaef0fe895cef232b9ed41e1c769ef8d9636c1006aaa3e4c9d459a1ae9e6ebb6", "shared_library": false, "unvendored_tests": false, "version": "0.8.10"}, "primecountpy": {"depends": ["cysignals"], "file_name": "primecountpy-0.1.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["primecountpy"], "install_dir": "site", "name": "primecountpy", "package_type": "package", "sha256": "8ef4249e2c31c5dc1737742c93594ba1eeb840830869590229fcb37546b8769f", "shared_library": false, "unvendored_tests": false, "version": "0.1.0"}, "prompt-toolkit": {"depends": [], "file_name": "prompt_toolkit-3.0.43-py3-none-any.whl", "imports": ["prompt_toolkit"], "install_dir": "site", "name": "prompt_toolkit", "package_type": "package", "sha256": "31e4bf82d28a05855e737265342a343324d615b9b665ac222be8c8bf3b12a6d6", "shared_library": false, "unvendored_tests": false, "version": "3.0.43"}, "protobuf": {"depends": [], "file_name": "protobuf-4.24.4-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["google"], "install_dir": "site", "name": "protobuf", "package_type": "package", "sha256": "69d01da9b062dcfe11e08c3bc48d358aab799b2d9f0702cc6a42a9877eccc3ea", "shared_library": false, "unvendored_tests": false, "version": "4.24.4"}, "pure-eval": {"depends": [], "file_name": "pure_eval-0.2.2-py3-none-any.whl", "imports": ["pure_eval"], "install_dir": "site", "name": "pure_eval", "package_type": "package", "sha256": "15a3b4c8c22c97a2207189012129ad316cd163a8d9456bc493af44328106d834", "shared_library": false, "unvendored_tests": false, "version": "0.2.2"}, "py": {"depends": [], "file_name": "py-1.11.0-py2.py3-none-any.whl", "imports": ["py"], "install_dir": "site", "name": "py", "package_type": "package", "sha256": "cdf2dc7b72617d5e310055680d434486978e472f28e1a6b3ad345f5f10e79060", "shared_library": false, "unvendored_tests": false, "version": "1.11.0"}, "pyclipper": {"depends": [], "file_name": "pyclipper-1.3.0.post5-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pyclipper"], "install_dir": "site", "name": "pyclipper", "package_type": "package", "sha256": "3103cc367a51206c6703289c754e40643cb22793eca42b7314cacbc9c3c64839", "shared_library": false, "unvendored_tests": false, "version": "1.3.0.post5"}, "pycparser": {"depends": [], "file_name": "pycparser-2.22-py3-none-any.whl", "imports": ["pycparser"], "install_dir": "site", "name": "pycparser", "package_type": "package", "sha256": "d6121cd029580634d218de56fedfbc1587be85fa0c52d662cda61721996c8e88", "shared_library": false, "unvendored_tests": false, "version": "2.22"}, "pycryptodome": {"depends": [], "file_name": "pycryptodome-3.20.0-cp35-abi3-pyodide_2024_0_wasm32.whl", "imports": ["Crypto"], "install_dir": "site", "name": "pycryptodome", "package_type": "package", "sha256": "378d4a822597bd1a4926b3ebf0616de8477404b121f81dbc8775bf5adf856d9f", "shared_library": false, "unvendored_tests": true, "version": "3.20.0"}, "pycryptodome-tests": {"depends": ["pycryptodome"], "file_name": "pycryptodome-tests.tar", "imports": [], "install_dir": "site", "name": "pycryptodome-tests", "package_type": "package", "sha256": "731112f543429160138433158d3dd7796a9a202d78347fa48cf94cc959f8ee85", "shared_library": false, "unvendored_tests": false, "version": "3.20.0"}, "pydantic": {"depends": ["typing-extensions", "pydantic_core", "annotated-types"], "file_name": "pydantic-2.7.0-py3-none-any.whl", "imports": ["pydantic"], "install_dir": "site", "name": "pydantic", "package_type": "package", "sha256": "c5476b78e59b2f5d130165b7f682624988e367e5e5cbdf3e3195827e8181ac12", "shared_library": false, "unvendored_tests": false, "version": "2.7.0"}, "pydantic-core": {"depends": [], "file_name": "pydantic_core-2.18.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pydantic_core"], "install_dir": "site", "name": "pydantic_core", "package_type": "package", "sha256": "f34a4d5ac7a669532745fec78262e1408b3d66a23d4f7a3a5abae1f7311481b1", "shared_library": false, "unvendored_tests": false, "version": "2.18.1"}, "pydecimal": {"depends": [], "file_name": "pydecimal-1.0.0.zip", "imports": ["_pydecimal"], "install_dir": "stdlib", "name": "pydecimal", "package_type": "cpython_module", "sha256": "37f30ae976fd7500977bd8203f355b1174507772d0a2e73a6315dd99893df405", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "pydoc-data": {"depends": [], "file_name": "pydoc_data-1.0.0.zip", "imports": ["pydoc_data"], "install_dir": "stdlib", "name": "pydoc_data", "package_type": "cpython_module", "sha256": "2faf63ca6bf73f7fbb6838a91ce5dc50de7073fb4018cc35b34fa4cf0adc98b5", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "pyerfa": {"depends": ["numpy"], "file_name": "pyerfa-2.0.1.4-cp39-abi3-pyodide_2024_0_wasm32.whl", "imports": ["erfa"], "install_dir": "site", "name": "pyerfa", "package_type": "package", "sha256": "bfe15a7b1618e441e7b067ecfaf0eea85982a25fa8c8b597687ad426d1b98874", "shared_library": false, "unvendored_tests": true, "version": "2.0.1.4"}, "pyerfa-tests": {"depends": ["pyerfa"], "file_name": "pyerfa-tests.tar", "imports": [], "install_dir": "site", "name": "pyerfa-tests", "package_type": "package", "sha256": "00a6acf3cb966800477bad45dc0b2b70974cd6deead86528ac98aad021eb59bf", "shared_library": false, "unvendored_tests": false, "version": "2.0.1.4"}, "pygame-ce": {"depends": [], "file_name": "pygame_ce-2.4.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pygame"], "install_dir": "site", "name": "pygame-ce", "package_type": "package", "sha256": "96a66dd45b7acb5e02ae109c8f17b20b829ff0e71b4c7fa006e7f9f214ab0445", "shared_library": false, "unvendored_tests": true, "version": "2.4.1"}, "pygame-ce-tests": {"depends": ["pygame-ce"], "file_name": "pygame-ce-tests.tar", "imports": [], "install_dir": "site", "name": "pygame-ce-tests", "package_type": "package", "sha256": "b94733f892344dab1d3b5341f2cf00c1e74d4675e77a4158523846c9fd2c23ad", "shared_library": false, "unvendored_tests": false, "version": "2.4.1"}, "pygments": {"depends": [], "file_name": "pygments-2.17.2-py3-none-any.whl", "imports": ["pygments"], "install_dir": "site", "name": "Pygments", "package_type": "package", "sha256": "fd1fad168f487093db9c480b701dab7191701f8039853faaed7bf65ad0325d92", "shared_library": false, "unvendored_tests": false, "version": "2.17.2"}, "pyheif": {"depends": ["cffi"], "file_name": "pyheif-0.7.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pyheif"], "install_dir": "site", "name": "pyheif", "package_type": "package", "sha256": "ade700ba2f57e5d52005e37c72ec19c6fb3c8688bd2b9d420252aa5ee8fa216f", "shared_library": false, "unvendored_tests": false, "version": "0.7.1"}, "pyiceberg": {"depends": ["click", "fsspec", "mmh3", "pydantic", "pyparsing", "requests", "rich", "sortedcontainers", "sqlalchemy", "strictyaml"], "file_name": "pyiceberg-0.6.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pyiceberg"], "install_dir": "site", "name": "pyiceberg", "package_type": "package", "sha256": "0657ed09e3443e36ffcdfefc03f55e27e8cb9229510615e74605514f71f2e347", "shared_library": false, "unvendored_tests": false, "version": "0.6.0"}, "pyinstrument": {"depends": [], "file_name": "pyinstrument-4.4.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pyinstrument"], "install_dir": "site", "name": "pyinstrument", "package_type": "package", "sha256": "962197295b54ca600193221fd541a18b8fbdbd3169d9dfd2d4f04bb0a1171d2c", "shared_library": false, "unvendored_tests": false, "version": "4.4.0"}, "pynacl": {"depends": ["cffi"], "file_name": "PyNaCl-1.5.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["nacl"], "install_dir": "site", "name": "pynacl", "package_type": "package", "sha256": "c45ae3e69ac81a4ba64ade625cb2ec98a06658f92bf74df13d27e54301ff3ee8", "shared_library": false, "unvendored_tests": false, "version": "1.5.0"}, "pyodide-http": {"depends": [], "file_name": "pyodide_http-0.2.1-py3-none-any.whl", "imports": ["pyodide_http"], "install_dir": "site", "name": "pyodide-http", "package_type": "package", "sha256": "4f961d7284fabccefe87d5b97fddd6d1d0166b79c7b14f98dd732250bd5415c6", "shared_library": false, "unvendored_tests": false, "version": "0.2.1"}, "pyparsing": {"depends": [], "file_name": "pyparsing-3.1.2-py3-none-any.whl", "imports": ["pyparsing"], "install_dir": "site", "name": "pyparsing", "package_type": "package", "sha256": "78648036d980e15a34bb9b433e6f9ed17b2763530e98ae151bf69a6312c8b1fe", "shared_library": false, "unvendored_tests": false, "version": "3.1.2"}, "pyproj": {"depends": ["certifi", "sqlite3"], "file_name": "pyproj-3.6.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pyproj"], "install_dir": "site", "name": "pyproj", "package_type": "package", "sha256": "1713c3d27547017c9f83bf8c9f9d45bb1889a753acb4c450d1331f4f1bb38b2c", "shared_library": false, "unvendored_tests": false, "version": "3.6.1"}, "pyrsistent": {"depends": [], "file_name": "pyrsistent-0.20.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["_pyrsistent_version", "pyrsistent"], "install_dir": "site", "name": "pyrsistent", "package_type": "package", "sha256": "e7497ecb5ef9cd3b67c26666c1a91c9cfaab0ae803d152bc8ad203f5d97aa528", "shared_library": false, "unvendored_tests": false, "version": "0.20.0"}, "pysam": {"depends": [], "file_name": "pysam-0.22.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pysam"], "install_dir": "site", "name": "pysam", "package_type": "package", "sha256": "15bb3baf6f9f386b6beb79698011d3bff886234ecb1d8cda83c9dfe99daeaa10", "shared_library": false, "unvendored_tests": false, "version": "0.22.0"}, "pyshp": {"depends": [], "file_name": "pyshp-2.3.1-py2.py3-none-any.whl", "imports": ["shapefile"], "install_dir": "site", "name": "pyshp", "package_type": "package", "sha256": "bc2f2e587708f283f37b2b134f3cf3c2f9fdc98aecabf73a98a3990b93a1185f", "shared_library": false, "unvendored_tests": false, "version": "2.3.1"}, "pytest": {"depends": ["atomicwrites", "attrs", "more-itertools", "pluggy", "py", "setuptools", "six", "iniconfig", "exceptiongroup"], "file_name": "pytest-8.1.1-py3-none-any.whl", "imports": ["_pytest", "pytest"], "install_dir": "site", "name": "pytest", "package_type": "package", "sha256": "2bd77e4cc3df63954e5a395753a6681814db97c9017ec0cb6ac432578e2757ba", "shared_library": false, "unvendored_tests": false, "version": "8.1.1"}, "pytest-asyncio": {"depends": ["pytest"], "file_name": "pytest_asyncio-0.23.7-py3-none-any.whl", "imports": ["pytest_asyncio"], "install_dir": "site", "name": "pytest-asyncio", "package_type": "package", "sha256": "0cd91bfadeb8b7c557f4a6636c53b44e033dbc151ccfaa01d681afbc5650be5c", "shared_library": false, "unvendored_tests": false, "version": "0.23.7"}, "pytest-benchmark": {"depends": [], "file_name": "pytest_benchmark-4.0.0-py3-none-any.whl", "imports": ["pytest_benchmark"], "install_dir": "site", "name": "pytest-benchmark", "package_type": "package", "sha256": "da3c7bad9be477d32785ade2a3e00257acccf812eea8611d810f9b68de596c4b", "shared_library": false, "unvendored_tests": false, "version": "4.0.0"}, "python-dateutil": {"depends": ["six"], "file_name": "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", "imports": ["dateutil"], "install_dir": "site", "name": "python-dateutil", "package_type": "package", "sha256": "72124fefc19129b4700363d4cf7a6b19ec8607d6c1871cb897c5902ffe8a75e6", "shared_library": false, "unvendored_tests": false, "version": "2.9.0.post0"}, "python-flint": {"depends": [], "file_name": "python_flint-0.6.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["flint"], "install_dir": "site", "name": "python-flint", "package_type": "package", "sha256": "3f708fb31c00215d8e7c96da8f32f09eef48e74b2ce7672379c0276af4c35ee5", "shared_library": false, "unvendored_tests": false, "version": "0.6.0"}, "python-magic": {"depends": ["libmagic"], "file_name": "python_magic-0.4.27-py2.py3-none-any.whl", "imports": ["magic"], "install_dir": "site", "name": "python-magic", "package_type": "package", "sha256": "c956eb1706dde53e4d17667de7ed7fe21409e325b4b87e1ac104ee5ce9d9ce6b", "shared_library": false, "unvendored_tests": false, "version": "0.4.27"}, "python-sat": {"depends": ["six"], "file_name": "python_sat-1.8.dev13-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pysat"], "install_dir": "site", "name": "python-sat", "package_type": "package", "sha256": "7f6dbb222b87561bb8018dad8114cdb50074f85dbe101ca53844e7e33f4819cd", "shared_library": false, "unvendored_tests": false, "version": "1.8.dev13"}, "python-solvespace": {"depends": [], "file_name": "python_solvespace-3.0.8-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["python_solvespace"], "install_dir": "site", "name": "python_solvespace", "package_type": "package", "sha256": "c9317db796a780c850fb308257f0f82a6abf2c6ccc7e7696b1ecf22ddea46b7c", "shared_library": false, "unvendored_tests": false, "version": "3.0.8"}, "pytz": {"depends": [], "file_name": "pytz-2024.1-py2.py3-none-any.whl", "imports": ["pytz"], "install_dir": "site", "name": "pytz", "package_type": "package", "sha256": "61fad9ab18df0cdc918f896176f04bddcf6af3e69b0a3ee079d1c8c2296c2eb9", "shared_library": false, "unvendored_tests": false, "version": "2024.1"}, "pywavelets": {"depends": ["numpy", "matplotlib", "scipy"], "file_name": "pywavelets-1.6.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pywt"], "install_dir": "site", "name": "pywavelets", "package_type": "package", "sha256": "c74ef240031ead1ba26895c2c9df30fb8b3adee6bee5a9b4778932e7c42176cd", "shared_library": false, "unvendored_tests": true, "version": "1.6.0"}, "pywavelets-tests": {"depends": ["pywavelets"], "file_name": "pywavelets-tests.tar", "imports": [], "install_dir": "site", "name": "pywavelets-tests", "package_type": "package", "sha256": "e986f2352666d8f639974520cdd465af737f184c20853319221759b093bae661", "shared_library": false, "unvendored_tests": false, "version": "1.6.0"}, "pyxel": {"depends": [], "file_name": "pyxel-1.9.10-cp37-abi3-pyodide_2024_0_wasm32.whl", "imports": ["pyxel"], "install_dir": "site", "name": "pyxel", "package_type": "package", "sha256": "f5296ff86cc841bc6364e796aa404a9a6fba6e6815bbe598c7e4856f0fda1790", "shared_library": false, "unvendored_tests": false, "version": "1.9.10"}, "pyxirr": {"depends": [], "file_name": "pyxirr-0.10.3-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pyxirr"], "install_dir": "site", "name": "pyxirr", "package_type": "package", "sha256": "c6bb6ca8787b5d147a35334ad5c3b3e32d613592e67c501bfc8aa62cf043b657", "shared_library": false, "unvendored_tests": false, "version": "0.10.3"}, "pyyaml": {"depends": [], "file_name": "PyYAML-6.0.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["_yaml", "yaml"], "install_dir": "site", "name": "pyyaml", "package_type": "package", "sha256": "fcc655bf19a4e4d531850846e8cdd6c695cd6a08610914c02355eaccf9df37a8", "shared_library": false, "unvendored_tests": false, "version": "6.0.1"}, "rebound": {"depends": ["numpy"], "file_name": "rebound-3.24.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["rebound"], "install_dir": "site", "name": "rebound", "package_type": "package", "sha256": "d71da2715813c4111439ddf9b1023e345fde62f0ce389f86d11e1cd41034b320", "shared_library": false, "unvendored_tests": false, "version": "3.24.2"}, "reboundx": {"depends": ["rebound", "numpy"], "file_name": "reboundx-3.10.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["reboundx"], "install_dir": "site", "name": "reboundx", "package_type": "package", "sha256": "1d730d60bb67351750af78edcc5f1f91516c7e0b7904040b6d3097c0dc0b672e", "shared_library": false, "unvendored_tests": false, "version": "3.10.1"}, "referencing": {"depends": ["attrs", "rpds-py"], "file_name": "referencing-0.34.0-py3-none-any.whl", "imports": ["referencing"], "install_dir": "site", "name": "referencing", "package_type": "package", "sha256": "00005aa754cc24dd42dc77b36364fe83fd37a35a569ac0a680699fbc8ec12bc5", "shared_library": false, "unvendored_tests": true, "version": "0.34.0"}, "referencing-tests": {"depends": ["referencing"], "file_name": "referencing-tests.tar", "imports": [], "install_dir": "site", "name": "referencing-tests", "package_type": "package", "sha256": "ff579b3a39cb6db40b127e5e650069926f305c02a73e2dfde8a20ba46714b74a", "shared_library": false, "unvendored_tests": false, "version": "0.34.0"}, "regex": {"depends": [], "file_name": "regex-2024.4.16-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["regex"], "install_dir": "site", "name": "regex", "package_type": "package", "sha256": "87b38d1d901362b1d660a8d0a02cbb8621c01db1adfa0c084805b6b4b589e7bf", "shared_library": false, "unvendored_tests": true, "version": "2024.4.16"}, "regex-tests": {"depends": ["regex"], "file_name": "regex-tests.tar", "imports": [], "install_dir": "site", "name": "regex-tests", "package_type": "package", "sha256": "9b73b248310d2bb965a4ec776ebd0806485091f2a3778b68fa37c2acfbfcba0e", "shared_library": false, "unvendored_tests": false, "version": "2024.4.16"}, "requests": {"depends": ["charset-normalizer", "idna", "urllib3", "certifi"], "file_name": "requests-2.31.0-py3-none-any.whl", "imports": ["requests"], "install_dir": "site", "name": "requests", "package_type": "package", "sha256": "0a7f834e19b70aed13f03a1a45ae566765e3dcc4478fca84b324bfb7059bee28", "shared_library": false, "unvendored_tests": false, "version": "2.31.0"}, "retrying": {"depends": ["six"], "file_name": "retrying-1.3.4-py3-none-any.whl", "imports": ["retrying"], "install_dir": "site", "name": "retrying", "package_type": "package", "sha256": "370e5da2df10b7b0d7189ebe216b45e7e4e4e62fcb3229658f8422e37fd53f41", "shared_library": false, "unvendored_tests": false, "version": "1.3.4"}, "rich": {"depends": [], "file_name": "rich-13.7.1-py3-none-any.whl", "imports": ["rich"], "install_dir": "site", "name": "rich", "package_type": "package", "sha256": "a7842e5d0e5aa20b984acdc280d1223b1efa8ae8cb3f9a44efd80cf11ca6663e", "shared_library": false, "unvendored_tests": false, "version": "13.7.1"}, "river": {"depends": ["numpy", "pandas", "pytest", "scipy"], "file_name": "river-0.19.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["river"], "install_dir": "site", "name": "river", "package_type": "package", "sha256": "687884ed62082a51dc6738cf72a48433217e144ac9af6e21a23f4d19c5763532", "shared_library": false, "unvendored_tests": true, "version": "0.19.0"}, "river-tests": {"depends": ["river"], "file_name": "river-tests.tar", "imports": [], "install_dir": "site", "name": "river-tests", "package_type": "package", "sha256": "bf6357775ee7dd444c8986341cded807ee9682d35d2dea6058543459db0de04b", "shared_library": false, "unvendored_tests": false, "version": "0.19.0"}, "robotraconteur": {"depends": ["numpy"], "file_name": "RobotRaconteur-1.2.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["RobotRaconteur"], "install_dir": "site", "name": "RobotRaconteur", "package_type": "package", "sha256": "78cc6e9d94f5b7f4bbdb9e281f95b6753c5d0ae2e5239fb16d0bd444da1dd32b", "shared_library": false, "unvendored_tests": false, "version": "1.2.0"}, "rpds-py": {"depends": [], "file_name": "rpds_py-0.18.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["rpds"], "install_dir": "site", "name": "rpds-py", "package_type": "package", "sha256": "08150e8488a9071ac40b809ca28dc317e25c9ac6bc401754c9d0d43f3c05a0d8", "shared_library": false, "unvendored_tests": false, "version": "0.18.0"}, "ruamel-yaml": {"depends": [], "file_name": "ruamel.yaml-0.18.6-py3-none-any.whl", "imports": ["ruamel"], "install_dir": "site", "name": "ruamel.yaml", "package_type": "package", "sha256": "4da4260b4d81fe018e94a2b76b576e3383cb5697036b4591d6475502a427315c", "shared_library": false, "unvendored_tests": false, "version": "0.18.6"}, "rust-panic-test": {"depends": [], "file_name": "rust_panic_test-1.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["rust-panic-test"], "install_dir": "site", "name": "rust-panic-test", "package_type": "package", "sha256": "c45bdbd832e425c5b5acfc98a494fa080b9d6cfa94df9a20dc4ec8c709ee8fa6", "shared_library": false, "unvendored_tests": false, "version": "1.0"}, "scikit-image": {"depends": ["packaging", "numpy", "scipy", "networkx", "pillow", "imageio", "pywavelets", "lazy_loader"], "file_name": "scikit_image-0.23.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["skimage"], "install_dir": "site", "name": "scikit-image", "package_type": "package", "sha256": "25ae5de718f112e14baac5544c68873231cecf237b5f6a45b6aba890f4ac0c55", "shared_library": false, "unvendored_tests": true, "version": "0.23.2"}, "scikit-image-tests": {"depends": ["scikit-image"], "file_name": "scikit-image-tests.tar", "imports": [], "install_dir": "site", "name": "scikit-image-tests", "package_type": "package", "sha256": "e7433cc9de48ee982e67dc30618af65de984822beaf3e32fedd1620d97b89c29", "shared_library": false, "unvendored_tests": false, "version": "0.23.2"}, "scikit-learn": {"depends": ["scipy", "joblib", "threadpoolctl"], "file_name": "scikit_learn-1.4.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["sklearn"], "install_dir": "site", "name": "scikit-learn", "package_type": "package", "sha256": "46556b2ec3661c6dcbaade40c55a2767d69e966253c7cebec8655af7b998b6e7", "shared_library": false, "unvendored_tests": true, "version": "1.4.2"}, "scikit-learn-tests": {"depends": ["scikit-learn"], "file_name": "scikit-learn-tests.tar", "imports": [], "install_dir": "site", "name": "scikit-learn-tests", "package_type": "package", "sha256": "45fd1811cf8de49a4ac7b17d32f3dfcc792c866625411bf5b7e691a5bf620833", "shared_library": false, "unvendored_tests": false, "version": "1.4.2"}, "scipy": {"depends": ["numpy", "openblas"], "file_name": "scipy-1.12.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["scipy"], "install_dir": "site", "name": "scipy", "package_type": "package", "sha256": "fd43c9ebcb0001bde4c8c0a3a2b3bb1aa6ed40ba32a98cbbb07cecfaa7b0bab0", "shared_library": false, "unvendored_tests": true, "version": "1.12.0"}, "scipy-tests": {"depends": ["scipy"], "file_name": "scipy-tests.tar", "imports": [], "install_dir": "site", "name": "scipy-tests", "package_type": "package", "sha256": "a2753d328ceef683c35ca1c3f2b5dac501f0ac7fca60a02251e01d703dc7b9dc", "shared_library": false, "unvendored_tests": false, "version": "1.12.0"}, "screed": {"depends": [], "file_name": "screed-1.1.3-py2.py3-none-any.whl", "imports": ["bigtests", "screed"], "install_dir": "site", "name": "screed", "package_type": "package", "sha256": "935c19bb795d013a0cc954db20da50c2779fe0be2c12573e07ffe5998851df4f", "shared_library": false, "unvendored_tests": true, "version": "1.1.3"}, "screed-tests": {"depends": ["screed"], "file_name": "screed-tests.tar", "imports": [], "install_dir": "site", "name": "screed-tests", "package_type": "package", "sha256": "3e909e23f581e381b82b4f64a628da3d6293925c39bd441f20d3c6474eae1477", "shared_library": false, "unvendored_tests": false, "version": "1.1.3"}, "setuptools": {"depends": ["pyparsing"], "file_name": "setuptools-69.5.1-py3-none-any.whl", "imports": ["_distutils_hack", "pkg_resources", "setuptools"], "install_dir": "site", "name": "setuptools", "package_type": "package", "sha256": "fa56d8b315734a66836390d4ed0edf5f83147551b057464a1a419fb9261545ba", "shared_library": false, "unvendored_tests": false, "version": "69.5.1"}, "shapely": {"depends": ["numpy"], "file_name": "shapely-2.0.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["shapely"], "install_dir": "site", "name": "shapely", "package_type": "package", "sha256": "a3ba52e4c181242a8519819bae6e070f224acc30d534b25c65d2644d2644ffc5", "shared_library": false, "unvendored_tests": true, "version": "2.0.2"}, "shapely-tests": {"depends": ["shapely"], "file_name": "shapely-tests.tar", "imports": [], "install_dir": "site", "name": "shapely-tests", "package_type": "package", "sha256": "157c66213633d112a88d326efe1900fccb9ff4d625a6e7f7154b7eeec57188a0", "shared_library": false, "unvendored_tests": false, "version": "2.0.2"}, "sharedlib-test": {"depends": [], "file_name": "sharedlib-test-1.0.zip", "imports": [], "install_dir": "dynlib", "name": "sharedlib-test", "package_type": "shared_library", "sha256": "987d2b654f6f0b02cbb5879999ae1eadc2c15d3dbc54c8553ef88ba3570e55cc", "shared_library": true, "unvendored_tests": false, "version": "1.0"}, "sharedlib-test-py": {"depends": ["sharedlib-test"], "file_name": "sharedlib_test_py-1.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["sharedlib_test"], "install_dir": "site", "name": "sharedlib-test-py", "package_type": "package", "sha256": "f8c6615b993fa484cd33b16a0920b88279963409a8f446f3965e6f8e25c62a16", "shared_library": false, "unvendored_tests": false, "version": "1.0"}, "simplejson": {"depends": [], "file_name": "simplejson-3.19.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["simplejson"], "install_dir": "site", "name": "simplejson", "package_type": "package", "sha256": "59cdd8f09fbd42963ac260f70c39f3a8f1e949bc4c0c9f660d21aebe7d07427a", "shared_library": false, "unvendored_tests": true, "version": "3.19.2"}, "simplejson-tests": {"depends": ["simplejson"], "file_name": "simplejson-tests.tar", "imports": [], "install_dir": "site", "name": "simplejson-tests", "package_type": "package", "sha256": "2db7c74e01d141b9cf2e0e14287e904693c057c2835ac7688c2b7e5ecbe2da43", "shared_library": false, "unvendored_tests": false, "version": "3.19.2"}, "sisl": {"depends": ["pyparsing", "numpy", "scipy", "tqdm", "xarray", "pandas", "matplotlib"], "file_name": "sisl-0.14.3-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["sisl_toolbox", "sisl"], "install_dir": "site", "name": "sisl", "package_type": "package", "sha256": "c5b4f1c124538cd06b1b8436399cd70d368734cffec936ea4b959ba3fda2daa2", "shared_library": false, "unvendored_tests": true, "version": "0.14.3"}, "sisl-tests": {"depends": ["sisl"], "file_name": "sisl-tests.tar", "imports": [], "install_dir": "site", "name": "sisl-tests", "package_type": "package", "sha256": "b9aec875de3fe75ec0f960f2a0e8fa03abc3b71fd64dca341884322a7228be94", "shared_library": false, "unvendored_tests": false, "version": "0.14.3"}, "six": {"depends": [], "file_name": "six-1.16.0-py2.py3-none-any.whl", "imports": ["six"], "install_dir": "site", "name": "six", "package_type": "package", "sha256": "0a83210b1701d580d02ef41faed649acadd852beb3444b267454136596ef00e7", "shared_library": false, "unvendored_tests": false, "version": "1.16.0"}, "smart-open": {"depends": [], "file_name": "smart_open-7.0.4-py3-none-any.whl", "imports": ["smart_open"], "install_dir": "site", "name": "smart_open", "package_type": "package", "sha256": "70dbc8228ad1025bb482ee0953bda4119bf345ac7145cbe7a983cb98d972255c", "shared_library": false, "unvendored_tests": false, "version": "7.0.4"}, "sortedcontainers": {"depends": [], "file_name": "sortedcontainers-2.4.0-py2.py3-none-any.whl", "imports": ["sortedcontainers"], "install_dir": "site", "name": "sortedcontainers", "package_type": "package", "sha256": "ddf3c9461dafb16bf93f8e1c7a8aedf2cdfc3e2a82a002c95181f849ec0f5c7f", "shared_library": false, "unvendored_tests": false, "version": "2.4.0"}, "soupsieve": {"depends": [], "file_name": "soupsieve-2.5-py3-none-any.whl", "imports": ["soupsieve"], "install_dir": "site", "name": "soupsieve", "package_type": "package", "sha256": "abccc30d90398a168ba99e682eee0a1e50a8da6392f550c75f301fdbd133be6b", "shared_library": false, "unvendored_tests": false, "version": "2.5"}, "sourmash": {"depends": ["screed", "cffi", "deprecation", "cachetools", "numpy", "matplotlib", "scipy", "sqlite3", "bitstring"], "file_name": "sourmash-4.8.8-py3-none-pyodide_2024_0_wasm32.whl", "imports": ["sourmash"], "install_dir": "site", "name": "sourmash", "package_type": "package", "sha256": "790287efb73963a5b789cb67861b75a5103dd30b05aca0067f102fcf4f61cbb3", "shared_library": false, "unvendored_tests": false, "version": "4.8.8"}, "sparseqr": {"depends": ["pycparser", "cffi", "numpy", "scipy", "suitesparse"], "file_name": "sparseqr-1.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["sparseqr"], "install_dir": "site", "name": "sparseqr", "package_type": "package", "sha256": "9af9f2882162e8dfd949c38f89fc27d0bb00372ddc1829e171a4eaa3d85775c8", "shared_library": false, "unvendored_tests": false, "version": "1.2"}, "sqlalchemy": {"depends": ["sqlite3", "typing-extensions"], "file_name": "SQLAlchemy-2.0.29-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["sqlalchemy"], "install_dir": "site", "name": "sqlalchemy", "package_type": "package", "sha256": "12ed98aeef7891b851da223f80fcb8b86ded7a2a3488f8ccc4cdc1492dc68dfb", "shared_library": false, "unvendored_tests": true, "version": "2.0.29"}, "sqlalchemy-tests": {"depends": ["sqlalchemy"], "file_name": "sqlalchemy-tests.tar", "imports": [], "install_dir": "site", "name": "sqlalchemy-tests", "package_type": "package", "sha256": "078c97f31260f21506eff4348999ebeb60f2fb8c1e5b47b705db251c7e80d5c9", "shared_library": false, "unvendored_tests": false, "version": "2.0.29"}, "sqlite3": {"depends": [], "file_name": "sqlite3-1.0.0.zip", "imports": ["sqlite3", "_sqlite3"], "install_dir": "stdlib", "name": "sqlite3", "package_type": "cpython_module", "sha256": "282c66885fd551c68287af261720f806429c8835a5f1b6b23db68f8df471eef4", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "ssl": {"depends": ["openssl"], "file_name": "ssl-1.0.0.zip", "imports": ["ssl", "_ssl"], "install_dir": "stdlib", "name": "ssl", "package_type": "cpython_module", "sha256": "16f0114b6a9f32ee8f4ff214cbf443044a25176631e7b9745dd28f045bcf5552", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "stack-data": {"depends": [], "file_name": "stack_data-0.6.3-py3-none-any.whl", "imports": ["stack_data"], "install_dir": "site", "name": "stack_data", "package_type": "package", "sha256": "d026617911a4f4e38f28202921abe5087555f94a132873e8e0098b5529752149", "shared_library": false, "unvendored_tests": false, "version": "0.6.3"}, "statsmodels": {"depends": ["numpy", "scipy", "pandas", "patsy", "packaging"], "file_name": "statsmodels-0.14.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["statsmodels"], "install_dir": "site", "name": "statsmodels", "package_type": "package", "sha256": "4ddc1d42dd5be3a1f4eea68053ee2a4c1ae84693d9fe6622577c347180d272c4", "shared_library": false, "unvendored_tests": true, "version": "0.14.2"}, "statsmodels-tests": {"depends": ["statsmodels"], "file_name": "statsmodels-tests.tar", "imports": [], "install_dir": "site", "name": "statsmodels-tests", "package_type": "package", "sha256": "1c6ee90ae7fd0f8e833cc85955d4040d43113ae0ece5619013352cd94bc66aa1", "shared_library": false, "unvendored_tests": false, "version": "0.14.2"}, "strictyaml": {"depends": ["python-dateutil"], "file_name": "strictyaml-1.7.3-py3-none-any.whl", "imports": ["strictyaml"], "install_dir": "site", "name": "strictyaml", "package_type": "package", "sha256": "e12df44badb7fe5e3d4408c0fa14026d9e35a15db5c12131722e93b6ed0e5a0f", "shared_library": false, "unvendored_tests": false, "version": "1.7.3"}, "suitesparse": {"depends": ["openblas"], "file_name": "suitesparse-5.11.0.zip", "imports": [], "install_dir": "dynlib", "name": "suitesparse", "package_type": "shared_library", "sha256": "2e3e748c1460217f8ae8fae1e47c41a0f1577f340b24b567fbd44460b61c990f", "shared_library": true, "unvendored_tests": false, "version": "5.11.0"}, "svgwrite": {"depends": [], "file_name": "svgwrite-1.4.3-py3-none-any.whl", "imports": ["svgwrite"], "install_dir": "site", "name": "svgwrite", "package_type": "package", "sha256": "e38722a663d8c1c6804c66688ac2e9f87073c426fa78addf2ed4e7d5bce6ce8e", "shared_library": false, "unvendored_tests": false, "version": "1.4.3"}, "swiglpk": {"depends": [], "file_name": "swiglpk-5.0.10-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["swiglpk"], "install_dir": "site", "name": "swiglpk", "package_type": "package", "sha256": "2cddba51805cfbdf5970b965d51176fec5ca8e11c3301a6b0cb6dd692f9100f4", "shared_library": false, "unvendored_tests": false, "version": "5.0.10"}, "sympy": {"depends": ["mpmath"], "file_name": "sympy-1.12-py3-none-any.whl", "imports": ["isympy", "sympy"], "install_dir": "site", "name": "sympy", "package_type": "package", "sha256": "35906b1f6c338c9dab20fd82bd82e8ae6fd4124c74db5704c4aac23d7b496220", "shared_library": false, "unvendored_tests": true, "version": "1.12"}, "sympy-tests": {"depends": ["sympy"], "file_name": "sympy-tests.tar", "imports": [], "install_dir": "site", "name": "sympy-tests", "package_type": "package", "sha256": "c7323a1d298b3a253e75c82e047e57e169ac607a46f689506804a06d288ebf88", "shared_library": false, "unvendored_tests": false, "version": "1.12"}, "tblib": {"depends": [], "file_name": "tblib-3.0.0-py3-none-any.whl", "imports": ["tblib"], "install_dir": "site", "name": "tblib", "package_type": "package", "sha256": "910a238d40b55351cd9147027bc66815dcc8d0f47e46cb5015c264f307eda233", "shared_library": false, "unvendored_tests": false, "version": "3.0.0"}, "termcolor": {"depends": [], "file_name": "termcolor-2.4.0-py3-none-any.whl", "imports": ["termcolor"], "install_dir": "site", "name": "termcolor", "package_type": "package", "sha256": "32291a3bd0a028e9dc2f7b1943ea548254cd2c87275185f0fbb3d92fe59fa5de", "shared_library": false, "unvendored_tests": false, "version": "2.4.0"}, "test": {"depends": [], "file_name": "test-1.0.0.zip", "imports": ["test"], "install_dir": "stdlib", "name": "test", "package_type": "cpython_module", "sha256": "d7df971909abce251e3f93919cae86515fcb25da8c05897088b064d2bb0cf3fd", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "texttable": {"depends": [], "file_name": "texttable-1.7.0-py2.py3-none-any.whl", "imports": ["texttable"], "install_dir": "site", "name": "texttable", "package_type": "package", "sha256": "2b3df5156bacec37e61d6aff9e2bba5e063e0bde404d9686d208828069d25eb3", "shared_library": false, "unvendored_tests": false, "version": "1.7.0"}, "threadpoolctl": {"depends": [], "file_name": "threadpoolctl-3.4.0-py3-none-any.whl", "imports": ["threadpoolctl"], "install_dir": "site", "name": "threadpoolctl", "package_type": "package", "sha256": "13d53a6213d7850ebdfeff0cf865d92fdcf8c5c60d8b6f77f7bf88d6f5240358", "shared_library": false, "unvendored_tests": false, "version": "3.4.0"}, "tomli": {"depends": [], "file_name": "tomli-2.0.1-py3-none-any.whl", "imports": ["tomli"], "install_dir": "site", "name": "tomli", "package_type": "package", "sha256": "fe237f8d353ee155794069bf4567d4f64c7ffab7c671dd03017af882812a81ef", "shared_library": false, "unvendored_tests": false, "version": "2.0.1"}, "tomli-w": {"depends": [], "file_name": "tomli_w-1.0.0-py3-none-any.whl", "imports": ["tomli_w"], "install_dir": "site", "name": "tomli-w", "package_type": "package", "sha256": "90d38f78e45d8a0ef09247b492ecbf1acd26cd2055c5e614bd4d045c23fa804f", "shared_library": false, "unvendored_tests": false, "version": "1.0.0"}, "toolz": {"depends": [], "file_name": "toolz-0.12.1-py3-none-any.whl", "imports": ["tlz", "toolz"], "install_dir": "site", "name": "toolz", "package_type": "package", "sha256": "5a8a48f04dc0f125dc86570008b3c68b0dd49da70ba781f54fb17fcd3cb80e15", "shared_library": false, "unvendored_tests": true, "version": "0.12.1"}, "toolz-tests": {"depends": ["toolz"], "file_name": "toolz-tests.tar", "imports": [], "install_dir": "site", "name": "toolz-tests", "package_type": "package", "sha256": "b1523d82e58c55d07a831ae56c863654d2b0ce0ca63e4f70b8cda7dfb7b05002", "shared_library": false, "unvendored_tests": false, "version": "0.12.1"}, "tqdm": {"depends": [], "file_name": "tqdm-4.66.2-py3-none-any.whl", "imports": ["tqdm"], "install_dir": "site", "name": "tqdm", "package_type": "package", "sha256": "7b19ff239d41ef0f38186212be18a4e639a269117ad3e1ff53654440b85fb1a7", "shared_library": false, "unvendored_tests": false, "version": "4.66.2"}, "traitlets": {"depends": [], "file_name": "traitlets-5.14.3-py3-none-any.whl", "imports": ["traitlets"], "install_dir": "site", "name": "traitlets", "package_type": "package", "sha256": "733a21ebecede8b2908e51079b63cb965f91d80fddb888a0ebec2a7180c596e0", "shared_library": false, "unvendored_tests": true, "version": "5.14.3"}, "traitlets-tests": {"depends": ["traitlets"], "file_name": "traitlets-tests.tar", "imports": [], "install_dir": "site", "name": "traitlets-tests", "package_type": "package", "sha256": "8816479a9aa463d6922b5dfe3495ce5ea566946779a6284bbb0bec81848b9b94", "shared_library": false, "unvendored_tests": false, "version": "5.14.3"}, "traits": {"depends": [], "file_name": "traits-6.4.3-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["traits"], "install_dir": "site", "name": "traits", "package_type": "package", "sha256": "9a07275f3c3e277d3b0b86b6f71d0ae578911cc35fcabf524a39eaa97354770d", "shared_library": false, "unvendored_tests": true, "version": "6.4.3"}, "traits-tests": {"depends": ["traits"], "file_name": "traits-tests.tar", "imports": [], "install_dir": "site", "name": "traits-tests", "package_type": "package", "sha256": "8488e716aaa1872460fe2b3ecc55cc25fd66630571589cf737ee4567c4e84088", "shared_library": false, "unvendored_tests": false, "version": "6.4.3"}, "tskit": {"depends": ["numpy", "svgwrite", "jsonschema", "rpds-py"], "file_name": "tskit-0.5.6-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["tskit"], "install_dir": "site", "name": "tskit", "package_type": "package", "sha256": "94dcebf331a5970c86ad61624451d192efe8926ba9fda1294cb1a3c6bbbc7cee", "shared_library": false, "unvendored_tests": false, "version": "0.5.6"}, "typing-extensions": {"depends": [], "file_name": "typing_extensions-4.11.0-py3-none-any.whl", "imports": ["typing_extensions"], "install_dir": "site", "name": "typing-extensions", "package_type": "package", "sha256": "7e1e3074d6f5f246f99b58389e78e5bc6aa376758bdaa29e996a344b4b2a9fe3", "shared_library": false, "unvendored_tests": false, "version": "4.11.0"}, "tzdata": {"depends": [], "file_name": "tzdata-2024.1-py2.py3-none-any.whl", "imports": ["tzdata"], "install_dir": "site", "name": "tzdata", "package_type": "package", "sha256": "84cfe3caac1a8b61dac8e8c37861f6e1e2e7c32043c0c7054024dc6b3af05e4a", "shared_library": false, "unvendored_tests": false, "version": "2024.1"}, "uncertainties": {"depends": ["future"], "file_name": "uncertainties-3.1.7-py2.py3-none-any.whl", "imports": ["uncertainties"], "install_dir": "site", "name": "uncertainties", "package_type": "package", "sha256": "adc2df1c7ec1c5f9aa9399b2c7ab6e447e92f34058eaa9c41631f2ca8cdf11e5", "shared_library": false, "unvendored_tests": true, "version": "3.1.7"}, "uncertainties-tests": {"depends": ["uncertainties"], "file_name": "uncertainties-tests.tar", "imports": [], "install_dir": "site", "name": "uncertainties-tests", "package_type": "package", "sha256": "9d9f8ac65a128647e652ee300f58bf7403c2651756c159efff327121a2d7f219", "shared_library": false, "unvendored_tests": false, "version": "3.1.7"}, "unyt": {"depends": ["numpy", "packaging", "sympy"], "file_name": "unyt-3.0.2-py3-none-any.whl", "imports": ["unyt"], "install_dir": "site", "name": "unyt", "package_type": "package", "sha256": "9b008dea3d2ce9815b612750d77dda74e8cbefae8e9ef6b626cc4228d35cb7cf", "shared_library": false, "unvendored_tests": true, "version": "3.0.2"}, "unyt-tests": {"depends": ["unyt"], "file_name": "unyt-tests.tar", "imports": [], "install_dir": "site", "name": "unyt-tests", "package_type": "package", "sha256": "873beb379f957a5ecda203f2a1f132ec3ccadef4e55d50ea64808ac10cda244c", "shared_library": false, "unvendored_tests": false, "version": "3.0.2"}, "urllib3": {"depends": [], "file_name": "urllib3-2.2.1-py3-none-any.whl", "imports": ["urllib3"], "install_dir": "site", "name": "urllib3", "package_type": "package", "sha256": "22a5514a2a5f02204e5447b8bc5da248d41df1c024b64bcbdf6ebf1223fd58b8", "shared_library": false, "unvendored_tests": false, "version": "2.2.1"}, "wcwidth": {"depends": [], "file_name": "wcwidth-0.2.13-py2.py3-none-any.whl", "imports": ["wcwidth"], "install_dir": "site", "name": "wcwidth", "package_type": "package", "sha256": "4a5f895f085bea28754abf714366b7408bd26f369de4dedb7891e311bed78ef9", "shared_library": false, "unvendored_tests": false, "version": "0.2.13"}, "webencodings": {"depends": [], "file_name": "webencodings-0.5.1-py2.py3-none-any.whl", "imports": ["webencodings"], "install_dir": "site", "name": "webencodings", "package_type": "package", "sha256": "4699328afd0389bd463766f6fa6ef38d2eb69863ef132d2b52f138ccc77ab426", "shared_library": false, "unvendored_tests": false, "version": "0.5.1"}, "wordcloud": {"depends": ["matplotlib"], "file_name": "wordcloud-1.9.3-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["wordcloud"], "install_dir": "site", "name": "wordcloud", "package_type": "package", "sha256": "7f84d4897cfdd686f5f057fa811b8144530e2548c815fde8f8f8b4d2e2238c0f", "shared_library": false, "unvendored_tests": false, "version": "1.9.3"}, "wrapt": {"depends": [], "file_name": "wrapt-1.16.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["wrapt"], "install_dir": "site", "name": "wrapt", "package_type": "package", "sha256": "569a153991fb24b3dc3b737f872ba1a618d5147a1408fcf1210e1a0f6a5eb91c", "shared_library": false, "unvendored_tests": false, "version": "1.16.0"}, "xarray": {"depends": ["numpy", "packaging", "pandas"], "file_name": "xarray-2024.3.0-py3-none-any.whl", "imports": ["xarray"], "install_dir": "site", "name": "xarray", "package_type": "package", "sha256": "19658b3fdd5e2c9805b2009ef74b45c13f8754c8266c99f3eb3b99d745ea91ca", "shared_library": false, "unvendored_tests": true, "version": "2024.3.0"}, "xarray-tests": {"depends": ["xarray"], "file_name": "xarray-tests.tar", "imports": [], "install_dir": "site", "name": "xarray-tests", "package_type": "package", "sha256": "6e036c3d5cdc08948d87aa19bf146f17e84bf6ab4ede1e5340b70cfbd2ce7c12", "shared_library": false, "unvendored_tests": false, "version": "2024.3.0"}, "xgboost": {"depends": ["numpy", "scipy", "setuptools"], "file_name": "xgboost-2.1.0.dev0-py3-none-pyodide_2024_0_wasm32.whl", "imports": ["xgboost"], "install_dir": "site", "name": "xgboost", "package_type": "package", "sha256": "37ae5c5c8c8fed5decaaf34b59fc2d2fd2409c24b2f402658d92df5ad5a81754", "shared_library": false, "unvendored_tests": false, "version": "2.1.0.dev0"}, "xlrd": {"depends": [], "file_name": "xlrd-2.0.1-py2.py3-none-any.whl", "imports": ["xlrd"], "install_dir": "site", "name": "xlrd", "package_type": "package", "sha256": "f771b0b6701a0e343f9597d2ace24f8c23bc14af6fe1297374734c00c33fd353", "shared_library": false, "unvendored_tests": false, "version": "2.0.1"}, "xxhash": {"depends": [], "file_name": "xxhash-3.4.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["xxhash"], "install_dir": "site", "name": "xxhash", "package_type": "package", "sha256": "5057d7c27750fbd7e5f54f1b372f5db3f3db3bc990864df2ccdb15639b0608d1", "shared_library": false, "unvendored_tests": false, "version": "3.4.1"}, "xyzservices": {"depends": [], "file_name": "xyzservices-2024.4.0-py3-none-any.whl", "imports": ["xyzservices"], "install_dir": "site", "name": "xyzservices", "package_type": "package", "sha256": "6cde9868887ba50214bf1350b7f402dea402b6711722d762ab3a49747c4244ec", "shared_library": false, "unvendored_tests": true, "version": "2024.4.0"}, "xyzservices-tests": {"depends": ["xyzservices"], "file_name": "xyzservices-tests.tar", "imports": [], "install_dir": "site", "name": "xyzservices-tests", "package_type": "package", "sha256": "bfbd6cc7668d9e0cb6ca4de89c7f169a23e0acd9b6fe5b37150ea9d0330ed750", "shared_library": false, "unvendored_tests": false, "version": "2024.4.0"}, "yarl": {"depends": ["multidict", "idna"], "file_name": "yarl-1.9.4-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["yarl"], "install_dir": "site", "name": "yarl", "package_type": "package", "sha256": "657a810077525bcd6162ba9af9b32fb139d7ad66d6fa3636e492b8c78e86e320", "shared_library": false, "unvendored_tests": false, "version": "1.9.4"}, "yt": {"depends": ["ewah_bool_utils", "numpy", "matplotlib", "sympy", "setuptools", "packaging", "unyt", "cmyt", "colorspacious", "tqdm", "tomli", "tomli-w"], "file_name": "yt-4.3.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["yt"], "install_dir": "site", "name": "yt", "package_type": "package", "sha256": "83074be1fbbc458e3f93d90e2b92ae5bd53208f883af940185c4cd817879c585", "shared_library": false, "unvendored_tests": false, "version": "4.3.0"}, "zarr": {"depends": ["numpy", "asciitree", "numcodecs"], "file_name": "zarr-2.16.1-py3-none-any.whl", "imports": ["zarr"], "install_dir": "site", "name": "zarr", "package_type": "package", "sha256": "bac7e16182e2f57066074ad29fe137f84206e6bf6acb3d07a9ac1a7479354b13", "shared_library": false, "unvendored_tests": true, "version": "2.16.1"}, "zarr-tests": {"depends": ["zarr"], "file_name": "zarr-tests.tar", "imports": [], "install_dir": "site", "name": "zarr-tests", "package_type": "package", "sha256": "f3c7ef52470990073a3c27078e7d82416a5a9e070762cd4eb7bfc73dcfb4a2d4", "shared_library": false, "unvendored_tests": false, "version": "2.16.1"}, "zengl": {"depends": [], "file_name": "zengl-2.4.1-cp311-abi3-pyodide_2024_0_wasm32.whl", "imports": ["zengl", "_zengl"], "install_dir": "site", "name": "zengl", "package_type": "package", "sha256": "bdbb4098458eceffce3c775cbd9aafb822c5d21a6e53937b151e498440e1c07b", "shared_library": false, "unvendored_tests": false, "version": "2.4.1"}, "zstandard": {"depends": ["cffi"], "file_name": "zstandard-0.22.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["zstandard"], "install_dir": "site", "name": "zstandard", "package_type": "package", "sha256": "563bb88751f72c2113504384f4b6e4da0772644310c1d6b3e5ab5922cd5212de", "shared_library": false, "unvendored_tests": false, "version": "0.22.0"}}} \ No newline at end of file diff --git a/dingus/pyodide/pyodide.asm.js b/dingus/pyodide/pyodide.asm.js new file mode 100644 index 0000000..74a0559 --- /dev/null +++ b/dingus/pyodide/pyodide.asm.js @@ -0,0 +1,17 @@ +"use strict"; + +var _createPyodideModule = (() => { + var _scriptName = typeof document != 'undefined' ? document.currentScript?.src : undefined; + if (typeof __filename != 'undefined') _scriptName ||= __filename; + return ( +function(moduleArg = {}) { + var moduleRtn; + +var Module=Object.assign({},moduleArg);var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){}var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)onerror(err);else onload(binary?data.buffer:data)})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else 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)}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}}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"];if(Module["quit"])quit_=Module["quit"];if(!Module.wrapException){Module.wrapException=e=>e}var dynamicLibraries=Module["dynamicLibraries"]||[];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE!="undefined"&&ENVIRONMENT_IS_NODE){var buf=Buffer.from(s,"base64");return new Uint8Array(buf.buffer,buf.byteOffset,buf.length)}var decoded=atob(s);var bytes=new Uint8Array(decoded.length);for(var i=0;ifilename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith("file://");var wasmBinaryFile;wasmBinaryFile="pyodide.asm.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(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"&&!isFileURI(binaryFile)){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))}else if(readAsync){return new Promise((resolve,reject)=>{readAsync(binaryFile,response=>resolve(new Uint8Array(response)),reject)})}}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)&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&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();if(Module.adjustWasmImports){Module.adjustWasmImports(info)}function receiveInstance(instance,module){wasmExports=instance.exports;wasmExports=relocateExports(wasmExports,1024);var metadata=getDylinkMetadata(module);if(metadata.neededDynlibs){dynamicLibraries=metadata.neededDynlibs.concat(dynamicLibraries)}mergeLibSymbols(wasmExports,"main");LDSO.init();loadDylibs();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)}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}var ASM_CONSTS={4574887:()=>{throw new Error("intentionally triggered fatal error!")},4574944:()=>{wasmImports["open64"]=wasmImports["open"]},4574993:()=>Module.jspiSupported};function console_error(msg){let jsmsg=UTF8ToString(msg);console.error(jsmsg)}function console_error_obj(obj){console.error(obj)}function new_error(type,msg,err){return new API.PythonError(UTF8ToString(type),msg,err)}new_error.sig="eiei";function fail_test(){API.fail_test=true}fail_test.sig="v";function capture_stderr(){API.capture_stderr()}capture_stderr.sig="v";function restore_stderr(){return API.restore_stderr()}restore_stderr.sig="e";function raw_call_js(func){func()}raw_call_js.sig="ve";function hiwire_invalid_ref(type,ref){API.fail_test=!!1;if(type===1&&!ref){if(_PyErr_Occurred()){const e=_wrap_exception();console.error("Pyodide internal error: Argument to hiwire_get is falsy. This was "+"probably because the Python error indicator was set when get_value was "+"called. The Python error that caused this was:",e);throw e}else{const msg="Pyodide internal error: Argument to hiwire_get is falsy (but error "+"indicator is not set).";console.error(msg);throw new Error(msg)}}const typestr={[1]:"get",[2]:"incref",[3]:"decref"}[type];const msg=`hiwire_${typestr} on invalid reference ${ref}. This is most likely due `+"to use after free. It may also be due to memory corruption.";console.error(msg);throw new Error(msg)}hiwire_invalid_ref.sig="vii";function set_pyodide_module(mod){API._pyodide=mod}set_pyodide_module.sig="ve";function js2python_immutable_js(value){try{let result=Module.js2python_convertImmutable(value);if(result!==undefined){return result}return 0}catch(e){Module.handle_js_error(e);return 0}errNoRet()}js2python_immutable_js.sig="ie";function js2python_js(value){try{let result=Module.js2python_convertImmutable(value);if(result!==undefined){return result}return _JsProxy_create(value)}catch(e){Module.handle_js_error(e);return 0}errNoRet()}js2python_js.sig="ie";function js2python_convert(v,depth,defaultConverter){try{return Module.js2python_convert(v,{depth:depth,defaultConverter:defaultConverter})}catch(e){Module.handle_js_error(e);return 0}errNoRet()}js2python_convert.sig="ieie";function isReservedWord(word){if(!Module.pythonReservedWords){Module.pythonReservedWords=new Set(["False","await","else","import","pass","None","break","except","in","raise","True","class","finally","is","return","and","continue","for","lambda","try","as","def","from","nonlocal","while","assert","del","global","not","with","async","elif","if","or","yield"])}return Module.pythonReservedWords.has(word)}function normalizeReservedWords(word){const noTrailing_=word.replace(/_*$/,"");if(!isReservedWord(noTrailing_)){return word}if(noTrailing_!==word){return word.slice(0,-1)}return word}function JsProxy_GetAttr_js(jsobj,ptrkey){try{const jskey=normalizeReservedWords(UTF8ToString(ptrkey));const result=jsobj[jskey];if(result===undefined&&!(jskey in jsobj)){return null}return nullToUndefined(result)}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsProxy_GetAttr_js.sig="eei";function JsProxy_SetAttr_js(jsobj,ptrkey,jsval){try{let jskey=normalizeReservedWords(UTF8ToString(ptrkey));jsobj[jskey]=jsval}catch(e){Module.handle_js_error(e);return-1}return 0}JsProxy_SetAttr_js.sig="ieie";function JsProxy_DelAttr_js(jsobj,ptrkey){try{let jskey=normalizeReservedWords(UTF8ToString(ptrkey));delete jsobj[jskey]}catch(e){Module.handle_js_error(e);return-1}return 0}JsProxy_DelAttr_js.sig="iei";function JsProxy_GetIter_js(obj){try{return obj[Symbol.iterator]()}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsProxy_GetIter_js.sig="ee";function handle_next_result_js(res,done,msg){try{let errmsg;if(typeof res!=="object"){errmsg=`Result should have type "object" not "${typeof res}"`}else if(typeof res.done==="undefined"){if(typeof res.then==="function"){errmsg=`Result was a promise, use anext() / asend() / athrow() instead.`}else{errmsg=`Result has no "done" field.`}}if(errmsg){HEAPU32[(msg>>2)+0]=stringToNewUTF8(errmsg);HEAPU32[(done>>2)+0]=-1}HEAPU32[(done>>2)+0]=res.done;return res.value}catch(e){Module.handle_js_error(e);return-1}return 0}handle_next_result_js.sig="eeii";function JsException_new_helper(name_ptr,message_ptr,stack_ptr){try{let name=UTF8ToString(name_ptr);let message=UTF8ToString(message_ptr);let stack=UTF8ToString(stack_ptr);return API.deserializeError(name,message,stack)}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsException_new_helper.sig="eiii";function JsProxy_GetAsyncIter_js(obj){try{return obj[Symbol.asyncIterator]()}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsProxy_GetAsyncIter_js.sig="ee";function _agen_handle_result_js(p,msg,set_result,set_exception,closing){try{let errmsg;if(typeof p!=="object"){errmsg=`Result of anext() should be object not ${typeof p}`}else if(typeof p.then!=="function"){if(typeof p.done==="boolean"){errmsg=`Result of anext() was not a promise, use next() instead.`}else{errmsg=`Result of anext() was not a promise.`}}if(errmsg){HEAPU32[(msg>>2)+0]=stringToNewUTF8(errmsg);return-1}_Py_IncRef(set_result);_Py_IncRef(set_exception);p.then(({done:done,value:value})=>{__agen_handle_result_js_c(set_result,set_exception,done,value,closing)},err=>{__agen_handle_result_js_c(set_result,set_exception,-1,err,closing)}).finally(()=>{_Py_DecRef(set_result);_Py_DecRef(set_exception)});return 0}catch(e){Module.handle_js_error(e);return-1}return 0}_agen_handle_result_js.sig="ieiiii";function get_length_helper(val){try{let result;if(typeof val.size==="number"){result=val.size}else if(typeof val.length==="number"){result=val.length}else{return-2}if(result<0){return-3}if(result>2147483647){return-4}return result}catch(e){Module.handle_js_error(e);return-1}return 0}get_length_helper.sig="ie";function get_length_string(val){try{let result;if(typeof val.size==="number"){result=val.size}else if(typeof val.length==="number"){result=val.length}return stringToNewUTF8(" "+result.toString())}catch(e){Module.handle_js_error(e);return 0}errNoRet()}get_length_string.sig="ie";function destroy_jsarray_entries(array){for(let v of array){try{if(typeof v.destroy==="function"){v.destroy()}}catch(e){console.warn("Weird error:",e)}}}destroy_jsarray_entries.sig="ve";function JsArray_repeat_js(o,count){try{return Array.from({length:count},()=>o).flat()}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsArray_repeat_js.sig="eei";function JsArray_inplace_repeat_js(o,count){try{o.splice(0,o.length,...Array.from({length:count},()=>o).flat())}catch(e){Module.handle_js_error(e);return-1}return 0}JsArray_inplace_repeat_js.sig="iei";function JsArray_reversed_iterator(array){return new ReversedIterator(array)}class ReversedIterator{constructor(array){this._array=array;this._i=array.length-1}__length_hint__(){return this._array.length}[Symbol.toStringTag](){return"ReverseIterator"}next(){const i=this._i;const a=this._array;const done=i<0;const value=done?undefined:a[i];this._i--;return{done:done,value:value}}}JsArray_reversed_iterator.sig="ee";function JsArray_index_js(o,v,start,stop){try{for(let i=start;i{let c=s.charCodeAt(0);return c<48||c>57}).map(word=>isReservedWord(word.replace(/_*$/,""))?word+"_":word))}while(jsobj=Object.getPrototypeOf(jsobj));return result}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsProxy_Dir_js.sig="ee";function JsProxy_Bool_js(val){try{if(!val){return!!0}if(val.size===0){if(/HTML[A-Za-z]*Element/.test(getTypeTag(val))){return!!1}return!!0}if(val.length===0&&JsvArray_Check(val)){return!!0}if(val.byteLength===0){return!!0}return!!1}catch(e){return!!0}}JsProxy_Bool_js.sig="ie";function JsObjMap_GetIter_js(obj){try{return Module.iterObject(obj)}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsObjMap_GetIter_js.sig="ee";function JsObjMap_length_js(obj){try{let length=0;for(let _ of Module.iterObject(obj)){length++}return length}catch(e){Module.handle_js_error(e);return-1}return 0}JsObjMap_length_js.sig="ie";function JsObjMap_subscript_js(obj,key){try{if(!Object.prototype.hasOwnProperty.call(obj,key)){return null}return obj[key]}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsObjMap_subscript_js.sig="eee";function JsObjMap_ass_subscript_js(obj,key,value){try{if(value===null){if(!Object.prototype.hasOwnProperty.call(obj,key)){return-1}delete obj[key]}else{obj[key]=value}return 0}catch(e){Module.handle_js_error(e);return-1}return 0}JsObjMap_ass_subscript_js.sig="ieee";function JsObjMap_contains_js(obj,key){try{return Object.prototype.hasOwnProperty.call(obj,key)}catch(e){Module.handle_js_error(e);return-1}return 0}JsObjMap_contains_js.sig="iee";function JsBuffer_DecodeString_js(buffer,encoding){try{let encoding_js;if(encoding){encoding_js=UTF8ToString(encoding)}const decoder=new TextDecoder(encoding_js,{fatal:!!1,ignoreBOM:!!1});let res;try{res=decoder.decode(buffer)}catch(e){if(e instanceof TypeError){return null}throw e}return res}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsBuffer_DecodeString_js.sig="eei";function JsBuffer_get_info(jsobj,byteLength_ptr,format_ptr,size_ptr,checked_ptr){const[format_utf8,size,checked]=Module.get_buffer_datatype(jsobj);HEAPU32[(byteLength_ptr>>2)+0]=jsobj.byteLength;HEAPU32[(format_ptr>>2)+0]=format_utf8;HEAPU32[(size_ptr>>2)+0]=size;HEAPU8[checked_ptr+0]=checked}JsBuffer_get_info.sig="veiiii";function JsDoubleProxy_unwrap_helper(id){try{return Module.PyProxy_getPtr(id)}catch(e){Module.handle_js_error(e);return 0}errNoRet()}JsDoubleProxy_unwrap_helper.sig="ie";function JsProxy_compute_typeflags(obj){try{let type_flags=0;if(API.isPyProxy(obj)&&!pyproxyIsAlive(obj)){return 0}const typeTag=getTypeTag(obj);function safeBool(cb){try{return cb()}catch(e){return!!0}}const isBufferView=safeBool(()=>ArrayBuffer.isView(obj));const isArray=safeBool(()=>Array.isArray(obj));const constructorName=safeBool(()=>obj.constructor.name)||"";if(typeof obj==="function"){type_flags|=1<<9}if(hasMethod(obj,"then")){type_flags|=1<<7}if(hasMethod(obj,Symbol.iterator)){type_flags|=1<<0}if(hasMethod(obj,Symbol.asyncIterator)){type_flags|=1<<15}if(hasMethod(obj,"next")&&(hasMethod(obj,Symbol.iterator)||!hasMethod(obj,Symbol.asyncIterator))){type_flags|=1<<1}if(hasMethod(obj,"next")&&(!hasMethod(obj,Symbol.iterator)||hasMethod(obj,Symbol.asyncIterator))){type_flags|=1<<18}if(hasProperty(obj,"size")||hasProperty(obj,"length")&&typeof obj!=="function"){type_flags|=1<<2}if(hasMethod(obj,"get")){type_flags|=1<<3}if(hasMethod(obj,"set")){type_flags|=1<<4}if(hasMethod(obj,"has")){type_flags|=1<<5}if(hasMethod(obj,"includes")){type_flags|=1<<6}if((isBufferView||typeTag==="[object ArrayBuffer]")&&!(type_flags&1<<9)){type_flags|=1<<8}if(API.isPyProxy(obj)){type_flags|=1<<13}if(isArray){type_flags|=1<<10}if(typeTag==="[object HTMLCollection]"||typeTag==="[object NodeList]"){type_flags|=1<<11}if(isBufferView&&typeTag!=="[object DataView]"){type_flags|=1<<12}if(typeTag==="[object Generator]"){type_flags|=1<<16}if(typeTag==="[object AsyncGenerator]"){type_flags|=1<<17}if(hasProperty(obj,"name")&&hasProperty(obj,"message")&&(hasProperty(obj,"stack")||constructorName==="DOMException")&&!(type_flags&(1<<9|1<<8))){type_flags|=1<<19}return type_flags}catch(e){Module.handle_js_error(e);return-1}return 0}JsProxy_compute_typeflags.sig="ie";function is_comlink_proxy(obj){try{return!!(API.Comlink&&value[API.Comlink.createEndpoint])}catch(e){return!!0}}is_comlink_proxy.sig="ie";function can_run_sync_js(){return!!Module.validSuspender.value}can_run_sync_js.sig="i";function my_dict_converter(){return Object.fromEntries}my_dict_converter.sig="e";function get_async_js_call_done_callback(proxies){try{return function(result){let msg="This borrowed proxy was automatically destroyed "+"at the end of an asynchronous function call. Try "+"using create_proxy or create_once_callable.";for(let px of proxies){Module.pyproxy_destroy(px,msg,!!0)}if(API.isPyProxy(result)){Module.pyproxy_destroy(result,msg,!!0)}}}catch(e){Module.handle_js_error(e);return null}errNoRet()}get_async_js_call_done_callback.sig="ee";function wrap_generator(gen,proxies){try{proxies=new Set(proxies);const msg="This borrowed proxy was automatically destroyed "+"when a generator completed execution. Try "+"using create_proxy or create_once_callable.";function cleanup(){proxies.forEach(px=>Module.pyproxy_destroy(px,msg))}function wrap(funcname){return function(val){if(API.isPyProxy(val)){val=val.copy();proxies.add(val)}let res;try{res=gen[funcname](val)}catch(e){cleanup();throw e}if(res.done){proxies.delete(res.value);cleanup()}return res}}return{get[Symbol.toStringTag](){return"Generator"},[Symbol.iterator](){return this},next:wrap("next"),throw:wrap("throw"),return:wrap("return")}}catch(e){Module.handle_js_error(e);return null}errNoRet()}wrap_generator.sig="eee";function wrap_async_generator(gen,proxies){try{proxies=new Set(proxies);const msg="This borrowed proxy was automatically destroyed "+"when an asynchronous generator completed execution. Try "+"using create_proxy or create_once_callable.";function cleanup(){proxies.forEach(px=>Module.pyproxy_destroy(px,msg))}function wrap(funcname){return async function(val){if(API.isPyProxy(val)){val=val.copy();proxies.add(val)}let res;try{res=await gen[funcname](val)}catch(e){cleanup();throw e}if(res.done){proxies.delete(res.value);cleanup()}return res}}return{get[Symbol.toStringTag](){return"AsyncGenerator"},[Symbol.asyncIterator](){return this},next:wrap("next"),throw:wrap("throw"),return:wrap("return")}}catch(e){Module.handle_js_error(e);return null}errNoRet()}wrap_async_generator.sig="eee";function throw_no_gil(){throw new API.NoGilError("Attempted to use PyProxy when Python GIL not held")}throw_no_gil.sig="v";function pyproxy_Check(val){return API.isPyProxy(val)}pyproxy_Check.sig="ie";function pyproxy_AsPyObject(val){if(!API.isPyProxy(val)||!pyproxyIsAlive(val)){return 0}return Module.PyProxy_getPtr(val)}pyproxy_AsPyObject.sig="ie";function destroy_proxies(proxies,msg_ptr){let msg=undefined;if(msg_ptr){msg=_JsvString_FromId(msg_ptr)}for(let px of proxies){Module.pyproxy_destroy(px,msg,false)}}destroy_proxies.sig="vei";function gc_register_proxies(proxies){for(let px of proxies){Module.gc_register_proxy(Module.PyProxy_getAttrs(px).shared)}}gc_register_proxies.sig="ve";function destroy_proxy(px,msg_ptr){const{shared:shared,props:props}=Module.PyProxy_getAttrsQuiet(px);if(!shared.ptr){return}if(props.roundtrip){return}let msg=undefined;if(msg_ptr){msg=_JsvString_FromId(msg_ptr)}Module.pyproxy_destroy(px,msg,false)}destroy_proxy.sig="vei";function proxy_cache_get(proxyCache,descr){const proxy=proxyCache.get(descr);if(!proxy){return null}if(pyproxyIsAlive(proxy)){return proxy}else{proxyCache.delete(descr);return null}}proxy_cache_get.sig="eei";function proxy_cache_set(proxyCache,descr,proxy){proxyCache.set(descr,proxy)}proxy_cache_set.sig="veie";function _pyproxyGen_make_result(done,value){return{done:!!done,value:value}}_pyproxyGen_make_result.sig="eie";function array_to_js(array,len){return Array.from(HEAP32.subarray(array/4,array/4+len))}array_to_js.sig="eii";function _pyproxy_get_buffer_result(start_ptr,smallest_ptr,largest_ptr,readonly,format,itemsize,shape,strides,view,c_contiguous,f_contiguous,sentinel){format=UTF8ToString(format);return{start_ptr:start_ptr,smallest_ptr:smallest_ptr,largest_ptr:largest_ptr,readonly:readonly,format:format,itemsize:itemsize,shape:shape,strides:strides,view:view,c_contiguous:c_contiguous,f_contiguous:f_contiguous}}_pyproxy_get_buffer_result.sig="eiiiiiieeiiii";function pyproxy_new_ex(ptrobj,capture_this,roundtrip,gcRegister,jsonAdaptor){try{return Module.pyproxy_new(ptrobj,{props:{captureThis:!!capture_this,roundtrip:!!roundtrip},gcRegister:gcRegister,jsonAdaptor:jsonAdaptor})}catch(e){Module.handle_js_error(e);return null}errNoRet()}pyproxy_new_ex.sig="eiiiii";function pyproxy_new(ptrobj){try{return Module.pyproxy_new(ptrobj)}catch(e){Module.handle_js_error(e);return null}errNoRet()}pyproxy_new.sig="ei";function create_once_callable(obj,may_syncify){try{_Py_IncRef(obj);let alreadyCalled=!!0;function wrapper(...args){if(alreadyCalled){throw new Error("OnceProxy can only be called once")}try{if(may_syncify){return Module.callPyObjectMaybePromising(obj,args)}else{return Module.callPyObject(obj,args)}}finally{wrapper.destroy()}}wrapper.destroy=function(){if(alreadyCalled){throw new Error("OnceProxy has already been destroyed")}alreadyCalled=!!1;Module.finalizationRegistry.unregister(wrapper);_Py_DecRef(obj)};Module.finalizationRegistry.register(wrapper,[obj,undefined],wrapper);return wrapper}catch(e){Module.handle_js_error(e);return null}errNoRet()}create_once_callable.sig="eii";function create_promise_handles(handle_result,handle_exception,done_callback,js2py_converter){try{if(handle_result){_Py_IncRef(handle_result)}if(handle_exception){_Py_IncRef(handle_exception)}if(js2py_converter){_Py_IncRef(js2py_converter)}if(!done_callback){done_callback=x=>{}}let used=!!0;function checkUsed(){if(used){throw new Error("One of the promise handles has already been called.")}}function destroy(){checkUsed();used=!!1;if(handle_result){_Py_DecRef(handle_result)}if(handle_exception){_Py_DecRef(handle_exception)}if(js2py_converter){_Py_DecRef(js2py_converter)}}function onFulfilled(res){checkUsed();try{if(handle_result){return _create_promise_handles_result_helper(handle_result,js2py_converter,res)}}finally{done_callback(res);destroy()}}function onRejected(err){checkUsed();try{if(handle_exception){return Module.callPyObjectMaybePromising(handle_exception,[err])}}finally{done_callback(undefined);destroy()}}onFulfilled.destroy=destroy;onRejected.destroy=destroy;return[onFulfilled,onRejected]}catch(e){Module.handle_js_error(e);return null}errNoRet()}create_promise_handles.sig="eiiei";function _python2js_buffer_inner(buf,itemsize,ndim,format,shape,strides,suboffsets){try{let converter=Module.get_converter(format,itemsize);return Module._python2js_buffer_recursive(buf,0,{ndim:ndim,format:format,itemsize:itemsize,shape:shape,strides:strides,suboffsets:suboffsets,converter:converter})}catch(e){Module.handle_js_error(e);return null}errNoRet()}_python2js_buffer_inner.sig="eiiiiiii";function jslib_init_js(){try{HEAP32[_Jsr_undefined/4]=_hiwire_intern(undefined);HEAP32[_Jsr_true/4]=_hiwire_intern(true);HEAP32[_Jsr_false/4]=_hiwire_intern(false);HEAP32[_Jsr_novalue/4]=_hiwire_intern({noValueMarker:1});Module.novalue=_hiwire_get(HEAP32[_Jsr_novalue/4]);Hiwire.num_keys=_hiwire_num_refs;return 0}catch(e){Module.handle_js_error(e);return-1}return 0}jslib_init_js.sig="i";function JsvNoValue_Check(v){return v===Module.novalue}JsvNoValue_Check.sig="ie";function JsvNum_fromInt(x){return x}JsvNum_fromInt.sig="ei";function JsvNum_fromDouble(val){return val}JsvNum_fromDouble.sig="ed";function JsvNum_fromDigits(digits,ndigits){let result=BigInt(0);for(let i=0;i>2)+i])<>2)+ndigits-1]&2147483648)<=arr.length){return null}return arr.splice(idx,1)[0]}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsvArray_Delete.sig="eei";function JsvArray_Push(arr,obj){return arr.push(obj)}JsvArray_Push.sig="iee";function JsvArray_Extend(arr,vals){arr.push(...vals)}JsvArray_Extend.sig="vee";function JsvArray_Insert(arr,idx,value){try{arr.splice(idx,0,value)}catch(e){Module.handle_js_error(e);return-1}return 0}JsvArray_Insert.sig="ieie";function JsvArray_ShallowCopy(arr){try{return"slice"in arr?arr.slice():Array.from(arr)}catch(e){Module.handle_js_error(e);return-1}return 0}JsvArray_ShallowCopy.sig="ee";function JsvArray_slice(obj,length,start,stop,step){try{let result;if(step===1){result=obj.slice(start,stop)}else{result=Array.from({length:length},(_,i)=>obj[start+i*step])}return result}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsvArray_slice.sig="eeiiii";function JsvArray_slice_assign(obj,slicelength,start,stop,step,values_length,values){try{let jsvalues=[];for(let i=0;i>2)+i]);if(ref===null){return-1}jsvalues.push(ref)}if(step===1){obj.splice(start,slicelength,...jsvalues)}else{if(values!==0){for(let i=0;i=0;i--){obj.splice(start+i*step,1)}}}}catch(e){Module.handle_js_error(e);return-1}return 0}JsvArray_slice_assign.sig="ieiiiiii";function JsvObject_New(){return{}}JsvObject_New.sig="e";function JsvObject_SetAttr(obj,attr,value){try{obj[attr]=value}catch(e){Module.handle_js_error(e);return-1}return 0}JsvObject_SetAttr.sig="ieee";function JsvObject_Entries(obj){try{return Object.entries(obj)}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsvObject_Entries.sig="ee";function JsvObject_Keys(obj){try{return Object.keys(obj)}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsvObject_Keys.sig="ee";function JsvObject_Values(obj){try{return Object.values(obj)}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsvObject_Values.sig="ee";function JsvObject_toString(obj){try{if(hasMethod(obj,"toString")){return obj.toString()}return Object.prototype.toString.call(obj)}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsvObject_toString.sig="ee";function JsvObject_CallMethod(obj,meth,args){try{return nullToUndefined(obj[meth](...args))}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsvObject_CallMethod.sig="eeee";function JsvObject_CallMethod_NoArgs(obj,meth){try{return nullToUndefined(obj[meth]())}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsvObject_CallMethod_NoArgs.sig="eee";function JsvObject_CallMethod_OneArg(obj,meth,arg){try{return nullToUndefined(obj[meth](arg))}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsvObject_CallMethod_OneArg.sig="eeee";function JsvObject_CallMethod_TwoArgs(obj,meth,arg1,arg2){try{return nullToUndefined(obj[meth](arg1,arg2))}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsvObject_CallMethod_TwoArgs.sig="eeeee";function JsvFunction_Check(obj){try{return typeof obj==="function"}catch(e){return false}}JsvFunction_Check.sig="ie";function JsvFunction_CallBound(func,this_,args){try{return nullToUndefined(func.apply(this_,args))}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsvFunction_CallBound.sig="eeee";function JsvFunction_Call_OneArg(func,arg){try{return nullToUndefined(func.apply(null,[arg]))}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsvFunction_Call_OneArg.sig="eee";function JsvFunction_Construct(func,args){try{return nullToUndefined(Reflect.construct(func,args))}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsvFunction_Construct.sig="eee";function JsvPromise_Check(obj){try{return isPromise(obj)}catch(e){return false}}JsvPromise_Check.sig="ie";function JsvPromise_Resolve(obj){try{return Promise.resolve(obj)}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsvPromise_Resolve.sig="ee";function JsvPromise_Syncify_handleError(){if(!Module.syncify_error){return}Module.handle_js_error(Module.syncify_error);delete Module.syncify_error}JsvPromise_Syncify_handleError.sig="v";function jslib_init_buffers_js(){try{const dtypes_str=["b","B","h","H","i","I","f","d"].join(String.fromCharCode(0));const dtypes_ptr=stringToNewUTF8(dtypes_str);const dtypes_map=Object.fromEntries(Object.entries(dtypes_str).map(([idx,val])=>[val,dtypes_ptr+ +idx]));const buffer_datatype_map=new Map([["Int8Array",[dtypes_map["b"],1,true]],["Uint8Array",[dtypes_map["B"],1,true]],["Uint8ClampedArray",[dtypes_map["B"],1,true]],["Int16Array",[dtypes_map["h"],2,true]],["Uint16Array",[dtypes_map["H"],2,true]],["Int32Array",[dtypes_map["i"],4,true]],["Uint32Array",[dtypes_map["I"],4,true]],["Float32Array",[dtypes_map["f"],4,true]],["Float64Array",[dtypes_map["d"],8,true]],["DataView",[dtypes_map["B"],1,false]],["ArrayBuffer",[dtypes_map["B"],1,false]]]);Module.get_buffer_datatype=function(jsobj){return buffer_datatype_map.get(jsobj.constructor.name)||[0,0,false]}}catch(e){Module.handle_js_error(e);return-1}return 0}jslib_init_buffers_js.sig="i";function JsvBuffer_assignToPtr(buf,ptr){try{Module.HEAPU8.set(bufferAsUint8Array(buf),ptr)}catch(e){Module.handle_js_error(e);return-1}return 0}JsvBuffer_assignToPtr.sig="iei";function JsvBuffer_assignFromPtr(buf,ptr){try{bufferAsUint8Array(buf).set(Module.HEAPU8.subarray(ptr,ptr+buf.byteLength))}catch(e){Module.handle_js_error(e);return-1}return 0}JsvBuffer_assignFromPtr.sig="iei";function JsvBuffer_readFromFile(buf,fd){try{let uint8_buf=bufferAsUint8Array(buf);let stream=Module.FS.streams[fd];Module.FS.read(stream,uint8_buf,0,uint8_buf.byteLength)}catch(e){Module.handle_js_error(e);return-1}return 0}JsvBuffer_readFromFile.sig="iei";function JsvBuffer_writeToFile(buf,fd){try{let uint8_buf=bufferAsUint8Array(buf);let stream=Module.FS.streams[fd];Module.FS.write(stream,uint8_buf,0,uint8_buf.byteLength)}catch(e){Module.handle_js_error(e);return-1}return 0}JsvBuffer_writeToFile.sig="iei";function JsvBuffer_intoFile(buf,fd){try{let uint8_buf=bufferAsUint8Array(buf);let stream=Module.FS.streams[fd];Module.FS.write(stream,uint8_buf,0,uint8_buf.byteLength,undefined,true)}catch(e){Module.handle_js_error(e);return-1}return 0}JsvBuffer_intoFile.sig="iei";function JsvGenerator_Check(obj){try{return getTypeTag(obj)==="[object Generator]"}catch(e){return false}}JsvGenerator_Check.sig="ie";function JsvAsyncGenerator_Check(obj){try{return getTypeTag(obj)==="[object AsyncGenerator]"}catch(e){return false}}JsvAsyncGenerator_Check.sig="ie";function JsvError_Throw(e){throw e}JsvError_Throw.sig="ve";function Jsv_less_than(a,b){try{return!!(ab)}catch(e){return false}}Jsv_greater_than.sig="iee";function Jsv_greater_than_equal(a,b){try{return!!(a>=b)}catch(e){return false}}Jsv_greater_than_equal.sig="iee";function JsvMap_New(){try{return new Map}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsvMap_New.sig="e";function JsvLiteralMap_New(){try{return new API.LiteralMap}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsvLiteralMap_New.sig="e";function JsvMap_Set(map,key,val){try{map.set(key,val)}catch(e){Module.handle_js_error(e);return-1}return 0}JsvMap_Set.sig="ieee";function JsvSet_New(){try{return new Set}catch(e){Module.handle_js_error(e);return null}errNoRet()}JsvSet_New.sig="e";function JsvSet_Add(set,val){try{set.add(val)}catch(e){Module.handle_js_error(e);return-1}return 0}JsvSet_Add.sig="iee";function _python2js_addto_postprocess_list(list,parent,key,value){list.push([parent,key,value])}_python2js_addto_postprocess_list.sig="veeei";function _python2js_handle_postprocess_list(list,cache){for(const[parent,key,ptr]of list){let val=cache.get(ptr);if(parent.constructor.name==="LiteralMap"){parent.set(key,val)}else{parent[key]=val}}}_python2js_handle_postprocess_list.sig="vee";function _python2js_ucs1(ptr,len){try{let jsstr="";for(let i=0;i>1)+i])}return jsstr}catch(e){Module.handle_js_error(e);return null}errNoRet()}_python2js_ucs2.sig="eii";function _python2js_ucs4(ptr,len){try{let jsstr="";for(let i=0;i>2)+i])}return jsstr}catch(e){Module.handle_js_error(e);return null}errNoRet()}_python2js_ucs4.sig="eii";function _python2js_add_to_cache(cache,pyparent,jsparent){try{cache.set(pyparent,jsparent)}catch(e){Module.handle_js_error(e);return-1}return 0}_python2js_add_to_cache.sig="ieie";function _python2js_cache_lookup(cache,pyparent){return cache.get(pyparent)||null}_python2js_cache_lookup.sig="eei";function _JsArray_PushEntry_helper(array,key,value){try{array.push([key,value])}catch(e){Module.handle_js_error(e);return-1}return 0}_JsArray_PushEntry_helper.sig="ieee";function _JsArray_PostProcess_helper(jscontext,array){try{return jscontext.dict_converter(array)}catch(e){Module.handle_js_error(e);return null}errNoRet()}_JsArray_PostProcess_helper.sig="eee";function python2js__default_converter_js(jscontext,object){try{let proxy=Module.pyproxy_new(object);let result=jscontext.default_converter(proxy,jscontext.converter,jscontext.cacheConversion);proxy.destroy();return result}catch(e){Module.handle_js_error(e);return null}errNoRet()}python2js__default_converter_js.sig="eei";function python2js_custom__create_jscontext(context,cache,dict_converter,default_converter){try{let jscontext={};if(dict_converter){jscontext.dict_converter=dict_converter}if(default_converter){jscontext.default_converter=default_converter;jscontext.cacheConversion=function(input,output){if(!API.isPyProxy(input)){throw new TypeError("The first argument to cacheConversion must be a PyProxy.")}let input_ptr=Module.PyProxy_getPtr(input);cache.set(input_ptr,output)};jscontext.converter=function(x){if(!API.isPyProxy(x)){return x}let ptr=Module.PyProxy_getPtr(x);return __python2js(context,ptr)}}return jscontext}catch(e){Module.handle_js_error(e);return null}errNoRet()}python2js_custom__create_jscontext.sig="eieee";function destroy_proxies_js(proxies_id){try{for(const proxy of proxies_id){proxy.destroy()}}catch(e){Module.handle_js_error(e);return-1}return 0}destroy_proxies_js.sig="ie";function pyodide_js_init(){"use strict";(()=>{var Rt=Object.create;var or=Object.defineProperty;var $t=Object.getOwnPropertyDescriptor;var Lt=Object.getOwnPropertyNames;var Ct=Object.getPrototypeOf,Ut=Object.prototype.hasOwnProperty;var i=(r,e)=>or(r,"name",{value:e,configurable:!0}),P=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+r+'" is not supported')});var jt=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Lt(e))!Ut.call(r,o)&&o!==t&&or(r,o,{get:()=>e[o],enumerable:!(n=$t(e,o))||n.enumerable});return r};var E=(r,e,t)=>(t=r!=null?Rt(Ct(r)):{},jt(e||!r||!r.__esModule?or(t,"default",{value:r,enumerable:!0}):t,r));function Bt(r){return!isNaN(parseFloat(r))&&isFinite(r)}i(Bt,"_isNumber");function D(r){return r.charAt(0).toUpperCase()+r.substring(1)}i(D,"_capitalize");function ar(r){return function(){return this[r]}}i(ar,"_getter");var C=["isConstructor","isEval","isNative","isToplevel"],U=["columnNumber","lineNumber"],j=["fileName","functionName","source"],Ht=["args"],Wt=["evalOrigin"],xe=C.concat(U,j,Ht,Wt);function v(r){if(r)for(var e=0;e-1&&(a=a.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(,.*$)/g,""));var s=a.replace(/^\s+/,"").replace(/\(eval code/g,"(").replace(/^.*?\s+/,""),l=s.match(/ (\(.+\)$)/);s=l?s.replace(l[0],""):s;var c=this.extractLocation(l?l[1]:s),u=l&&s||void 0,d=["eval",""].indexOf(c[0])>-1?void 0:c[0];return new we({functionName:u,fileName:d,lineNumber:c[1],columnNumber:c[2],source:a})},this)},"ErrorStackParser$$parseV8OrIE"),parseFFOrSafari:i(function(n){var o=n.stack.split(`\n`).filter(function(a){return!a.match(e)},this);return o.map(function(a){if(a.indexOf(" > eval")>-1&&(a=a.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),a.indexOf("@")===-1&&a.indexOf(":")===-1)return new we({functionName:a});var s=/((.*".+"[^@]*)?[^@]*)(?:@)/,l=a.match(s),c=l&&l[1]?l[1]:void 0,u=this.extractLocation(a.replace(s,""));return new we({functionName:c,fileName:u[0],lineNumber:u[1],columnNumber:u[2],source:a})},this)},"ErrorStackParser$$parseFFOrSafari")}}i(zt,"ErrorStackParser");var Gt=new zt;var ir=Gt;function Nr(r){if(typeof r=="string")r=new Error(r);else if(r&&typeof r=="object"&&r.name==="ExitStatus"){let e=r.status;r=new B(r.message),r.status=e}else if(typeof r!="object"||r===null||typeof r.stack!="string"||typeof r.message!="string"){let e=API.getTypeTag(r),t=`A value of type ${typeof r} with tag ${e} was thrown as an error!`;try{t+=`\nString interpolation of the thrown value gives """${r}""".`}catch{t+=`\nString interpolation of the thrown value fails.`}try{t+=`\nThe thrown value's toString method returns """${r.toString()}""".`}catch{t+=`\nThe thrown value's toString method fails.`}r=new Error(t)}return r}i(Nr,"ensureCaughtObjectIsError");var J=class extends Error{constructor(t,n,o){n||(n=`The exception is an object of type ${t} at address ${o} which does not inherit from std::exception`);super(n);this.ty=t}};i(J,"CppException");Object.defineProperty(J.prototype,"name",{get(){return`${this.constructor.name} ${this.ty}`}});var Kt=WebAssembly.Exception||function(){},Tr=i(r=>r instanceof Kt,"isWasmException");function Dr(r){if(Tr(r))if(r.is(Module.jsWrapperTag))r=r.getArg(Module.jsWrapperTag,0);else return r;let[e,t]=Module.getExceptionMessage(r);return new J(e,t,r)}i(Dr,"convertCppException");Tests.convertCppException=Dr;var Fr=!1;API.fatal_error=function(r){if(r&&r.pyodide_fatal_error)return;if(Fr){console.error("Recursive call to fatal_error. Inner error was:"),console.error(r);return}if(r instanceof H)throw r;typeof r=="number"||Tr(r)?r=Dr(r):r=Nr(r),r.pyodide_fatal_error=!0,Fr=!0;let e=r instanceof B;e||(console.error("Pyodide has suffered a fatal error. Please report this to the Pyodide maintainers."),console.error("The cause of the fatal error was:"),API.inTestHoist?(console.error(r.toString()),console.error(r.stack)):console.error(r));try{e||_dump_traceback();let n=`Pyodide already ${e?"exited":"fatally failed"} and can no longer be used.`;for(let o of Reflect.ownKeys(API.public_api))typeof o=="string"&&o.startsWith("_")||o==="version"||Object.defineProperty(API.public_api,o,{enumerable:!0,configurable:!0,get:()=>{throw new Error(n)}});API.on_fatal&&API.on_fatal(r)}catch(t){console.error("Another error occurred while handling the fatal error:"),console.error(t)}throw r};API.maybe_fatal_error=function(r){API._skip_unwind_fatal_error&&r==="unwind"||API.fatal_error(r)};var sr=[];API.capture_stderr=function(){sr=[],FS.createDevice("/dev","capture_stderr",null,r=>sr.push(r)),FS.closeStream(2),FS.open("/dev/capture_stderr",1)};API.restore_stderr=function(){return FS.closeStream(2),FS.unlink("/dev/capture_stderr"),FS.open("/dev/stderr",1),(new TextDecoder).decode(new Uint8Array(sr))};API.fatal_loading_error=function(...r){let e=r.join(" ");if(_PyErr_Occurred()){API.capture_stderr(),_PyErr_Print();let t=API.restore_stderr();e+=`\n`+t}throw new V(e)};function lr(r){if(!r)return!1;let e=r.fileName||"";if(e.includes("wasm-function"))return!0;if(!e.includes("pyodide.asm.js"))return!1;let t=r.functionName||"";return t.startsWith("Object.")&&(t=t.slice(7)),API.public_api&&t in API.public_api&&t!=="PythonError"?(r.functionName=t,!1):!0}i(lr,"isPyodideFrame");function Or(r){return lr(r)&&r.functionName==="new_error"}i(Or,"isErrorStart");Module.handle_js_error=function(r){if(r&&r.pyodide_fatal_error)throw r;if(r instanceof w)return;let e=!1;r instanceof k&&(e=_restore_sys_last_exception(r.__error_address));let t,n;try{t=ir.parse(r)}catch{n=!0}if(n&&(r=Nr(r)),!e){let o=_JsProxy_create(r);_set_error(o),_Py_DecRef(o)}if(!n){if(Or(t[0])||Or(t[1]))for(;lr(t[0]);)t.shift();for(let o of t){if(lr(o))break;let a=stringToNewUTF8(o.functionName||"???"),s=stringToNewUTF8(o.fileName||"???.js");__PyTraceback_Add(a,s,o.lineNumber),_free(a),_free(s)}}};var k=class extends Error{constructor(t,n,o){let a=Error.stackTraceLimit;Error.stackTraceLimit=1/0;super(n);Error.stackTraceLimit=a,this.type=t,this.__error_address=o}};i(k,"PythonError");API.PythonError=k;var w=class extends Error{constructor(){super("If you are seeing this message, an internal Pyodide error has occurred. Please report it to the Pyodide maintainers.")}};i(w,"_PropagatePythonError");function Jt(r){Object.defineProperty(r.prototype,"name",{value:r.name})}i(Jt,"setName");var V=class extends Error{};i(V,"FatalPyodideError");var B=class extends Error{};i(B,"Exit");var H=class extends Error{};i(H,"NoGilError");[w,V,B,k,H].forEach(Jt);API.NoGilError=H;API.errorConstructors=new Map([EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError,globalThis.DOMException,globalThis.AssertionError,globalThis.SystemError].filter(r=>r).map(r=>[r.constructor.name,r]));API.deserializeError=function(r,e,t){let n=API.errorConstructors.get(r)||Error,o=new n(e);return API.errorConstructors.has(r)||(o.name=r),o.message=e,o.stack=t,o};function Vt(r){let e=0,t=0;for(let a of r){t++;let s=a.codePointAt(0);e=s>e?s:e}let n=_PyUnicode_New(t,e);if(n===0)throw new w;let o=_PyUnicode_Data(n);if(e>65535)for(let a of r)HEAPU32[o/4]=a.codePointAt(0),o+=4;else if(e>255)for(let a of r)HEAPU16[o/2]=a.codePointAt(0),o+=2;else for(let a of r)HEAPU8[o]=a.codePointAt(0),o+=1;return n}i(Vt,"js2python_string");function qt(r){let e=r,t=0;for(r<0&&(r=-r),r<<=BigInt(1);r;)t++,r>>=BigInt(32);let n=stackSave(),o=stackAlloc(t*4);r=e;for(let s=0;s>2)+s]=Number(r&BigInt(4294967295)),r>>=BigInt(32);let a=__PyLong_FromByteArray(o,t*4,!0,!0);return stackRestore(n),a}i(qt,"js2python_bigint");function q(r){let e=Yt(r);if(e===0)throw new w;return e}i(q,"js2python_convertImmutable");Module.js2python_convertImmutable=q;function Yt(r){let e=typeof r;if(e==="string")return Vt(r);if(e==="number")return Number.isSafeInteger(r)?_PyLong_FromDouble(r):_PyFloat_FromDouble(r);if(e==="bigint")return qt(r);if(r==null)return __js2python_none();if(r===!0)return __js2python_true();if(r===!1)return __js2python_false();if(API.isPyProxy(r)){let{props:t,shared:n}=Module.PyProxy_getAttrs(r);return t.roundtrip?_JsProxy_create(r):__js2python_pyproxy(n.ptr)}}i(Yt,"js2python_convertImmutableInner");function Qt(r,e){let t=_PyList_New(r.length);if(t===0)return 0;let n=0;try{e.cache.set(r,t);for(let o=0;oModule.pyproxy_new(Se(o,n)),cacheConversion(o,a){if(API.isPyProxy(a))n.cache.set(o,Module.PyProxy_getPtr(a));else throw new Error("Second argument should be a PyProxy!")}};return Se(r,n)}i(en,"js2python_convert");Module.js2python_convert=en;Module.processBufferFormatString=function(r,e=""){if(r.length>2)throw new Error(`Expected format string to have length <= 2, got '${r}'.`+e);let t=r.slice(-1),n=r.slice(0,-1),o;switch(n){case"!":case">":o=!0;break;case"<":case"@":case"=":case"":o=!1;break;default:throw new Error(`Unrecognized alignment character ${n}.`+e)}let a;switch(t){case"b":a=Int8Array;break;case"s":case"p":case"c":case"B":case"?":a=Uint8Array;break;case"h":a=Int16Array;break;case"H":a=Uint16Array;break;case"i":case"l":case"n":a=Int32Array;break;case"I":case"L":case"N":case"P":a=Uint32Array;break;case"q":if(globalThis.BigInt64Array===void 0)throw new Error("BigInt64Array is not supported on this browser."+e);a=BigInt64Array;break;case"Q":if(globalThis.BigUint64Array===void 0)throw new Error("BigUint64Array is not supported on this browser."+e);a=BigUint64Array;break;case"f":a=Float32Array;break;case"d":a=Float64Array;break;case"e":throw new Error("Javascript has no Float16 support.");default:throw new Error(`Unrecognized format character '${t}'.`+e)}return[a,o]};Module.python2js_buffer_1d_contiguous=function(r,e,t){let n=e*t;return HEAP8.slice(r,r+n).buffer};Module.python2js_buffer_1d_noncontiguous=function(r,e,t,n,o){let a=o*n,s=new Uint8Array(a);for(let l=0;l=0&&(c=HEAPU32[(c>>2)+0]+t),s.set(HEAP8.subarray(c,c+o),l*o)}return s.buffer};Module._python2js_buffer_recursive=function(r,e,t){let n=HEAPU32[(t.shape>>2)+e],o=HEAP32[(t.strides>>2)+e],a=-1;if(t.suboffsets!==0&&(a=HEAP32[(t.suboffsets>>2)+e]),e===t.ndim-1){let l;return o===t.itemsize&&a<0?l=Module.python2js_buffer_1d_contiguous(r,o,n):l=Module.python2js_buffer_1d_noncontiguous(r,o,a,n,t.itemsize),t.converter(l)}let s=[];for(let l=0;l=0&&(curptr=HEAPU32[(curptr>>2)+0]+a),s.push(Module._python2js_buffer_recursive(c,e+1,t))}return s};Module.get_converter=function(r,e){let t=UTF8ToString(r),[n,o]=Module.processBufferFormatString(t);switch(t.slice(-1)){case"s":let u=new TextDecoder("utf8",{ignoreBOM:!0});return d=>u.decode(d);case"?":return d=>Array.from(new Uint8Array(d),y=>!!y)}if(!o)return u=>new n(u);let s,l;switch(e){case 2:s="getUint16",l="setUint16";break;case 4:s="getUint32",l="setUint32";break;case 8:s="getFloat64",l="setFloat64";break;default:throw new Error(`Unexpected size ${e}`)}function c(u){let d=new DataView(u),y=d[s].bind(d),p=d[l].bind(d);for(let m=0;mnew n(c(u))};function rn(r){try{return r instanceof _}catch{return!1}}i(rn,"isPyProxy");API.isPyProxy=rn;globalThis.FinalizationRegistry?Module.finalizationRegistry=new FinalizationRegistry(({ptr:r,cache:e})=>{e&&(e.leaked=!0,zr(e));try{_check_gil();let t=Module.validSuspender.value;Module.validSuspender.value=!1,_Py_DecRef(r),Module.validSuspender.value=t}catch(t){API.fatal_error(t)}}):Module.finalizationRegistry={register(){},unregister(){}};var cr=new Map;Module.pyproxy_alloc_map=cr;var dr,yr;Module.enable_pyproxy_allocation_tracing=function(){dr=i(function(r){cr.set(r,Error().stack)},"trace_pyproxy_alloc"),yr=i(function(r){cr.delete(r)},"trace_pyproxy_dealloc")};Module.disable_pyproxy_allocation_tracing=function(){dr=i(function(r){},"trace_pyproxy_alloc"),yr=i(function(r){},"trace_pyproxy_dealloc")};Module.disable_pyproxy_allocation_tracing();var Br=Symbol("pyproxy.attrs");function tn(r,e){_check_gil();let t=Module.validSuspender.value;Module.validSuspender.value=!1;try{return _pyproxy_getflags(r,e)}finally{Module.validSuspender.value=t}}i(tn,"pyproxy_getflags");function fe(r,{flags:e,cache:t,props:n,shared:o,gcRegister:a,jsonAdaptor:s}={}){a===void 0&&(a=!0);let l=e!==void 0?e:tn(r,!!s);l===-1&&_pythonexc2js();let c=l&8192,u=l&32768,d=Module.getPyProxyClass(l),y;l&256?(y=i(function(){},"target"),Object.setPrototypeOf(y,d.prototype),delete y.length,delete y.name,y.prototype=void 0):y=Object.create(d.prototype);let p=!!o;o||(t||(t={map:new Map,json_adaptor_map:new Map,refcnt:0}),t.refcnt++,o={ptr:r,cache:t,flags:l,promise:void 0,destroyed_msg:void 0,gcRegistered:!1},_Py_IncRef(r)),n=Object.assign({isBound:!1,captureThis:!1,boundArgs:[],roundtrip:!1},n);let m;u?m=ur:c?m=pn:m=R;let I=new Proxy(y,m);!p&&a&&Hr(o),p||dr(I);let tr={shared:o,props:n};return y[Br]=tr,I}i(fe,"pyproxy_new");Module.pyproxy_new=fe;function Hr(r){let e=Object.assign({},r);r.gcRegistered=!0,Module.finalizationRegistry.register(r,e,r)}i(Hr,"gc_register_proxy");Module.gc_register_proxy=Hr;function je(r){return r[Br]}i(je,"_getAttrsQuiet");Module.PyProxy_getAttrsQuiet=je;function S(r){let e=je(r);if(!e.shared.ptr)throw new Error(e.shared.destroyed_msg);return e}i(S,"_getAttrs");Module.PyProxy_getAttrs=S;function f(r){return S(r).shared.ptr}i(f,"_getPtr");function h(r){return Object.getPrototypeOf(r).$$flags}i(h,"_getFlags");function Wr(r){return!!(h(r)&98304)}i(Wr,"isJsonAdaptor");function Lr(r,e,t){let{captureThis:n,boundArgs:o,boundThis:a,isBound:s}=S(r).props;return n?s?[a].concat(o,t):[e].concat(t):s?o.concat(t):t}i(Lr,"_adjustArgs");var Cr=new Map;Module.getPyProxyClass=function(r){let e=[[1,Ee],[2,$],[4,M],[8,W],[16,Me],[32,Oe],[2048,Ne],[512,Fe],[1024,Te],[4096,De],[64,Le],[128,Ce],[256,de],[8192,Re],[16384,$e]],t=Cr.get(r);if(t)return t;let n={};for(let[l,c]of e)r&l&&Object.assign(n,Object.getOwnPropertyDescriptors(c.prototype));(r&8192||r&2)&&Object.assign(n,Object.getOwnPropertyDescriptors(ke.prototype)),n.constructor=Object.getOwnPropertyDescriptor(_.prototype,"constructor"),Object.assign(n,Object.getOwnPropertyDescriptors({$$flags:r}));let o=r&256?Kr:Gr,a=Object.create(o,n);function s(){}return i(s,"NewPyProxyClass"),s.prototype=a,Cr.set(r,s),s};Module.PyProxy_getPtr=f;var Ur="This borrowed attribute proxy was automatically destroyed in the process of destroying the proxy it was borrowed from. Try using the 'copy' method.";function zr(r){if(r&&(r.refcnt--,!r.leaked&&r.refcnt===0)){for(let e of r.map.values())Module.pyproxy_destroy(e,Ur,!0);for(let e of r.json_adaptor_map.values())Module.pyproxy_destroy(e,Ur,!0)}}i(zr,"pyproxy_decref_cache");function nn(r,e){if(e=e||"Object has already been destroyed",API.debug_ffi){let t=r.type,n;try{n=r.toString()}catch(o){if(o.pyodide_fatal_error)throw o}e+=`\nThe object was of type "${t}" and `,n?e+=`had repr "${n}"`:e+="an error was raised when trying to generate its repr"}else e+="\nFor more information about the cause of this error, use `pyodide.setDebug(true)`";return e}i(nn,"generateDestroyedMessage");Module.pyproxy_destroy=function(r,e,t){let{shared:n,props:o}=je(r);if(!n.ptr||!t&&o.roundtrip)return;n.destroyed_msg=nn(r,e);let a=n.ptr;n.ptr=0,n.gcRegistered&&Module.finalizationRegistry.unregister(n),zr(n.cache);try{_check_gil();let s=Module.validSuspender.value;Module.validSuspender.value=!1,_Py_DecRef(a),yr(r),Module.validSuspender.value=s}catch(s){API.fatal_error(s)}};function Ue(r,e,t){let n=e.length,o=Object.keys(t),a=Object.values(t),s=o.length;e.push(...a);let l;try{_check_gil();let c=Module.validSuspender.value;Module.validSuspender.value=!1,l=__pyproxy_apply(r,e,n,o,s),Module.validSuspender.value=c}catch(c){API.maybe_fatal_error(c);return}if(l===null&&_pythonexc2js(),l&&l.type==="coroutine"&&l._ensure_future){_check_gil();let c=Module.validSuspender.value;Module.validSuspender.value=!1;let u=__iscoroutinefunction(r);Module.validSuspender.value=c,u&&l._ensure_future()}return l}i(Ue,"callPyObjectKwargs");async function Ie(r,e,t){if(!Module.jspiSupported)throw new Error("WebAssembly stack switching not supported in this JavaScript runtime");let n=e.length,o=Object.keys(t),a=Object.values(t),s=o.length;e.push(...a);let l=stackSave(),c=stackAlloc(4),u;try{_check_gil();let d=Module.validSuspender.value;Module.validSuspender.value=!1,u=await Module.promisingApply(r,e,n,o,s,c),Module.validSuspender.value=d}catch(d){API.fatal_error(d)}if(u===null){_PyErr_SetRaisedException(HEAPU32[c/4]);try{_pythonexc2js()}finally{stackRestore(l)}}if(u&&u.type==="coroutine"&&u._ensure_future){_check_gil();let d=Module.validSuspender.value;Module.validSuspender.value=!1;let y=__iscoroutinefunction(r);Module.validSuspender.value=d,y&&u._ensure_future()}return u}i(Ie,"callPyObjectKwargsPromising");Module.callPyObjectMaybePromising=async function(r,e){return Module.jspiSupported?await Ie(r,e,{}):Ue(r,e,{})};Module.callPyObject=function(r,e){return Ue(r,e,{})};var _=class{static[Symbol.hasInstance](e){return[_,Jr].some(t=>Function.prototype[Symbol.hasInstance].call(t,e))}constructor(){throw new TypeError("PyProxy is not a constructor")}get[Symbol.toStringTag](){return"PyProxy"}get type(){let e=f(this);return __pyproxy_type(e)}toString(){let e=f(this),t;try{_check_gil();let n=Module.validSuspender.value;Module.validSuspender.value=!1,t=__pyproxy_repr(e),Module.validSuspender.value=n}catch(n){API.fatal_error(n)}return t===null&&_pythonexc2js(),t}destroy(e={}){e=Object.assign({message:"",destroyRoundtrip:!0},e);let{message:t,destroyRoundtrip:n}=e;Module.pyproxy_destroy(this,t,n)}copy(){let e=S(this);return fe(e.shared.ptr,{flags:h(this),cache:e.shared.cache,props:e.props})}toJs({depth:e=-1,pyproxies:t=void 0,create_pyproxies:n=!0,dict_converter:o=void 0,default_converter:a=void 0}={}){let s=f(this),l,c;n?t?c=t:c=[]:c=null;try{_check_gil();let u=Module.validSuspender.value;Module.validSuspender.value=!1,l=_python2js_custom(s,e,c,o||null,a||null),Module.validSuspender.value=u}catch(u){API.fatal_error(u)}return l===null&&_pythonexc2js(),l}};i(_,"PyProxy");var Gr=_.prototype;Tests.Function=Function;var Kr=Object.create(Function.prototype,Object.getOwnPropertyDescriptors(Gr));function Jr(){}i(Jr,"PyProxyFunction");Jr.prototype=Kr;var Y=class extends _{static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(h(e)&1)}};i(Y,"PyProxyWithLength");var Ee=class{get length(){let e=f(this),t;try{_check_gil();let n=Module.validSuspender.value;Module.validSuspender.value=!1,t=_PyObject_Size(e),Module.validSuspender.value=n}catch(n){API.fatal_error(n)}return t===-1&&_pythonexc2js(),t}};i(Ee,"PyLengthMethods");var Q=class extends _{static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(h(e)&2)}};i(Q,"PyProxyWithGet");var ke=class{asJsJson(){let{shared:e,props:t}=S(this),n=h(this);return n&8192?n|=65536:n|=32768,fe(e.ptr,{shared:e,flags:n,props:t})}};i(ke,"PyAsJsonAdaptorMethods");var $=class{get(e){let{shared:t}=S(this),n;try{_check_gil();let o=Module.validSuspender.value;Module.validSuspender.value=!1,n=__pyproxy_getitem(t.ptr,e,t.cache.json_adaptor_map,Wr(this)),Module.validSuspender.value=o}catch(o){API.fatal_error(o)}if(n===null)if(_PyErr_Occurred())_pythonexc2js();else return;return n}asJsJson(){throw new Error("Should not happen")}};i($,"PyGetItemMethods");var X=class extends _{static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(h(e)&4)}};i(X,"PyProxyWithSet");var M=class{set(e,t){let n=f(this),o;try{_check_gil();let a=Module.validSuspender.value;Module.validSuspender.value=!1,o=__pyproxy_setitem(n,e,t),Module.validSuspender.value=a}catch(a){API.fatal_error(a)}o===-1&&_pythonexc2js()}delete(e){let t=f(this),n;try{_check_gil();let o=Module.validSuspender.value;Module.validSuspender.value=!1,n=__pyproxy_delitem(t,e),Module.validSuspender.value=o}catch(o){API.fatal_error(o)}n===-1&&_pythonexc2js()}};i(M,"PySetItemMethods");var Z=class extends _{static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(h(e)&8)}};i(Z,"PyProxyWithHas");var W=class{has(e){let t=f(this),n;try{_check_gil();let o=Module.validSuspender.value;Module.validSuspender.value=!1,n=__pyproxy_contains(t,e),Module.validSuspender.value=o}catch(o){API.fatal_error(o)}return n===-1&&_pythonexc2js(),n===1}};i(W,"PyContainsMethods");function*on(r,e,t,n){let o=[];try{for(;;){_check_gil();let a=Module.validSuspender.value;Module.validSuspender.value=!1;let s=__pyproxy_iter_next(r,t,n);if(Module.validSuspender.value=a,s===null)break;yield s,!n&&API.isPyProxy(s)&&o.push(s)}}catch(a){API.fatal_error(a)}finally{Module.finalizationRegistry.unregister(e),_Py_DecRef(r)}try{o.forEach(a=>Module.pyproxy_destroy(a,"This borrowed proxy was automatically destroyed when an iterator was exhausted."))}catch{}_PyErr_Occurred()&&_pythonexc2js()}i(on,"iter_helper");var ee=class extends _{static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(h(e)&48)}};i(ee,"PyIterable");var Me=class{[Symbol.iterator](){let{shared:e}=S(this),t={},n;try{_check_gil();let a=Module.validSuspender.value;Module.validSuspender.value=!1,n=_PyObject_GetIter(e.ptr),Module.validSuspender.value=a}catch(a){API.fatal_error(a)}n===0&&_pythonexc2js();let o=on(n,t,e.cache.json_adaptor_map,Wr(this));return Module.finalizationRegistry.register(o,[n,void 0],t),o}};i(Me,"PyIterableMethods");async function*an(r,e){try{for(;;){let t;try{_check_gil();let n=Module.validSuspender.value;if(Module.validSuspender.value=!1,t=__pyproxy_aiter_next(r),Module.validSuspender.value=n,t===null)break}catch(n){API.fatal_error(n)}try{yield await t}catch(n){if(n&&typeof n=="object"&&n.type==="StopAsyncIteration")return;throw n}finally{t.destroy()}}}finally{Module.finalizationRegistry.unregister(e),_Py_DecRef(r)}_PyErr_Occurred()&&_pythonexc2js()}i(an,"aiter_helper");var re=class extends _{static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(h(e)&1536)}};i(re,"PyAsyncIterable");var Fe=class{[Symbol.asyncIterator](){let e=f(this),t={},n;try{_check_gil();let a=Module.validSuspender.value;Module.validSuspender.value=!1,n=_PyObject_GetAIter(e),Module.validSuspender.value=a}catch(a){API.fatal_error(a)}n===0&&_pythonexc2js();let o=an(n,t);return Module.finalizationRegistry.register(o,[n,void 0],t),o}};i(Fe,"PyAsyncIterableMethods");var te=class extends _{static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(h(e)&32)}};i(te,"PyIterator");var Oe=class{[Symbol.iterator](){return this}next(e=void 0){let t,n;try{_check_gil();let o=Module.validSuspender.value;Module.validSuspender.value=!1,t=__pyproxyGen_Send(f(this),e),Module.validSuspender.value=o}catch(o){API.fatal_error(o)}return t===null&&_pythonexc2js(),t}};i(Oe,"PyIteratorMethods");var ne=class extends _{static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(h(e)&2048)}};i(ne,"PyGenerator");var Ne=class{throw(e){let t;try{_check_gil();let n=Module.validSuspender.value;Module.validSuspender.value=!1,t=__pyproxyGen_throw(f(this),e),Module.validSuspender.value=n}catch(n){API.fatal_error(n)}return t===null&&_pythonexc2js(),t}return(e){let t;try{_check_gil();let n=Module.validSuspender.value;Module.validSuspender.value=!1,t=__pyproxyGen_return(f(this),e),Module.validSuspender.value=n}catch(n){API.fatal_error(n)}return t===null&&_pythonexc2js(),t}};i(Ne,"PyGeneratorMethods");var oe=class extends _{static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(h(e)&1024)}};i(oe,"PyAsyncIterator");var Te=class{[Symbol.asyncIterator](){return this}async next(e=void 0){let t;try{_check_gil();let o=Module.validSuspender.value;Module.validSuspender.value=!1,t=__pyproxyGen_asend(f(this),e),Module.validSuspender.value=o}catch(o){API.fatal_error(o)}t===null&&_pythonexc2js();let n;try{n=await t}catch(o){if(o&&typeof o=="object"&&o.type==="StopAsyncIteration")return{done:!0,value:n};throw o}finally{t.destroy()}return{done:!1,value:n}}};i(Te,"PyAsyncIteratorMethods");var ae=class extends _{static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(h(e)&4096)}};i(ae,"PyAsyncGenerator");var De=class{async throw(e){let t;try{_check_gil();let o=Module.validSuspender.value;Module.validSuspender.value=!1,t=__pyproxyGen_athrow(f(this),e),Module.validSuspender.value=o}catch(o){API.fatal_error(o)}t===null&&_pythonexc2js();let n;try{n=await t}catch(o){if(o&&typeof o=="object"){if(o.type==="StopAsyncIteration")return{done:!0,value:n};if(o.type==="GeneratorExit")return{done:!0,value:n}}throw o}finally{t.destroy()}return{done:!1,value:n}}async return(e){let t;try{_check_gil();let o=Module.validSuspender.value;Module.validSuspender.value=!1,t=__pyproxyGen_areturn(f(this)),Module.validSuspender.value=o}catch(o){API.fatal_error(o)}t===null&&_pythonexc2js();let n;try{n=await t}catch(o){if(o&&typeof o=="object"){if(o.type==="StopAsyncIteration")return{done:!0,value:n};if(o.type==="GeneratorExit")return{done:!0,value:e}}throw o}finally{t.destroy()}return{done:!1,value:n}}};i(De,"PyAsyncGeneratorMethods");var ie=class extends _{static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(h(e)&8192)}};i(ie,"PySequence");function sn(r,e){let t=r.toString(),n=e.toString();return t===n?0:t{this.insert(n,t)}),this.length}copyWithin(...e){return Array.prototype.copyWithin.apply(this,e),this}fill(...e){return Array.prototype.fill.apply(this,e),this}};i($e,"PyMutableSequenceMethods");function ln(r,e){let t=f(r),n;try{_check_gil();let o=Module.validSuspender.value;Module.validSuspender.value=!1,n=__pyproxy_hasattr(t,e),Module.validSuspender.value=o}catch(o){API.fatal_error(o)}return n===-1&&_pythonexc2js(),n!==0}i(ln,"python_hasattr");function cn(r,e){let{shared:t}=S(r),n=t.cache.map,o;try{_check_gil();let a=Module.validSuspender.value;Module.validSuspender.value=!1,o=__pyproxy_getattr(t.ptr,e,n),Module.validSuspender.value=a}catch(a){API.fatal_error(a)}if(o===null){_PyErr_Occurred()&&_pythonexc2js();return}return o}i(cn,"python_getattr");function un(r,e,t){let n=f(r),o;try{_check_gil();let a=Module.validSuspender.value;Module.validSuspender.value=!1,o=__pyproxy_setattr(n,e,t),Module.validSuspender.value=a}catch(a){API.fatal_error(a)}o===-1&&_pythonexc2js()}i(un,"python_setattr");function dn(r,e){let t=f(r),n;try{_check_gil();let o=Module.validSuspender.value;Module.validSuspender.value=!1,n=__pyproxy_delattr(t,e),Module.validSuspender.value=o}catch(o){API.fatal_error(o)}n===-1&&_pythonexc2js()}i(dn,"python_delattr");function yn(r,e,t,n){let o=f(r),a;try{_check_gil();let s=Module.validSuspender.value;Module.validSuspender.value=!1,a=__pyproxy_slice_assign(o,e,t,n),Module.validSuspender.value=s}catch(s){API.fatal_error(s)}return a===null&&_pythonexc2js(),a}i(yn,"python_slice_assign");function jr(r,e){let t=f(r),n;try{_check_gil();let o=Module.validSuspender.value;Module.validSuspender.value=!1,n=__pyproxy_pop(t,e),Module.validSuspender.value=o}catch(o){API.fatal_error(o)}return n===null&&_pythonexc2js(),n}i(jr,"python_pop");function Ae(r,e,t){return r instanceof Function?e in r&&!["name","length","caller","arguments",t?"prototype":void 0].includes(e):e in r}i(Ae,"filteredHasKey");var R={isExtensible(){return!0},has(r,e){return Ae(r,e,!1)?!0:typeof e=="symbol"?!1:(e.startsWith("$")&&(e=e.slice(1)),ln(r,e))},get(r,e){return typeof e=="symbol"||Ae(r,e,!0)?Reflect.get(r,e):(e.startsWith("$")&&(e=e.slice(1)),cn(r,e))},set(r,e,t){let n=Object.getOwnPropertyDescriptor(r,e);return n&&!n.writable&&!n.set?!1:typeof e=="symbol"||Ae(r,e,!0)?Reflect.set(r,e,t):(e.startsWith("$")&&(e=e.slice(1)),un(r,e,t),!0)},deleteProperty(r,e){let t=Object.getOwnPropertyDescriptor(r,e);return t&&!t.configurable?!1:typeof e=="symbol"||Ae(r,e,!0)?Reflect.deleteProperty(r,e):(e.startsWith("$")&&(e=e.slice(1)),dn(r,e),!0)},ownKeys(r){let e=f(r),t;try{_check_gil();let n=Module.validSuspender.value;Module.validSuspender.value=!1,t=__pyproxy_ownKeys(e),Module.validSuspender.value=n}catch(n){API.fatal_error(n)}return t===null&&_pythonexc2js(),t.push(...Reflect.ownKeys(r)),t},apply(r,e,t){return r.apply(e,t)}};function le(r){return r&&typeof r=="object"&&r.constructor&&r.constructor.name==="PythonError"}i(le,"isPythonError");var pn={isExtensible(){return!0},has(r,e){return typeof e=="string"&&/^[0-9]+$/.test(e)?Number(e)n.toString())),e.push("length"),e}},ur={isExtensible(){return!0},has(r,e){return!!(W.prototype.has.call(r,e)||(typeof e=="string"&&/^[0-9]+$/.test(e)&&(e=Number(e)),W.prototype.has.call(r,e)))},get(r,e){let t;return["copy","constructor","$$flags","toString","destroy"].includes(e)||typeof e=="symbol"?Reflect.get(...arguments):(typeof e=="string"&&(t=$.prototype.get.call(r,e)),t||(typeof e=="string"&&/^[0-9]+$/.test(e)&&(e=Number(e),t=$.prototype.get.call(r,e)),t)?t:Reflect.get(...arguments))},set(r,e,t){if(typeof e=="string"){/^[0-9]+$/.test(e)&&(e=Number(e));try{return M.prototype.set.call(r,e,t),!0}catch(n){if(le(n))return!1;throw n}}return!1},deleteProperty(r,e){if(typeof e=="string"&&/^[0-9]+$/.test(e))try{return M.prototype.delete.call(r,Number(e)),!0}catch(t){if(le(t))return!1;throw t}return!1},getOwnPropertyDescriptor(r,e){return ur.has(r,e)?{configurable:!0,enumerable:!0,value:ur.get(r,e),writable:!0}:void 0},ownKeys(r){let e;e=R.get(r,"keys")();let t=Array.from(e);return e.destroy(),t}},ce=class extends _{static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(h(e)&64)}};i(ce,"PyAwaitable");var Le=class{_ensure_future(){let{shared:e}=je(this);if(e.promise)return e.promise;let t=e.ptr;t||S(this);let n,o,a=new Promise((l,c)=>{n=l,o=c}),s;try{_check_gil();let l=Module.validSuspender.value;Module.validSuspender.value=!1,s=__pyproxy_ensure_future(t,n,o),Module.validSuspender.value=l}catch(l){API.fatal_error(l)}return s===-1&&_pythonexc2js(),e.promise=a,this.destroy(),a}then(e,t){return this._ensure_future().then(e,t)}catch(e){return this._ensure_future().catch(e)}finally(e){return this._ensure_future().finally(e)}};i(Le,"PyAwaitableMethods");var ue=class extends _{static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(h(e)&256)}};i(ue,"PyCallable");var de=class{apply(e,t){return t=function(...n){return n}.apply(void 0,t),t=Lr(this,e,t),Module.callPyObject(f(this),t)}call(e,...t){return t=Lr(this,e,t),Module.callPyObject(f(this),t)}callWithOptions({relaxed:e,kwargs:t,promising:n},...o){let a={};if(t){if(o.length===0)throw new TypeError("callWithOptions with 'kwargs: true' requires at least one argument (the key word argument object)");if(a=o.pop(),a.constructor!==void 0&&a.constructor.name!=="Object")throw new TypeError("kwargs argument is not an object")}let s=e?API.pyodide_code.relaxed_call:this;return e&&o.unshift(this),(n?Ie:Ue)(f(s),o,a)}callKwargs(...e){if(e.length===0)throw new TypeError("callKwargs requires at least one argument (the key word argument object)");let t=e.pop();if(t.constructor!==void 0&&t.constructor.name!=="Object")throw new TypeError("kwargs argument is not an object");return Ue(f(this),e,t)}callRelaxed(...e){return API.pyodide_code.relaxed_call(this,...e)}callKwargsRelaxed(...e){return API.pyodide_code.relaxed_call.callKwargs(this,...e)}callPromising(...e){return Ie(f(this),e,{})}callPromisingKwargs(...e){if(e.length===0)throw new TypeError("callKwargs requires at least one argument (the key word argument object)");let t=e.pop();if(t.constructor!==void 0&&t.constructor.name!=="Object")throw new TypeError("kwargs argument is not an object");return Ie(f(this),e,t)}bind(e,...t){let{shared:n,props:o}=S(this),{boundArgs:a,boundThis:s,isBound:l}=o,c=e;l&&(c=s);let u=a.concat(t);return o=Object.assign({},o,{boundArgs:u,isBound:!0,boundThis:c}),fe(n.ptr,{shared:n,flags:h(this),props:o})}captureThis(){let{props:e,shared:t}=S(this);return e=Object.assign({},e,{captureThis:!0}),fe(t.ptr,{shared:t,flags:h(this),props:e})}};i(de,"PyCallableMethods");de.prototype.prototype=Function.prototype;var fn=new Map([["i8",Int8Array],["u8",Uint8Array],["u8clamped",Uint8ClampedArray],["i16",Int16Array],["u16",Uint16Array],["i32",Int32Array],["u32",Uint32Array],["i32",Int32Array],["u32",Uint32Array],["i64",globalThis.BigInt64Array],["u64",globalThis.BigUint64Array],["f32",Float32Array],["f64",Float64Array],["dataview",DataView]]),ye=class extends _{static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(h(e)&128)}};i(ye,"PyBuffer");var Ce=class{getBuffer(e){let t;if(e&&(t=fn.get(e),t===void 0))throw new Error(`Unknown type ${e}`);let n=f(this),o;try{_check_gil();let A=Module.validSuspender.value;Module.validSuspender.value=!1,o=__pyproxy_get_buffer(n),Module.validSuspender.value=A}catch(A){API.fatal_error(A)}o===null&&_pythonexc2js();let{start_ptr:a,smallest_ptr:s,largest_ptr:l,readonly:c,format:u,itemsize:d,shape:y,strides:p,view:m,c_contiguous:I,f_contiguous:tr}=o,Mr=!1;try{let A=!1;t===void 0&&([t,A]=Module.processBufferFormatString(u," In this case, you can pass an explicit type argument."));let F=parseInt(t.name.replace(/[^0-9]/g,""))/8||1;if(A&&F>1)throw new Error("Javascript has no native support for big endian buffers. In this case, you can pass an explicit type argument. For instance, `getBuffer('dataview')` will return a `DataView`which has native support for reading big endian data. Alternatively, toJs will automatically convert the buffer to little endian.");let ve=l-s;if(ve!==0&&(a%F!==0||s%F!==0||l%F!==0))throw new Error(`Buffer does not have valid alignment for a ${t.name}`);let Nt=ve/F,Tt=(a-s)/F,nr;ve===0?nr=new t:nr=new t(HEAPU32.buffer,s,Nt);for(let Dt of p.keys())p[Dt]/=F;return Mr=!0,Object.create(z.prototype,Object.getOwnPropertyDescriptors({offset:Tt,readonly:c,format:u,itemsize:d,ndim:y.length,nbytes:ve,shape:y,strides:p,data:nr,c_contiguous:I,f_contiguous:tr,_view_ptr:m,_released:!1}))}finally{if(!Mr)try{_check_gil();let A=Module.validSuspender.value;Module.validSuspender.value=!1,_PyBuffer_Release(m),_PyMem_Free(m),Module.validSuspender.value=A}catch(A){API.fatal_error(A)}}}};i(Ce,"PyBufferMethods");var pe=class extends _{static[Symbol.hasInstance](e){return API.isPyProxy(e)&&e.type==="dict"}};i(pe,"PyDict");var z=class{constructor(){throw new TypeError("PyBufferView is not a constructor")}release(){if(!this._released){try{_check_gil();let e=Module.validSuspender.value;Module.validSuspender.value=!1,_PyBuffer_Release(this._view_ptr),_PyMem_Free(this._view_ptr),Module.validSuspender.value=e}catch(e){API.fatal_error(e)}this._released=!0,this.data=null}}};i(z,"PyBufferView");var Vr={PyProxy:_,PyProxyWithLength:Y,PyProxyWithGet:Q,PyProxyWithSet:X,PyProxyWithHas:Z,PyDict:pe,PyIterable:ee,PyAsyncIterable:re,PyIterator:te,PyAsyncIterator:oe,PyGenerator:ne,PyAsyncGenerator:ae,PyAwaitable:ce,PyCallable:ue,PyBuffer:ye,PyBufferView:z,PythonError:k,PySequence:ie,PyMutableSequence:se};var qr=i(r=>{r.id!=="canvas"&&console.warn("If you are using canvas element for SDL library, it should have id 'canvas' to work properly."),Module.canvas=r},"setCanvas2D"),Yr=i(()=>Module.canvas,"getCanvas2D"),_n=i(r=>{qr(r)},"setCanvas3D"),mn=i(()=>Yr(),"getCanvas3D"),Qr={setCanvas2D:qr,getCanvas2D:Yr,setCanvas3D:_n,getCanvas3D:mn};var g=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&!process.browser,pr=g&&typeof module<"u"&&typeof module.exports<"u"&&typeof P<"u"&&typeof __dirname<"u",Xr=g&&!pr,gn=typeof globalThis.Bun<"u",Zr=typeof Deno<"u",fr=!g&&!Zr,G=fr&&typeof window=="object"&&typeof document=="object"&&typeof document.createElement=="function"&&typeof sessionStorage=="object"&&typeof importScripts!="function",_e=fr&&typeof importScripts=="function"&&typeof self=="object",_r=typeof navigator=="object"&&typeof navigator.userAgent=="string"&&navigator.userAgent.indexOf("Chrome")==-1&&navigator.userAgent.indexOf("Safari")>-1;function et(){return{IN_NODE:g,IN_NODE_COMMONJS:pr,IN_NODE_ESM:Xr,IN_BUN:gn,IN_DENO:Zr,IN_BROWSER:fr,IN_BROWSER_MAIN_THREAD:G,IN_BROWSER_WEB_WORKER:_e,IN_SAFARI:_r}}i(et,"detectEnvironment");var rt,gr,tt,Be,K;async function nt(){if(!g||(rt=(await import("node:url")).default,Be=await import("node:fs"),K=await import("node:fs/promises"),tt=(await import("node:vm")).default,gr=await import("node:path"),ot=gr.sep,typeof P<"u"))return;let r=Be,e=await import("node:crypto"),t=await import("ws"),n=await import("node:child_process"),o={fs:r,crypto:e,ws:t,child_process:n};globalThis.require=function(a){return o[a]}}i(nt,"initNodeModules");function hn(r,e){return gr.resolve(e||".",r)}i(hn,"node_resolvePath");function bn(r,e){return e===void 0&&(e=location),new URL(r,e).toString()}i(bn,"browser_resolvePath");var He;g?He=hn:He=bn;var ot;g||(ot="/");function Pn(r,e){return r.startsWith("file://")&&(r=r.slice(7)),r.includes("://")?{response:fetch(r)}:{binary:K.readFile(r).then(t=>new Uint8Array(t.buffer,t.byteOffset,t.byteLength))}}i(Pn,"node_getBinaryResponse");function vn(r,e){let t=new URL(r,location);return{response:fetch(t,e?{integrity:e}:{})}}i(vn,"browser_getBinaryResponse");var hr;g?hr=Pn:hr=vn;async function me(r,e){let{response:t,binary:n}=hr(r,e);if(n)return n;let o=await t;if(!o.ok)throw new Error(`Failed to load '${r}': request failed.`);return new Uint8Array(await o.arrayBuffer())}i(me,"loadBinaryFile");var mr;if(G)mr=i(async r=>await import(r),"loadScript");else if(_e)mr=i(async r=>{try{globalThis.importScripts(r)}catch(e){if(e instanceof TypeError)await import(r);else throw e}},"loadScript");else if(g)mr=xn;else throw new Error("Cannot determine runtime environment");async function xn(r){r.startsWith("file://")&&(r=r.slice(7)),r.includes("://")?tt.runInThisContext(await(await fetch(r)).text()):await import(rt.pathToFileURL(r).href)}i(xn,"nodeLoadScript");function We(){let r=Promise.resolve();async function e(){let t=r,n;return r=new Promise(o=>n=o),await t,n}return i(e,"acquireLock"),e}i(We,"createLock");var at=i(r=>{let e={};return(...t)=>{let n=t[0];if(n in e)return e[n];{let o=r(n);return e[n]=o,o}}},"memoize");function wn(r,e,t){let n=r.substring(0,r.lastIndexOf("/")),o=e||[];o=o.concat(API.defaultLdLibraryPath,[n]);let a=i(c=>{for(let u of o){let d=Module.PATH.join2(u,c);if(Module.FS.findObject(d)!==null)return d}return c},"resolvePath"),s=i(c=>Module.FS.readFile(a(c)),"readFile");return t!==void 0&&(s=i(c=>t(a(c)),"readFile")),{findObject:(c,u)=>Module.FS.findObject(a(c),u),readFile:s}}i(wn,"createDynlibFS");var Sn=We();async function it(r,e,t,n){let o=await Sn(),a=wn(r,t,n);try{if(await Module.loadDynamicLibrary(r,{loadAsync:!0,nodelete:!0,allowUndefined:!0,global:e,fs:a}),e&&Module.PATH.isAbs(r)){let s=Module.PATH.basename(r);Module.LDSO.loadedLibsByName[s]||(Module.LDSO.loadedLibsByName[s]=Module.LDSO.loadedLibsByName[r])}}catch(s){if(s&&s.message&&s.message.includes("need to see wasm magic number")){console.warn(`Failed to load dynlib ${r}. We probably just tried to load a linux .so file or something.`);return}throw s}finally{o()}}i(it,"loadDynlib");async function br(r,e){let t=`${API.sitepackages}/${r.file_name.split("-")[0]}.libs`,n=at(Module.FS.readFile),o=!!r.shared_library,a;if(o)a=e.map(s=>({path:s,global:!0}));else{let s=An(e,n);a=e.map(l=>{let c=s.has(Module.PATH.basename(l));return{path:l,global:c||!!r.shared_library}})}a.sort((s,l)=>Number(l.global)-Number(s.global));for(let{path:s,global:l}of a)await it(s,l,[t],n)}i(br,"loadDynlibsFromPackage");function An(r,e){let t=Module.FS.readFile;e!==void 0&&(t=e);let n=new Set;return r.forEach(o=>{let a=t(o);Module.getDylinkMetadata(a).neededDynlibs.forEach(l=>{n.add(l)})}),n}i(An,"calculateGlobalLibs");API.loadDynlib=it;API.loadDynlibsFromPackage=br;var In=/[-_.]+/g;function st(r){return r.replace(In,"-").toLowerCase()}i(st,"canonicalizePackageName");var En=/^.*?([^\/]*)\.whl$/;function lt(r){let e=En.exec(r);if(e){let t=e[1].toLowerCase().split("-");return{name:t[0],version:t[1],fileName:t.join("-")+".whl"}}}i(lt,"uriToPackageData");function ct(r){return btoa(r.match(/\w{2}/g).map(function(e){return String.fromCharCode(parseInt(e,16))}).join(""))}i(ct,"base16ToBase64");async function kn(r){await nt();let e=await r;if(!e.packages)throw new Error("Loaded pyodide lock file does not contain the expected key 'packages'.");if(e.info.version!==API.version)throw new Error(`Lock file version doesn't match Pyodide version.\n lockfile version: ${API.lockfile_info.version}\n pyodide version: ${API.version}`);API.lockfile_info=e.info,API.lockfile_packages=e.packages,API.lockfile_unvendored_stdlibs_and_test=[],API.repodata_info=e.info,API.repodata_packages=e.packages,API._import_name_to_package_name=new Map;for(let o of Object.keys(API.lockfile_packages)){let a=API.lockfile_packages[o];for(let s of a.imports)API._import_name_to_package_name.set(s,o);a.package_type==="cpython_module"&&API.lockfile_unvendored_stdlibs_and_test.push(o)}API.lockfile_unvendored_stdlibs=API.lockfile_unvendored_stdlibs_and_test.filter(o=>o!=="test");let t=API.config.packages;API.config.fullStdLib&&(t=[...t,...API.lockfile_unvendored_stdlibs]),await Ge(t,{messageCallback(){}}),await API.bootstrapFinalizedPromise,API._pyodide._importhook.register_module_not_found_hook(API._import_name_to_package_name,API.lockfile_unvendored_stdlibs_and_test),API.package_loader.init_loaded_packages()}i(kn,"initializePackageIndex");API.lockFilePromise&&(API.packageIndexReady=kn(API.lockFilePromise));var ze;API.setCdnUrl=function(r){ze=r};var ge="default channel";function ut(){let r=i(()=>{},"_resolve"),e=i(()=>{},"_reject"),t=new Promise((n,o)=>{r=n,e=o});return t.resolve=r,t.reject=e,t}i(ut,"createDonePromise");function dt(r,e){let t=st(r);if(e.has(t))return;let n=API.lockfile_packages[t];if(!n)throw new Error(`No known package with name '${r}'`);if(e.set(t,{name:n.name,normalizedName:t,channel:ge,depends:n.depends,installPromise:void 0,done:ut(),packageData:n}),L[n.name]===void 0)for(let o of n.depends)dt(o,e)}i(dt,"addPackageToLoad");function yt(r,e){let t=new Map;for(let n of r){let o=lt(n);if(o===void 0){dt(n,t);continue}let{name:a,version:s,fileName:l}=o,c=n;if(t.has(a)&&t.get(a).channel!==c){e(`Loading same package ${a} from ${c} and ${t.get(a).channel}`);continue}t.set(a,{name:a,normalizedName:a,channel:c,depends:[],installPromise:void 0,done:ut(),packageData:{name:a,version:s,file_name:l,install_dir:"site",sha256:"",package_type:"package",imports:[],depends:[],shared_library:!1}})}return t}i(yt,"recursiveDependencies");API.recursiveDependencies=yt;async function Mn(r,e=!0){let t;if(g){t=API.config.packageCacheDir;try{await K.stat(t)}catch{await K.mkdir(t,{recursive:!0})}}else t=API.config.indexURL;let n,o,a;if(r.channel===ge){if(!(r.normalizedName in API.lockfile_packages))throw new Error(`Internal error: no entry for package named ${name}`);let l=API.lockfile_packages[r.normalizedName];n=l.file_name,o=He(n,t),a="sha256-"+ct(l.sha256)}else o=r.channel,a=void 0;e||(a=void 0);try{return await me(o,a)}catch(l){if(!g||r.channel!==ge)throw l}console.log(`Didn't find package ${n} locally, attempting to load from ${ze}`);let s=await me(ze+n);return console.log(`Package ${n} loaded from ${ze}, caching the wheel in node_modules for future use.`),await K.writeFile(o,s),s}i(Mn,"downloadPackage");async function Fn(r,e,t){let n=API.lockfile_packages[r];n||(n={name:"",version:"",file_name:".whl",install_dir:"site",sha256:"",package_type:"package",imports:[],depends:[],shared_library:!1});let o=n.file_name,a=API.package_loader.unpack_buffer.callKwargs({buffer:e,filename:o,target:n.install_dir,calculate_dynlibs:!0,installer:"pyodide.loadPackage",source:t===ge?"pyodide":t});await br(n,a)}i(Fn,"installPackage");async function On(r,e,t,n,o=!0){if(L[r.name]===void 0)try{let a=await Mn(r,o),s=r.depends.map(l=>e.has(l)?e.get(l).done:Promise.resolve());await API.bootstrapFinalizedPromise,await Promise.all(s),await Fn(r.normalizedName,a,r.channel),t.add(r.packageData),L[r.name]=r.channel}catch(a){n.set(r.name,a)}finally{r.done.resolve()}}i(On,"downloadAndInstall");var Nn=We();function Tn({name:r,version:e,file_name:t,package_type:n}){return{name:r,version:e,fileName:t,packageType:n}}i(Tn,"filterPackageData");async function Ge(r,e={checkIntegrity:!0}){let t=new Set,n=e.messageCallback||console.log,o=e.errorCallback||console.error;r instanceof _&&(r=r.toJs()),Array.isArray(r)||(r=[r]);let a=yt(r,o);for(let[u,{name:d,normalizedName:y,channel:p}]of a){let m=L[d];m!==void 0&&(a.delete(y),m===p||p===ge?n(`${d} already loaded from ${m}`):o(`URI mismatch, attempting to load package ${d} from ${p} while it is already loaded from ${m}. To override a dependency, load the custom package first.`))}if(a.size===0)return n("No new packages to load"),[];let s=Array.from(a.values(),({name:u})=>u).sort().join(", "),l=new Map,c=await Nn();try{n(`Loading ${s}`);for(let[u,d]of a){if(L[d.name]){a.delete(d.normalizedName);continue}d.installPromise=On(d,a,t,l,e.checkIntegrity)}if(await Promise.all(Array.from(a.values()).map(({installPromise:u})=>u)),Module.reportUndefinedSymbols(),t.size>0){let u=Array.from(t,d=>d.name).sort().join(", ");n(`Loaded ${u}`)}if(l.size>0){let u=Array.from(l.keys()).sort().join(", ");n(`Failed to load ${u}`);for(let[d,y]of l)o(`The following error occurred while loading ${d}:`),o(y.message)}return API.importlib.invalidate_caches(),Array.from(t,Tn)}finally{c()}}i(Ge,"loadPackage");var L={};var pt="0.26.2";var xr=g?P("node:fs"):void 0,gt=g?P("node:tty"):void 0;function ht(r){try{xr.fsyncSync(r)}catch(e){if(e&&e.code==="EINVAL")return;throw e}}i(ht,"nodeFsync");var bt=!1,Qe={},x={};function vr(r){Qe[x.stdin]=r}i(vr,"_setStdinOps");function Dn(r){Qe[x.stdout]=r}i(Dn,"_setStdoutOps");function Rn(r){Qe[x.stderr]=r}i(Rn,"_setStderrOps");function $n(r){return r&&typeof r=="object"&&"errno"in r}i($n,"isErrnoError");var Ln=new Int32Array(new WebAssembly.Memory({shared:!0,initial:1,maximum:1}).buffer);function Cn(r){try{return Atomics.wait(Ln,0,0,r),!0}catch{return!1}}i(Cn,"syncSleep");function Un(r){for(;;)try{return r()}catch(e){if(e&&e.code==="EAGAIN"&&Cn(100))continue;throw e}}i(Un,"handleEAGAIN");function ft(r,e,t){let n;try{n=Un(e)}catch(o){throw o&&o.code&&Module.ERRNO_CODES[o.code]?new FS.ErrnoError(Module.ERRNO_CODES[o.code]):$n(o)?o:(console.error("Error thrown in read:"),console.error(o),new FS.ErrnoError(29))}if(n===void 0)throw console.warn(`${t} returned undefined; a correct implementation must return a number`),new FS.ErrnoError(29);return n!==0&&(r.node.timestamp=Date.now()),n}i(ft,"readWriteHelper");var _t=i((r,e,t)=>API.typedArrayAsUint8Array(r).subarray(e,e+t),"prepareBuffer"),Pr={open:function(r){let e=Qe[r.node.rdev];if(!e)throw new FS.ErrnoError(43);r.devops=e,r.tty=r.devops.isatty,r.seekable=!1},close:function(r){r.stream_ops.fsync(r)},fsync:function(r){let e=r.devops;e.fsync&&e.fsync()},read:function(r,e,t,n,o){return e=_t(e,t,n),ft(r,()=>r.devops.read(e),"read")},write:function(r,e,t,n,o){return e=_t(e,t,n),ft(r,()=>r.devops.write(e),"write")}};function Xe(){bt&&(FS.closeStream(0),FS.closeStream(1),FS.closeStream(2),FS.open("/dev/stdin",0),FS.open("/dev/stdout",1),FS.open("/dev/stderr",1))}i(Xe,"refreshStreams");API.initializeStreams=function(r,e,t){let n=FS.createDevice.major++;x.stdin=FS.makedev(n,0),x.stdout=FS.makedev(n,1),x.stderr=FS.makedev(n,2),FS.registerDevice(x.stdin,Pr),FS.registerDevice(x.stdout,Pr),FS.registerDevice(x.stderr,Pr),FS.unlink("/dev/stdin"),FS.unlink("/dev/stdout"),FS.unlink("/dev/stderr"),FS.mkdev("/dev/stdin",x.stdin),FS.mkdev("/dev/stdout",x.stdout),FS.mkdev("/dev/stderr",x.stderr),be({stdin:r}),wr({batched:e}),Sr({batched:t}),bt=!0,Xe()};function jn(){be(g?new Je(process.stdin.fd):{stdin:()=>prompt()})}i(jn,"setDefaultStdin");function Bn(){vr(new Ke),Xe()}i(Bn,"setStdinError");function be(r={}){let{stdin:e,error:t,isatty:n,autoEOF:o,read:a}=r,s=+!!e+ +!!t+ +!!a;if(s>1)throw new TypeError("At most one of stdin, read, and error must be provided.");if(!e&&o!==void 0)throw new TypeError("The 'autoEOF' option can only be used with the 'stdin' option");if(s===0){jn();return}t&&Bn(),e&&(o=o===void 0?!0:o,vr(new Ve(e.bind(r),!!n,o))),a&&vr(r),Xe()}i(be,"setStdin");function Pt(r,e,t){let{raw:n,isatty:o,batched:a,write:s}=r,l=+!!n+ +!!a+ +!!s;if(l===0&&(r=t(),({raw:n,isatty:o,batched:a,write:s}=r)),l>1)throw new TypeError("At most one of 'raw', 'batched', and 'write' must be passed");if(!n&&!s&&o)throw new TypeError("Cannot set 'isatty' to true unless 'raw' or 'write' is provided");n&&e(new qe(n.bind(r),!!o)),a&&e(new Ye(a.bind(r))),s&&e(r),Xe()}i(Pt,"_setStdwrite");function Hn(){return g?new he(process.stdout.fd):{batched:r=>console.log(r)}}i(Hn,"_getStdoutDefaults");function Wn(){return g?new he(process.stderr.fd):{batched:r=>console.warn(r)}}i(Wn,"_getStderrDefaults");function wr(r={}){Pt(r,Dn,Hn)}i(wr,"setStdout");function Sr(r={}){Pt(r,Rn,Wn)}i(Sr,"setStderr");var zn=new TextEncoder,mt=new TextDecoder,Ke=class{read(e){throw new FS.ErrnoError(29)}};i(Ke,"ErrorReader");var Je=class{constructor(e){this.fd=e,this.isatty=gt.isatty(e)}read(e){try{return xr.readSync(this.fd,e)}catch(t){if(t.toString().includes("EOF"))return 0;throw t}}fsync(){ht(this.fd)}};i(Je,"NodeReader");var Ve=class{constructor(e,t,n){this.infunc=e,this.isatty=t,this.autoEOF=n,this.index=0,this.saved=void 0,this.insertEOF=!1}_getInput(){if(this.saved)return this.saved;let e=this.infunc();if(typeof e=="number")return e;if(e!=null){if(ArrayBuffer.isView(e)){if(e.BYTES_PER_ELEMENT!==1)throw console.warn(`Expected BYTES_PER_ELEMENT to be 1, infunc gave ${e.constructor}`),new FS.ErrnoError(29);return e}if(typeof e=="string")return e.endsWith(`\n`)||(e+=`\n`),e;if(Object.prototype.toString.call(e)==="[object ArrayBuffer]")return new Uint8Array(e);throw console.warn("Expected result to be undefined, null, string, array buffer, or array buffer view"),new FS.ErrnoError(29)}}read(e){if(this.insertEOF)return this.insertEOF=!1,0;let t=0;for(;;){let n=this._getInput();if(typeof n=="number"){e[0]=n,e=e.subarray(1),t++;continue}let o;if(n&&n.length>0)if(typeof n=="string"){let{read:a,written:s}=zn.encodeInto(n,e);this.saved=n.slice(a),t+=s,o=e[s-1],e=e.subarray(s)}else{let a;n.length>e.length?(e.set(n.subarray(0,e.length)),this.saved=n.subarray(e.length),a=e.length):(e.set(n),this.saved=void 0,a=n.length),t+=a,o=e[a-1],e=e.subarray(a)}if(!(n&&n.length>0)||this.autoEOF||e.length===0)return this.insertEOF=t>0&&this.autoEOF&&o!==10,t}}fsync(){}};i(Ve,"LegacyReader");var qe=class{constructor(e,t){this.out=e,this.isatty=t}write(e){for(let t of e)this.out(t);return e.length}};i(qe,"CharacterCodeWriter");var Ye=class{constructor(e){this.isatty=!1;this.out=e,this.output=[]}write(e){for(let t of e)t===10?(this.out(mt.decode(new Uint8Array(this.output))),this.output=[]):t!==0&&this.output.push(t);return e.length}fsync(){this.output&&this.output.length>0&&(this.out(mt.decode(new Uint8Array(this.output))),this.output=[])}};i(Ye,"StringWriter");var he=class{constructor(e){this.fd=e,this.isatty=gt.isatty(e)}write(e){return xr.writeSync(this.fd,e)}fsync(){ht(this.fd)}};i(he,"NodeWriter");var Ir="sched$"+Math.random().toString(36).slice(2)+"$",Er={},Ar=0;function Gn(){if(!G)return;let r=i(e=>{if(typeof e.data=="string"&&e.data.indexOf(Ir)===0){let t=+e.data.slice(Ir.length),n=Er[t];if(!n)return;try{n()}finally{delete Er[t]}}},"onGlobalMessage");globalThis.addEventListener("message",r,!1)}i(Gn,"installPostMessageHandler");Gn();function Kn(r){if(g)setImmediate(r);else if(G&&typeof globalThis.postMessage=="function")Er[Ar]=r,globalThis.postMessage(Ir+Ar,"*"),Ar++;else if(_e&&!_r&&typeof MessageChannel=="function"){let e=new MessageChannel;e.port1.onmessage=()=>r(),e.port2.postMessage("")}else setTimeout(r,0)}i(Kn,"scheduleCallbackImmediate");function Ze(r,e=0){e<=2?Kn(r):setTimeout(r,e)}i(Ze,"scheduleCallback");var{get:Jn,getOwnPropertyDescriptor:Vn,ownKeys:qn}=Reflect,Yn=i(r=>({value:r,enumerable:!0,writable:!0,configurable:!0}),"getPropertyDescriptor"),xt=Symbol(),vt="prototype",Qn={deleteProperty:(r,e)=>r.has(e)?r.delete(e):delete r[e],get(r,e,t){if(e===xt)return r;let n=r[e];return typeof n=="function"&&e!=="constructor"&&(n=n.bind(r)),n||(n=r.get(e)),n},getOwnPropertyDescriptor(r,e){if(r.has(e))return Yn(r.get(e));if(e in r)return Vn(r,e)},has:(r,e)=>r.has(e)||e in r,ownKeys:r=>[...r.keys(),...qn(r)].filter(e=>["string","symbol"].includes(typeof e)),set:(r,e,t)=>(r.set(e,t),!0)};API.LiteralMap=new Proxy(i(class extends Map{constructor(...e){return new Proxy(super(...e),Qn)}},"LiteralMap"),{get(r,e,...t){return e!==vt&&e in r[vt]?(n,...o)=>{let a=n[xt],s=a[e];return typeof s=="function"&&(s=s.apply(a,o)),s===a?n:s}:Jn(r,e,...t)}});function St(){return[null,kr,API.config.jsglobals,API.public_api,API,Ze,API,{}]}i(St,"getExpectedKeys");var At=Symbol("getAccessorList");function er(r,e=[]){return new Proxy(r,{get(t,n,o){if(n===At)return e;let a=Reflect.get(...arguments),s=Reflect.getOwnPropertyDescriptor(t,n);return s&&s.writable===!1&&!s.configurable||s&&s.set&&!s.get||!["object","function"].includes(typeof a)?a:er(a,[...e,n])},getPrototypeOf(){return er(Reflect.getPrototypeOf(...arguments),[...e,"[getProtoTypeOf]"])}})}i(er,"makeGlobalsProxy");var It=1886286592,Et=0,rr=4*4,Pe=5;API.makeSnapshot=function(){if(!API.config._makeSnapshot)throw new Error("makeSnapshot only works if you passed the makeSnapshot option to loadPyodide");let r=[],e=St();for(let y=0;ywt(o,n)),e.hiwireKeys.forEach((n,o)=>{let a=n?.reduce((s,l)=>s[l],r)||null;wt(t.length+o,a)}),e.immortalKeys.forEach(n=>Module.__hiwire_immortal_add(n))}i(Mt,"syncUpSnapshotLoad2");API.loadBinaryFile=me;API.rawRun=i(function(e){let t=Module.stringToNewUTF8(e);Module.API.capture_stderr();let n=_PyRun_SimpleString(t);_free(t);let o=Module.API.restore_stderr().trim();return[n,o]},"rawRun");API.runPythonInternal=function(r){return API._pyodide._base.eval_code(r,API.runPythonInternal_dict)};API.setPyProxyToStringMethod=function(r){Module.HEAP8[Module._compat_to_string_repr]=+r};API.saveState=()=>API.pyodide_py._state.save_state();API.restoreState=r=>API.pyodide_py._state.restore_state(r);API.scheduleCallback=Ze;API.detectEnvironment=et;function Ft(r){Module.FS.mkdirTree(r);let{node:e}=Module.FS.lookupPath(r,{follow_mount:!1});if(FS.isMountpoint(e))throw new Error(`path '${r}' is already a file system mount point`);if(!FS.isDir(e.mode))throw new Error(`path '${r}' points to a file not a directory`);for(let t in e.contents)throw new Error(`directory '${r}' is not empty`)}i(Ft,"ensureMountPathExists");var b=class{static async loadPackagesFromImports(e,t={checkIntegrity:!0}){let n=API.pyodide_code.find_imports(e),o;try{o=n.toJs()}finally{n.destroy()}if(o.length===0)return[];let a=API._import_name_to_package_name,s=new Set;for(let l of o)a.has(l)&&s.add(a.get(l));return s.size?await Ge(Array.from(s),t):[]}static runPython(e,t={}){return t.globals||(t.globals=API.globals),API.pyodide_code.eval_code.callKwargs(e,t)}static async runPythonAsync(e,t={}){return t.globals||(t.globals=API.globals),await API.pyodide_code.eval_code_async.callKwargs(e,t)}static registerJsModule(e,t){API.pyodide_ffi.register_js_module(e,t)}static unregisterJsModule(e){API.pyodide_ffi.unregister_js_module(e)}static toPy(e,{depth:t,defaultConverter:n}={depth:-1}){switch(typeof e){case"string":case"number":case"boolean":case"bigint":case"undefined":return e}if(!e||API.isPyProxy(e))return e;let o=0,a=0;try{o=Module.js2python_convert(e,{depth:t,defaultConverter:n})}catch(s){throw s instanceof Module._PropagatePythonError&&_pythonexc2js(),s}try{if(_JsProxy_Check(o))return e;a=_python2js(o),a===null&&_pythonexc2js()}finally{_Py_DecRef(o)}return a}static pyimport(e){return API.pyodide_base.pyimport_impl(e)}static unpackArchive(e,t,n={}){if(!ArrayBuffer.isView(e)&&API.getTypeTag(e)!=="[object ArrayBuffer]")throw new TypeError("Expected argument 'buffer' to be an ArrayBuffer or an ArrayBuffer view");API.typedArrayAsUint8Array(e);let o=n.extractDir;API.package_loader.unpack_buffer.callKwargs({buffer:e,format:t,extract_dir:o,installer:"pyodide.unpackArchive"})}static async mountNativeFS(e,t){if(t.constructor.name!=="FileSystemDirectoryHandle")throw new TypeError("Expected argument 'fileSystemHandle' to be a FileSystemDirectoryHandle");return Ft(e),Module.FS.mount(Module.FS.filesystems.NATIVEFS_ASYNC,{fileSystemHandle:t},e),await new Promise((n,o)=>Module.FS.syncfs(!0,n)),{syncfs:async()=>new Promise((n,o)=>Module.FS.syncfs(!1,n))}}static mountNodeFS(e,t){if(!g)throw new Error("mountNodeFS only works in Node");Ft(e);let n;try{n=Be.lstatSync(t)}catch{throw new Error(`hostPath '${t}' does not exist`)}if(!n.isDirectory())throw new Error(`hostPath '${t}' is not a directory`);Module.FS.mount(Module.FS.filesystems.NODEFS,{root:t},e)}static registerComlink(e){API._Comlink=e}static setInterruptBuffer(e){Module.HEAP8[Module._Py_EMSCRIPTEN_SIGNAL_HANDLING]=+!!e,Module.Py_EmscriptenSignalBuffer=e}static checkInterrupt(){if(_PyGILState_Check()){__PyErr_CheckSignals()&&_pythonexc2js();return}else{let e=Module.Py_EmscriptenSignalBuffer;if(e&&e[0]===2)throw new Module.FS.ErrnoError(27)}}static setDebug(e){let t=!!API.debug_ffi;return API.debug_ffi=e,t}static makeMemorySnapshot(){if(!API.config._makeSnapshot)throw new Error("Can only use pyodide.makeMemorySnapshot if the _makeSnapshot option is passed to loadPyodide");return API.makeSnapshot()}};i(b,"PyodideAPI"),b.version=pt,b.loadPackage=Ge,b.loadedPackages=L,b.ffi=Vr,b.setStdin=be,b.setStdout=wr,b.setStderr=Sr,b.globals={},b.FS={},b.PATH={},b.canvas=Qr,b.ERRNO_CODES={},b.pyodide_py={};function Xn(){let r=Object.getOwnPropertyDescriptors(b);delete r.prototype;let e=Object.create({},r);return API.public_api=e,e.FS=Module.FS,e.PATH=Module.PATH,e.ERRNO_CODES=Module.ERRNO_CODES,e._module=Module,e._api=API,e}i(Xn,"makePublicAPI");function Zn(r,e){return new Proxy(r,{get(t,n){return n==="get"?o=>{let a=t.get(o);return a===void 0&&(a=e.get(o)),a}:n==="has"?o=>t.has(o)||e.has(o):Reflect.get(t,n)}})}i(Zn,"wrapPythonGlobals");var Ot;API.bootstrapFinalizedPromise=new Promise(r=>Ot=r);function kr(r){"__all__"in r||Object.defineProperty(r,"__all__",{get:()=>API.public_api.toPy(Object.getOwnPropertyNames(r).filter(e=>e!=="__all__")),enumerable:!1,configurable:!0})}i(kr,"jsFinderHook");API.finalizeBootstrap=function(r){r&&kt();let[e,t]=API.rawRun("import _pyodide_core");e&&API.fatal_loading_error(`Failed to import _pyodide_core\n`,t),API.runPythonInternal_dict=API._pyodide._base.eval_code("{}"),API.importlib=API.runPythonInternal("import importlib; importlib");let n=API.importlib.import_module;API.sys=n("sys"),API.os=n("os");let o=API.runPythonInternal("import __main__; __main__.__dict__"),a=API.runPythonInternal("import builtins; builtins.__dict__");API.globals=Zn(o,a);let s=API._pyodide._importhook,l=Xn();API.config._makeSnapshot&&(API.config.jsglobals=er(API.config.jsglobals));let c=API.config.jsglobals;return r?Mt(c,r):(s.register_js_finder.callKwargs({hook:kr}),s.register_js_module("js",c),s.register_js_module("pyodide_js",l)),API.pyodide_py=n("pyodide"),API.pyodide_code=n("pyodide.code"),API.pyodide_ffi=n("pyodide.ffi"),API.package_loader=n("pyodide._package_loader"),API.pyodide_base=n("_pyodide._base"),API.sitepackages=API.package_loader.SITE_PACKAGES.__str__(),API.dsodir=API.package_loader.DSO_DIR.__str__(),API.defaultLdLibraryPath=[API.dsodir,API.sitepackages],API.os.environ.__setitem__("LD_LIBRARY_PATH",API.defaultLdLibraryPath.join(":")),l.pyodide_py=API.pyodide_py,l.globals=API.globals,Ot(),l}})()}var StackSwitching=(()=>{var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:true})};var __copyProps=(to,from,except,desc)=>{if(from&&typeof from==="object"||typeof from==="function"){for(let key of __getOwnPropNames(from))if(!__hasOwnProp.call(to,key)&&key!==except)__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable})}return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:true}),mod);var __toBinary=(()=>{var table=new Uint8Array(128);for(var i=0;i<64;i++)table[i<26?i+65:i<52?i+71:i<62?i-4:i*4-205]=i;return base64=>{var n=base64.length,bytes=new Uint8Array((n-(base64[n-1]=="=")-(base64[n-2]=="="))*3/4|0);for(var i2=0,j=0;i2>4;bytes[j++]=c1<<4|c2>>2;bytes[j++]=c2<<6|c3}return bytes}})();var stack_switching_exports={};__export(stack_switching_exports,{createPromising:()=>createPromising,jsWrapperTag:()=>jsWrapperTag,promisingApply:()=>promisingApply});var WASM_PRELUDE=[0,97,115,109,1,0,0,0];function insertSectionPrefix(sectionCode,sectionBody){var section=[sectionCode];uleb128Encode(sectionBody.length,section);section.push(...sectionBody);return section}var typeCodes={i32:127,i64:126,f32:125,f64:124,externref:111,void:64};var constCodes={i32:65,i64:66,f32:67,f64:68};function emscriptenSigToWasm(sig){const lookup={i:"i32",j:"i64",f:"f32",d:"f64",e:"externref",v:""};const parameters=sig.split("").map(x=>lookup[x]);const result=parameters.shift();const results=result?[result]:[];return{parameters:parameters,results:results}}var TypeSection=class{constructor(){this._numTypes=0;this._section=[0]}addEmscripten(sig){return this.addWasm(emscriptenSigToWasm(sig))}addWasm({parameters:parameters,results:results}){this._section.push(96);uleb128Encode(parameters.length,this._section);for(let p of parameters){this._section.push(typeCodes[p])}uleb128Encode(results.length,this._section);for(let p of results){this._section.push(typeCodes[p])}return this._numTypes++}generate(){this._section[0]=this._numTypes;return insertSectionPrefix(1,this._section)}};function encodeStr(s){const buf=(new TextEncoder).encode(s);return[buf.length,...buf]}var ImportSection=class{constructor(){this._numImports=0;this.numGlobals=0;this.numFuncs=0;this._section=[0]}_addName(name){this._section.push(...ImportSection._module);this._section.push(...encodeStr(name))}addFunction(name,sig){this._addName(name);this._section.push(ImportSection.descr.func,sig);this._numImports++;return this.numFuncs++}addTable(name){this._addName(name);this._section.push(ImportSection.descr.table,112,0,0);this._numImports++}addGlobal(name,type){this._addName(name);this._section.push(ImportSection.descr.global,typeCodes[type],1);this._numImports++;return this.numGlobals++}addTag(name,sig){this._addName(name);this._section.push(ImportSection.descr.tag,0,sig);this._numImports++}generate(){this._section[0]=this._numImports;return insertSectionPrefix(2,this._section)}};ImportSection._module=encodeStr("e");ImportSection.descr={func:0,table:1,mem:2,global:3,tag:4};var CodeSection=class{constructor(...locals){this._section=[];this.add(locals.length);for(let l of locals){this.add(1,typeCodes[l])}}add(...args){this._section.push(...args)}local_get(idx){this.add(32,idx)}local_set(idx){this.add(33,idx)}local_tee(idx){this.add(34,idx)}global_get(idx){this.add(35,idx)}global_set(idx){this.add(36,idx)}call(func){this.add(16,func)}call_indirect(func){this.add(17,func,0)}const(type,...val){this.add(constCodes[type],...val)}end(){this.add(11)}generate(){this.end();return insertSectionPrefix(10,insertSectionPrefix(1,this._section))}};var WasmModule=class{constructor(){this._sections=[WASM_PRELUDE]}addSection(section){this._sections.push(section.generate())}addSectionBody(sectionCode,sectionBody){this._sections.push(insertSectionPrefix(sectionCode,sectionBody))}addImportSection(imports){this.addSection(imports);this._numImportFuncs=imports.numFuncs}setExportType(type){const functionSection=[1,type];this.addSectionBody(3,functionSection);const exportSection=[1,...encodeStr("o"),0,this._numImportFuncs];this.addSectionBody(7,exportSection)}generate(){const bytes=new Uint8Array(this._sections.flat());return new WebAssembly.Module(bytes)}};function createInvokeModule(sig){const mod=new WasmModule;const types=new TypeSection;const invoke_sig=emscriptenSigToWasm(sig);const export_sig=structuredClone(invoke_sig);export_sig.parameters.unshift("i32");const invoke_tidx=types.addWasm(invoke_sig);const export_tidx=types.addWasm(export_sig);const try_tidx=typeCodes[invoke_sig.results[0]||"void"];const tag_tidx=types.addEmscripten("ve");const save_tidx=types.addEmscripten("i");const restore_tidx=types.addEmscripten("vi");const setThrew_tidx=types.addEmscripten("vii");mod.addSection(types);const imports=new ImportSection;imports.addTable("t");imports.addTag("tag",tag_tidx);const save_stack_func=imports.addFunction("s",save_tidx);const restore_stack_func=imports.addFunction("r",restore_tidx);const set_threw_func=imports.addFunction("q",setThrew_tidx);mod.addImportSection(imports);mod.setExportType(export_tidx);const code=new CodeSection(["i32"]);const stackLocal=export_sig.parameters.length;code.call(save_stack_func);code.local_set(stackLocal);code.add(6,try_tidx);for(let i=1;inew WebAssembly.Exception(jsWrapperTag,[e]);function createInvoke(sig){if(!jsWrapperTag){return createInvokeFunction(sig)}const module=createInvokeModule(sig);const instance=new WebAssembly.Instance(module,{e:{t:wasmTable,s:()=>stackSave(),r:x=>stackRestore(x),q:(x,y)=>_setThrew(x,y),tag:jsWrapperTag}});return instance.exports["o"]}function adjustWasmImports(wasmImports){const i="invoke_";for(let name of Object.keys(wasmImports.env)){if(!name.startsWith(i)){continue}wasmImports.env[name]=createInvoke(name.slice(i.length))}}var wrap_syncifying_exports={};__export(wrap_syncifying_exports,{default:()=>wrap_syncifying_default});var wrap_syncifying_default=__toBinary("AGFzbQEAAAABFARgAm9vAW9gAAFvYAFvAGABbwFvAioFAWUBcwNvAQFlAWMDfwEBZQFpAAABZQRzYXZlAAEBZQdyZXN0b3JlAAIDAgEDBwUBAW8AAwodARsBAW8jAUUEQNBvDwsQASEBIwAgABAAIAEQAgs=");var stackStates=[];var StackState=class{constructor(){this.start=stackSave();this.stop=Module.stackStop;this._copy=new Uint8Array(0);if(this.start!==this.stop){stackStates.push(this)}}restore(){let total=0;while(stackStates.length>0&&stackStates[stackStates.length-1].stop{try{return nullToUndefined(await x)}catch(e){if(e&&e.pyodide_fatal_error){throw e}Module.syncify_error=e;return null}},{suspending:"first"});const module=new WebAssembly.Module(new Uint8Array(wrap_syncifying_default));const instance=new WebAssembly.Instance(module,{e:{s:suspenderGlobal,i:suspending_f,c:validSuspender,save:save_state,restore:restore_state}});HEAP32[_syncifyHandler/4]=addFunction(instance.exports.o)}var promisingApplyHandler;function promisingApply(...args){validSuspender.value=true;Module.stackStop=stackSave();Module.origCframe=_get_cframe();return promisingApplyHandler(...args)}function wasmTypeToString(ty){return`params:${ty.parameters};results:${ty.results}`}function createPromisingModule(orig_type){const mod=new WasmModule;const ts=new TypeSection;const wrapped_type=structuredClone(orig_type);wrapped_type.parameters.unshift("externref");const orig_sig=ts.addWasm(orig_type);const wrapped_sig=ts.addWasm(wrapped_type);mod.addSection(ts);const imports=new ImportSection;imports.addGlobal("s","externref");const orig=imports.addFunction("i",orig_sig);mod.addImportSection(imports);mod.setExportType(wrapped_sig);const code=new CodeSection;code.local_get(0);code.global_set(0);for(let i=1;i!!Module.PyProxy_getAttrsQuiet(px).shared.ptr;API.pyproxyIsAlive=pyproxyIsAlive;const errNoRet=()=>{throw new Error("Assertion error: control reached end of function without return")};Module.reportUndefinedSymbols=()=>{};const nullToUndefined=x=>x===null?undefined:x;function isPromise(obj){try{return!!obj&&typeof obj.then==="function"}catch(e){return false}}API.isPromise=isPromise;function bufferAsUint8Array(arg){if(ArrayBuffer.isView(arg)){return new Uint8Array(arg.buffer,arg.byteOffset,arg.byteLength)}else{return new Uint8Array(arg)}}API.typedArrayAsUint8Array=bufferAsUint8Array;Module.iterObject=function*(object){for(let k in object){if(Object.prototype.hasOwnProperty.call(object,k)){yield k}}};function wasmFunctionType(wasm_func){if(!WebAssembly.Function){throw new Error("No type reflection")}if(WebAssembly.Function.type){return WebAssembly.Function.type(wasm_func)}return wasm_func.type()}pyodide_js_init();pyodide_js_init.sig="v";function _PyImport_InitFunc_TrampolineCall(func){return wasmTable.get(func)()}_PyImport_InitFunc_TrampolineCall.sig="ii";function _Py_emscripten_runtime(){var info;if(typeof navigator=="object"){info=navigator.userAgent}else if(typeof process=="object"){info="Node.js ".concat(process.version)}else{info="UNKNOWN"}var len=lengthBytesUTF8(info)+1;var res=_malloc(len);if(res)stringToUTF8(info,res,len);return res}_Py_emscripten_runtime.sig="i";function _Py_CheckEmscriptenSignals_Helper(){if(!Module.Py_EmscriptenSignalBuffer){return 0}try{let result=Module.Py_EmscriptenSignalBuffer[0];Module.Py_EmscriptenSignalBuffer[0]=0;return result}catch(e){return 0}}_Py_CheckEmscriptenSignals_Helper.sig="i";function _PyEM_detect_type_reflection(){return"Function"in WebAssembly}_PyEM_detect_type_reflection.sig="i";function _PyEM_TrampolineCall_JS(func,arg1,arg2,arg3){return wasmTable.get(func)(arg1,arg2,arg3)}_PyEM_TrampolineCall_JS.sig="iiiii";function _PyEM_CountFuncParams(func){let n=_PyEM_CountFuncParams.cache.get(func);if(n!==undefined){return n}n=wasmFunctionType(wasmTable.get(func)).parameters.length;_PyEM_CountFuncParams.cache.set(func,n);return n}_PyEM_CountFuncParams.cache=new Map;_PyEM_CountFuncParams.sig="ii";function unbox_small_structs(type_ptr){var type_id=HEAPU16[(type_ptr+6>>1)+0];while(type_id===13){var elements=HEAPU32[(type_ptr+8>>2)+0];var first_element=HEAPU32[(elements>>2)+0];if(first_element===0){type_id=0;break}else if(HEAPU32[(elements>>2)+1]===0){type_ptr=first_element;type_id=HEAPU16[(first_element+6>>1)+0]}else{break}}return[type_ptr,type_id]}function ffi_call_js(cif,fn,rvalue,avalue){var abi=HEAPU32[(cif>>2)+0];var nargs=HEAPU32[(cif>>2)+1];var nfixedargs=HEAPU32[(cif>>2)+6];var arg_types_ptr=HEAPU32[(cif>>2)+2];var rtype_unboxed=unbox_small_structs(HEAPU32[(cif>>2)+3]);var rtype_ptr=rtype_unboxed[0];var rtype_id=rtype_unboxed[1];var orig_stack_ptr=stackSave();var cur_stack_ptr=orig_stack_ptr;var args=[];var ret_by_arg=false;if(rtype_id===15){throw new Error("complex ret marshalling nyi")}if(rtype_id<0||rtype_id>15){throw new Error("Unexpected rtype "+rtype_id)}if(rtype_id===4||rtype_id===13){args.push(rvalue);ret_by_arg=true}for(var i=0;i>2)+i];var arg_unboxed=unbox_small_structs(HEAPU32[(arg_types_ptr>>2)+i]);var arg_type_ptr=arg_unboxed[0];var arg_type_id=arg_unboxed[1];switch(arg_type_id){case 1:case 10:case 9:case 14:args.push(HEAPU32[(arg_ptr>>2)+0]);break;case 2:args.push(HEAPF32[(arg_ptr>>2)+0]);break;case 3:args.push(HEAPF64[(arg_ptr>>3)+0]);break;case 5:args.push(HEAPU8[arg_ptr+0]);break;case 6:args.push(HEAP8[arg_ptr+0]);break;case 7:args.push(HEAPU16[(arg_ptr>>1)+0]);break;case 8:args.push(HEAP16[(arg_ptr>>1)+0]);break;case 11:case 12:args.push(HEAPU64[(arg_ptr>>3)+0]);break;case 4:args.push(HEAPU64[(arg_ptr>>3)+0]);args.push(HEAPU64[(arg_ptr>>3)+1]);break;case 13:var size=HEAPU32[(arg_type_ptr>>2)+0];var align=HEAPU16[(arg_type_ptr+4>>1)+0];cur_stack_ptr-=size,cur_stack_ptr&=~(align-1);HEAP8.subarray(cur_stack_ptr,cur_stack_ptr+size).set(HEAP8.subarray(arg_ptr,arg_ptr+size));args.push(cur_stack_ptr);break;case 15:throw new Error("complex marshalling nyi");default:throw new Error("Unexpected type "+arg_type_id)}}if(nfixedargs!=nargs){var struct_arg_info=[];for(var i=nargs-1;i>=nfixedargs;i--){var arg_ptr=HEAPU32[(avalue>>2)+i];var arg_unboxed=unbox_small_structs(HEAPU32[(arg_types_ptr>>2)+i]);var arg_type_ptr=arg_unboxed[0];var arg_type_id=arg_unboxed[1];switch(arg_type_id){case 5:case 6:cur_stack_ptr-=1,cur_stack_ptr&=~(1-1);HEAPU8[cur_stack_ptr+0]=HEAPU8[arg_ptr+0];break;case 7:case 8:cur_stack_ptr-=2,cur_stack_ptr&=~(2-1);HEAPU16[(cur_stack_ptr>>1)+0]=HEAPU16[(arg_ptr>>1)+0];break;case 1:case 9:case 10:case 14:case 2:cur_stack_ptr-=4,cur_stack_ptr&=~(4-1);HEAPU32[(cur_stack_ptr>>2)+0]=HEAPU32[(arg_ptr>>2)+0];break;case 3:case 11:case 12:cur_stack_ptr-=8,cur_stack_ptr&=~(8-1);HEAPU32[(cur_stack_ptr>>2)+0]=HEAPU32[(arg_ptr>>2)+0];HEAPU32[(cur_stack_ptr>>2)+1]=HEAPU32[(arg_ptr>>2)+1];break;case 4:cur_stack_ptr-=16,cur_stack_ptr&=~(8-1);HEAPU32[(cur_stack_ptr>>2)+0]=HEAPU32[(arg_ptr>>2)+0];HEAPU32[(cur_stack_ptr>>2)+1]=HEAPU32[(arg_ptr>>2)+1];HEAPU32[(cur_stack_ptr>>2)+2]=HEAPU32[(arg_ptr>>2)+2];HEAPU32[(cur_stack_ptr>>2)+3]=HEAPU32[(arg_ptr>>2)+3];break;case 13:cur_stack_ptr-=4,cur_stack_ptr&=~(4-1);struct_arg_info.push([cur_stack_ptr,arg_ptr,HEAPU32[(arg_type_ptr>>2)+0],HEAPU16[(arg_type_ptr+4>>1)+0]]);break;case 15:throw new Error("complex arg marshalling nyi");default:throw new Error("Unexpected argtype "+arg_type_id)}}args.push(cur_stack_ptr);for(var i=0;i>2)+0]=cur_stack_ptr}}stackRestore(cur_stack_ptr);stackAlloc(0);var result=(0,getWasmTableEntry(fn).apply(null,args));stackRestore(orig_stack_ptr);if(ret_by_arg){return}switch(rtype_id){case 0:break;case 1:case 9:case 10:case 14:HEAPU32[(rvalue>>2)+0]=result;break;case 2:HEAPF32[(rvalue>>2)+0]=result;break;case 3:HEAPF64[(rvalue>>3)+0]=result;break;case 5:case 6:HEAPU8[rvalue+0]=result;break;case 7:case 8:HEAPU16[(rvalue>>1)+0]=result;break;case 11:case 12:HEAPU64[(rvalue>>3)+0]=result;break;case 15:throw new Error("complex ret marshalling nyi");default:throw new Error("Unexpected rtype "+rtype_id)}}ffi_call_js.sig="viiii";function ffi_closure_alloc_js(size,code){var closure=_malloc(size);var index=getEmptyTableSlot();HEAPU32[(code>>2)+0]=index;HEAPU32[(closure>>2)+0]=index;return closure}ffi_closure_alloc_js.sig="iii";function ffi_closure_free_js(closure){var index=HEAPU32[(closure>>2)+0];freeTableIndexes.push(index);_free(closure)}ffi_closure_free_js.sig="vi";function ffi_prep_closure_loc_js(closure,cif,fun,user_data,codeloc){var abi=HEAPU32[(cif>>2)+0];var nargs=HEAPU32[(cif>>2)+1];var nfixedargs=HEAPU32[(cif>>2)+6];var arg_types_ptr=HEAPU32[(cif>>2)+2];var rtype_unboxed=unbox_small_structs(HEAPU32[(cif>>2)+3]);var rtype_ptr=rtype_unboxed[0];var rtype_id=rtype_unboxed[1];var sig;var ret_by_arg=false;switch(rtype_id){case 0:sig="v";break;case 13:case 4:sig="vi";ret_by_arg=true;break;case 1:case 5:case 6:case 7:case 8:case 9:case 10:case 14:sig="i";break;case 2:sig="f";break;case 3:sig="d";break;case 11:case 12:sig="j";break;case 15:throw new Error("complex ret marshalling nyi");default:throw new Error("Unexpected rtype "+rtype_id)}var unboxed_arg_type_id_list=[];var unboxed_arg_type_info_list=[];for(var i=0;i>2)+i]);var arg_type_ptr=arg_unboxed[0];var arg_type_id=arg_unboxed[1];unboxed_arg_type_id_list.push(arg_type_id);unboxed_arg_type_info_list.push([HEAPU32[(arg_type_ptr>>2)+0],HEAPU16[(arg_type_ptr+4>>1)+0]])}for(var i=0;i>2)+carg_idx]=cur_ptr;HEAPU8[cur_ptr+0]=cur_arg;break;case 7:case 8:cur_ptr-=2,cur_ptr&=~(4-1);HEAPU32[(args_ptr>>2)+carg_idx]=cur_ptr;HEAPU16[(cur_ptr>>1)+0]=cur_arg;break;case 1:case 9:case 10:case 14:cur_ptr-=4,cur_ptr&=~(4-1);HEAPU32[(args_ptr>>2)+carg_idx]=cur_ptr;HEAPU32[(cur_ptr>>2)+0]=cur_arg;break;case 13:cur_ptr-=arg_size,cur_ptr&=~(arg_align-1);HEAP8.subarray(cur_ptr,cur_ptr+arg_size).set(HEAP8.subarray(cur_arg,cur_arg+arg_size));HEAPU32[(args_ptr>>2)+carg_idx]=cur_ptr;break;case 2:cur_ptr-=4,cur_ptr&=~(4-1);HEAPU32[(args_ptr>>2)+carg_idx]=cur_ptr;HEAPF32[(cur_ptr>>2)+0]=cur_arg;break;case 3:cur_ptr-=8,cur_ptr&=~(8-1);HEAPU32[(args_ptr>>2)+carg_idx]=cur_ptr;HEAPF64[(cur_ptr>>3)+0]=cur_arg;break;case 11:case 12:cur_ptr-=8,cur_ptr&=~(8-1);HEAPU32[(args_ptr>>2)+carg_idx]=cur_ptr;HEAPU64[(cur_ptr>>3)+0]=cur_arg;break;case 4:cur_ptr-=16,cur_ptr&=~(8-1);HEAPU32[(args_ptr>>2)+carg_idx]=cur_ptr;HEAPU64[(cur_ptr>>3)+0]=cur_arg;cur_arg=args[jsarg_idx++];HEAPU64[(cur_ptr>>3)+1]=cur_arg;break}}var varargs=args[args.length-1];for(;carg_idx>2)+0];cur_ptr-=arg_size,cur_ptr&=~(arg_align-1);HEAP8.subarray(cur_ptr,cur_ptr+arg_size).set(HEAP8.subarray(struct_ptr,struct_ptr+arg_size));HEAPU32[(args_ptr>>2)+carg_idx]=cur_ptr}else{HEAPU32[(args_ptr>>2)+carg_idx]=varargs}varargs+=4}stackRestore(cur_ptr);stackAlloc(0);0;getWasmTableEntry(HEAPU32[(closure>>2)+2])(HEAPU32[(closure>>2)+1],ret_ptr,args_ptr,HEAPU32[(closure>>2)+3]);stackRestore(orig_stack_ptr);if(!ret_by_arg){switch(sig[0]){case"i":return HEAPU32[(ret_ptr>>2)+0];case"j":return HEAPU64[(ret_ptr>>3)+0];case"d":return HEAPF64[(ret_ptr>>3)+0];case"f":return HEAPF32[(ret_ptr>>2)+0]}}}try{var wasm_trampoline=convertJsFunctionToWasm(trampoline,sig)}catch(e){return 1}setWasmTableEntry(codeloc,wasm_trampoline);HEAPU32[(closure>>2)+1]=cif;HEAPU32[(closure>>2)+2]=fun;HEAPU32[(closure>>2)+3]=user_data;return 0}ffi_prep_closure_loc_js.sig="iiiiii";function __hiwire_deduplicate_new(){return new Map}__hiwire_deduplicate_new.sig="e";function __hiwire_deduplicate_get(map,value){return map.get(value)}__hiwire_deduplicate_get.sig="iee";function __hiwire_deduplicate_set(map,value,ref){map.set(value,ref)}__hiwire_deduplicate_set.sig="veei";function __hiwire_deduplicate_delete(map,value){map.delete(value)}__hiwire_deduplicate_delete.sig="vee";function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}Module["ExitStatus"]=ExitStatus;var GOT={};Module["GOT"]=GOT;var currentModuleWeakSymbols=new Set([]);Module["currentModuleWeakSymbols"]=currentModuleWeakSymbols;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}};Module["GOTHandler"]=GOTHandler;var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};Module["callRuntimeCallbacks"]=callRuntimeCallbacks;var decrementExceptionRefcount=ptr=>___cxa_decrement_exception_refcount(ptr);Module["decrementExceptionRefcount"]=decrementExceptionRefcount;var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;Module["UTF8Decoder"]=UTF8Decoder;var UTF8ArrayToString=(heapOrArray,idx,maxBytesToRead)=>{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};Module["UTF8ArrayToString"]=UTF8ArrayToString;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_emscripten_stack_get_current();Module["stackSave"]=stackSave;var stackRestore=val=>__emscripten_stack_restore(val);Module["stackRestore"]=stackRestore;var stackAlloc=sz=>__emscripten_stack_alloc(sz);Module["stackAlloc"]=stackAlloc;var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";Module["UTF8ToString"]=UTF8ToString;var getExceptionMessageCommon=ptr=>{var sp=stackSave();var type_addr_addr=stackAlloc(4);var message_addr_addr=stackAlloc(4);___get_exception_message(ptr,type_addr_addr,message_addr_addr);var type_addr=HEAPU32[type_addr_addr>>2];var message_addr=HEAPU32[message_addr_addr>>2];var type=UTF8ToString(type_addr);_free(type_addr);var message;if(message_addr){message=UTF8ToString(message_addr);_free(message_addr)}stackRestore(sp);return[type,message]};Module["getExceptionMessageCommon"]=getExceptionMessageCommon;var getExceptionMessage=ptr=>getExceptionMessageCommon(ptr);Module["getExceptionMessage"]=getExceptionMessage;function getValue(ptr,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":return HEAP8[ptr];case"i8":return HEAP8[ptr];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP64[ptr>>3];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];case"*":return HEAPU32[ptr>>2];default:abort(`invalid type for getValue: ${type}`)}}Module["getValue"]=getValue;var incrementExceptionRefcount=ptr=>___cxa_increment_exception_refcount(ptr);Module["incrementExceptionRefcount"]=incrementExceptionRefcount;var newDSO=(name,handle,syms)=>{var dso={refcount:Infinity,name:name,exports:syms,global:true};LDSO.loadedLibsByName[name]=dso;if(handle!=undefined){LDSO.loadedLibsByHandle[handle]=dso}return dso};Module["newDSO"]=newDSO;var LDSO={loadedLibsByName:{},loadedLibsByHandle:{},init(){newDSO("__main__",0,wasmImports)}};Module["LDSO"]=LDSO;var ___heap_base=9876848;Module["___heap_base"]=___heap_base;var zeroMemory=(address,size)=>{HEAPU8.fill(0,address,address+size);return address};Module["zeroMemory"]=zeroMemory;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;Module["alignMemory"]=alignMemory;var getMemory=size=>{if(runtimeInitialized){return zeroMemory(_malloc(size),size)}var ret=___heap_base;var end=ret+alignMemory(size,16);___heap_base=end;GOT["__heap_base"].value=end;return ret};Module["getMemory"]=getMemory;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__");Module["isInternalSym"]=isInternalSym;var uleb128Encode=(n,target)=>{if(n<128){target.push(n)}else{target.push(n%128|128,n>>7)}};Module["uleb128Encode"]=uleb128Encode;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};Module["convertJsFunctionToWasm"]=convertJsFunctionToWasm;var wasmTableMirror=[];Module["wasmTableMirror"]=wasmTableMirror;var wasmTable=new WebAssembly.Table({"initial":6640,"element":"anyfunc"});Module["wasmTable"]=wasmTable;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};Module["getWasmTableEntry"]=getWasmTableEntry;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};Module["getFunctionAddress"]=getFunctionAddress;var freeTableIndexes=[];Module["freeTableIndexes"]=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};Module["getEmptyTableSlot"]=getEmptyTableSlot;var setWasmTableEntry=(idx,func)=>{wasmTable.set(idx,func);wasmTableMirror[idx]=wasmTable.get(idx)};Module["setWasmTableEntry"]=setWasmTableEntry;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};Module["addFunction"]=addFunction;var updateGOT=(exports,replace)=>{for(var symName in exports){if(isInternalSym(symName)){continue}var value=exports[symName];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}`)}}}};Module["updateGOT"]=updateGOT;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};Module["relocateExports"]=relocateExports;var isSymbolDefined=symName=>{var existing=wasmImports[symName];if(!existing||existing.stub){return false}return true};Module["isSymbolDefined"]=isSymbolDefined;var dynCall=(sig,ptr,args=[])=>{var rtn=getWasmTableEntry(ptr)(...args);return rtn};Module["dynCall"]=dynCall;var createInvokeFunction=sig=>function(){var sp=stackSave();try{return dynCall(sig,arguments[0],Array.prototype.slice.call(arguments,1))}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0);if(sig[0]=="j")return 0n}};Module["createInvokeFunction"]=createInvokeFunction;var resolveGlobalSymbol=(symName,direct=false)=>{var sym;if(isSymbolDefined(symName)){sym=wasmImports[symName]}else if(symName.startsWith("invoke_")){sym=wasmImports[symName]=Module.createInvoke(symName.split("_")[1])}else if(symName.startsWith("__cxa_find_matching_catch_")){sym=wasmImports[symName]=function(){var args=Array.from(arguments);var rtn=findMatchingCatch(args);return rtn}}return{sym:sym,name:symName}};Module["resolveGlobalSymbol"]=resolveGlobalSymbol;var loadWebAssemblyModule=(binary,flags,libName,localScope,handle)=>{var metadata=getDylinkMetadata(binary);currentModuleWeakSymbols=metadata.weakImports;function loadModule(){var firstLoad=!handle||!HEAP8[handle+8];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]=1;HEAPU32[handle+12>>2]=memoryBase;HEAP32[handle+16>>2]=metadata.memorySize;HEAPU32[handle+20>>2]=tableBase;HEAP32[handle+24>>2]=metadata.tableSize}}else{memoryBase=HEAPU32[handle+12>>2];tableBase=HEAPU32[handle+20>>2]}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);if(!resolved){throw new Error(`Dynamic linking error: cannot resolve symbol ${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);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){const origGlobal=flags.global;flags.global=true;return metadata.neededDynlibs.reduce((chain,dynNeeded)=>chain.then(()=>loadDynamicLibrary(dynNeeded,flags)),Promise.resolve()).then(()=>{flags.global=origGlobal}).then(loadModule)}metadata.neededDynlibs.forEach(needed=>loadDynamicLibrary(needed,flags,localScope));return loadModule()};Module["loadWebAssemblyModule"]=loadWebAssemblyModule;var mergeLibSymbols=(exports,libName)=>{for(var[sym,exp]of Object.entries(exports)){const setImport=target=>{if(!isSymbolDefined(target)){wasmImports[target]=exp}};setImport(sym);const main_alias="__main_argc_argv";if(sym=="main"){setImport(main_alias)}if(sym==main_alias){setImport("main")}if(sym.startsWith("dynCall_")&&!Module.hasOwnProperty(sym)){Module[sym]=exp}}};Module["mergeLibSymbols"]=mergeLibSymbols;var asyncLoad=(url,onload,onerror,noRunDep)=>{var dep=!noRunDep?getUniqueRunDependency(`al ${url}`):"";readAsync(url,arrayBuffer=>{onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)};Module["asyncLoad"]=asyncLoad;var preloadPlugins=Module["preloadPlugins"]||[];Module["preloadPlugins"]=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)};Module["registerWasmPlugin"]=registerWasmPlugin;var preloadedWasm={};Module["preloadedWasm"]=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(){var libData;if(handle){var data=HEAPU32[handle+28>>2];var dataSize=HEAPU32[handle+32>>2];if(data&&dataSize){libData=HEAP8.slice(data,data+dataSize)}}if(!libData&&flags.fs&&flags.fs.findObject(libName)){libData=flags.fs.readFile(libName,{encoding:"binary"});if(!(libData instanceof Uint8Array)){libData=new Uint8Array(libData)}}if(libData){return flags.loadAsync?Promise.resolve(libData):libData}var libFile=locateFile(libName);if(flags.loadAsync){return new Promise(function(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}Module["loadDynamicLibrary"]=loadDynamicLibrary;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}`)}}}};Module["reportUndefinedSymbols"]=reportUndefinedSymbols;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")})};Module["loadDylibs"]=loadDylibs;var noExitRuntime=Module["noExitRuntime"]||true;Module["noExitRuntime"]=noExitRuntime;function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr]=value;break;case"i8":HEAP8[ptr]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":HEAP64[ptr>>3]=BigInt(value);break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort(`invalid type for setValue: ${type}`)}}Module["setValue"]=setValue;var ___assert_fail=(condition,filename,line,func)=>{abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])};Module["___assert_fail"]=___assert_fail;___assert_fail.sig="vppip";var ___call_sighandler=(fp,sig)=>getWasmTableEntry(fp)(sig);Module["___call_sighandler"]=___call_sighandler;___call_sighandler.sig="vpi";var exceptionCaught=[];Module["exceptionCaught"]=exceptionCaught;var uncaughtExceptionCount=0;Module["uncaughtExceptionCount"]=uncaughtExceptionCount;var ___cxa_begin_catch=ptr=>{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(info.excPtr);return info.get_exception_ptr()};Module["___cxa_begin_catch"]=___cxa_begin_catch;___cxa_begin_catch.sig="pp";var ___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";var exceptionLast=0;Module["exceptionLast"]=exceptionLast;var ___cxa_end_catch=()=>{_setThrew(0,0);var info=exceptionCaught.pop();___cxa_decrement_exception_refcount(info.excPtr);exceptionLast=0};Module["___cxa_end_catch"]=___cxa_end_catch;___cxa_end_catch.sig="v";class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=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]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}get_exception_ptr(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}Module["ExceptionInfo"]=ExceptionInfo;var ___resumeException=ptr=>{if(!exceptionLast){exceptionLast=ptr}throw Module.wrapException(exceptionLast)};Module["___resumeException"]=___resumeException;___resumeException.sig="vp";var setTempRet0=val=>__emscripten_tempret_set(val);Module["setTempRet0"]=setTempRet0;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 arg in args){var caughtType=args[arg];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};Module["findMatchingCatch"]=findMatchingCatch;var ___cxa_find_matching_catch_2=()=>findMatchingCatch([]);Module["___cxa_find_matching_catch_2"]=___cxa_find_matching_catch_2;___cxa_find_matching_catch_2.sig="p";var ___cxa_find_matching_catch_3=arg0=>findMatchingCatch([arg0]);Module["___cxa_find_matching_catch_3"]=___cxa_find_matching_catch_3;___cxa_find_matching_catch_3.sig="pp";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 Module.wrapException(exceptionLast)};Module["___cxa_rethrow"]=___cxa_rethrow;___cxa_rethrow.sig="v";var ___cxa_rethrow_primary_exception=ptr=>{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 ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw Module.wrapException(exceptionLast)};Module["___cxa_throw"]=___cxa_throw;___cxa_throw.sig="vppp";var ___cxa_uncaught_exceptions=()=>uncaughtExceptionCount;Module["___cxa_uncaught_exceptions"]=___cxa_uncaught_exceptions;___cxa_uncaught_exceptions.sig="i";var ___memory_base=new WebAssembly.Global({"value":"i32","mutable":false},1024);Module["___memory_base"]=___memory_base;var ___stack_high=9876848;Module["___stack_high"]=___stack_high;var ___stack_low=4633968;Module["___stack_low"]=___stack_low;var ___stack_pointer=new WebAssembly.Global({"value":"i32","mutable":true},9876848);Module["___stack_pointer"]=___stack_pointer;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)};Module["PATH"]=PATH;var initRandomFill=()=>{if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");var randomFillSync=crypto_module["randomFillSync"];if(randomFillSync){return view=>crypto_module["randomFillSync"](view)}var randomBytes=crypto_module["randomBytes"];return view=>(view.set(randomBytes(view.byteLength)),view)}catch(e){}}abort("initRandomDevice")};Module["initRandomFill"]=initRandomFill;var randomFill=view=>(randomFill=initRandomFill())(view);Module["randomFill"]=randomFill;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};Module["lengthBytesUTF8"]=lengthBytesUTF8;var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{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++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};Module["stringToUTF8Array"]=stringToUTF8Array;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}Module["intArrayFromString"]=intArrayFromString;var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};Module["FS_stdin_getChar"]=FS_stdin_getChar;var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops: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=[]}}}};Module["TTY"]=TTY;var mmapAlloc=size=>{size=alignMemory(size,65536);var ptr=_emscripten_builtin_memalign(65536,size);if(!ptr)return 0;return zeroMemory(ptr,size)};Module["mmapAlloc"]=mmapAlloc;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;old_node.parent=new_dir},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{FS.createDataFile(parent,name,fileData,canRead,canWrite,canOwn)};Module["FS_createDataFile"]=FS_createDataFile;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};Module["FS_handledByPreloadPlugin"]=FS_handledByPreloadPlugin;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)}};Module["FS_createPreloadedFile"]=FS_createPreloadedFile;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};Module["FS_modeStringToFlags"]=FS_modeStringToFlags;var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};Module["FS_getMode"]=FS_getMode;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",mount:(...args)=>MEMFS.mount(...args),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: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:db,entries: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)=>{try{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)}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(function(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(function(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)}})}};Module["IDBFS"]=IDBFS;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};Module["ERRNO_CODES"]=ERRNO_CODES;var NODEFS={isWindows:false,staticInit(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process.binding("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],256:flags["O_NOCTTY"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"],131072:flags["O_NOFOLLOW"]}},convertNodeCode(e){var code=e.code;return ERRNO_CODES[code]},mount(mount){return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(28)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}return stat.mode},realPath(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join(...parts)},flagsForNode(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;flags&=~65536;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(flags){throw new FS.ErrnoError(28)}return newFlags},node_ops:{getattr(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},lookup(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}return node},rename(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}oldNode.name=newName},unlink(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},rmdir(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},readdir(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},symlink(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},readlink(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=nodePath.relative(nodePath.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;if(e.code==="UNKNOWN")throw new FS.ErrnoError(28);throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}}},stream_ops:{open(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.shared.refcount=1;stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},close(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd&&--stream.shared.refcount===0){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},dup(stream){stream.shared.refcount++},read(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,new Int8Array(buffer.buffer,offset,length),{position:position})}catch(e){throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},write(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,new Int8Array(buffer.buffer,offset,length),{position:position})}catch(e){throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}}}if(position<0){throw new FS.ErrnoError(28)}return position},mmap(stream,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr=mmapAlloc(length);NODEFS.stream_ops.read(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}},msync(stream,buffer,offset,length,mmapFlags){NODEFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};Module["NODEFS"]=NODEFS;var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write(stream,buffer,offset,length,position){throw new FS.ErrnoError(29)},llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(28)}return position}}};Module["WORKERFS"]=WORKERFS;var PROXYFS={mount(mount){return PROXYFS.createNode(null,"/",mount.opts.fs.lstat(mount.opts.root).mode,0)},createNode(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=FS.createNode(parent,name,mode);node.node_ops=PROXYFS.node_ops;node.stream_ops=PROXYFS.stream_ops;return node},realPath(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join(...parts)},node_ops:{getattr(node){var path=PROXYFS.realPath(node);var stat;try{stat=node.mount.opts.fs.lstat(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr(node,attr){var path=PROXYFS.realPath(node);try{if(attr.mode!==undefined){node.mount.opts.fs.chmod(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);node.mount.opts.fs.utime(path,date,date)}if(attr.size!==undefined){node.mount.opts.fs.truncate(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},lookup(parent,name){try{var path=PATH.join2(PROXYFS.realPath(parent),name);var mode=parent.mount.opts.fs.lstat(path).mode;var node=PROXYFS.createNode(parent,name,mode);return node}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},mknod(parent,name,mode,dev){var node=PROXYFS.createNode(parent,name,mode,dev);var path=PROXYFS.realPath(node);try{if(FS.isDir(node.mode)){node.mount.opts.fs.mkdir(path,node.mode)}else{node.mount.opts.fs.writeFile(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return node},rename(oldNode,newDir,newName){var oldPath=PROXYFS.realPath(oldNode);var newPath=PATH.join2(PROXYFS.realPath(newDir),newName);try{oldNode.mount.opts.fs.rename(oldPath,newPath);oldNode.name=newName;oldNode.parent=newDir}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},unlink(parent,name){var path=PATH.join2(PROXYFS.realPath(parent),name);try{parent.mount.opts.fs.unlink(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},rmdir(parent,name){var path=PATH.join2(PROXYFS.realPath(parent),name);try{parent.mount.opts.fs.rmdir(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},readdir(node){var path=PROXYFS.realPath(node);try{return node.mount.opts.fs.readdir(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},symlink(parent,newName,oldPath){var newPath=PATH.join2(PROXYFS.realPath(parent),newName);try{parent.mount.opts.fs.symlink(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},readlink(node){var path=PROXYFS.realPath(node);try{return node.mount.opts.fs.readlink(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}},stream_ops:{open(stream){var path=PROXYFS.realPath(stream.node);try{stream.nfd=stream.node.mount.opts.fs.open(path,stream.flags)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},close(stream){try{stream.node.mount.opts.fs.close(stream.nfd)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},read(stream,buffer,offset,length,position){try{return stream.node.mount.opts.fs.read(stream.nfd,buffer,offset,length,position)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},write(stream,buffer,offset,length,position){try{return stream.node.mount.opts.fs.write(stream.nfd,buffer,offset,length,position)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=stream.node.node_ops.getattr(stream.node);position+=stat.size}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position}}};Module["PROXYFS"]=PROXYFS;var LZ4={DIR_MODE:16895,FILE_MODE:33279,CHUNK_SIZE:-1,codec:null,init(){if(LZ4.codec)return;LZ4.codec=function(){var MiniLZ4=function(){var exports={};exports.uncompress=function(input,output,sIdx,eIdx){sIdx=sIdx||0;eIdx=eIdx||input.length-sIdx;for(var i=sIdx,n=eIdx,j=0;i>4;if(literals_length>0){var l=literals_length+240;while(l===255){l=input[i++];literals_length+=l}var end=i+literals_length;while(ij)return-(i-2);var match_length=token&15;var l=match_length+240;while(l===255){l=input[i++];match_length+=l}var pos=j-offset;var end=j+match_length+4;while(jmaxInputSize?0:isize+isize/255+16|0};exports.compress=function(src,dst,sIdx,eIdx){hashTable.set(empty);return compressBlock(src,dst,0,sIdx||0,eIdx||dst.length)};function compressBlock(src,dst,pos,sIdx,eIdx){var dpos=sIdx;var dlen=eIdx-sIdx;var anchor=0;if(src.length>=maxInputSize)throw new Error("input too large");if(src.length>mfLimit){var n=exports.compressBound(src.length);if(dlen>>hashShift;var ref=hashTable[hash]-1;hashTable[hash]=pos+1;if(ref<0||pos-ref>>>16>0||((src[ref+3]<<8|src[ref+2])!=sequenceHighBits||(src[ref+1]<<8|src[ref])!=sequenceLowBits)){step=findMatchAttempts++>>skipStrength;pos+=step;continue}findMatchAttempts=(1<=runMask){dst[dpos++]=(runMask<254;len-=255){dst[dpos++]=255}dst[dpos++]=len}else{dst[dpos++]=(literals_length<>8;if(match_length>=mlMask){match_length-=mlMask;while(match_length>=255){match_length-=255;dst[dpos++]=255}dst[dpos++]=match_length}anchor=pos}}if(anchor==0)return 0;literals_length=src.length-anchor;if(literals_length>=runMask){dst[dpos++]=runMask<254;ln-=255){dst[dpos++]=255}dst[dpos++]=ln}else{dst[dpos++]=literals_length<0){assert(compressedSize<=bound);compressed=compressed.subarray(0,compressedSize);compressedChunks.push(compressed);total+=compressedSize;successes.push(1);if(verify){var back=exports.uncompress(compressed,temp);assert(back===chunk.length,[back,chunk.length]);for(var i=0;i{var dir=PATH.dirname(file.filename);var name=PATH.basename(file.filename);FS.createPath("",dir,true,true);var parent=FS.analyzePath(dir).object;LZ4.createNode(parent,name,LZ4.FILE_MODE,0,{compressedData:compressedData,start:file.start,end:file.end})});if(preloadPlugin){Browser.init();pack["metadata"].files.forEach(file=>{var handled=false;var fullname=file.filename;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin["canHandle"](fullname)){var dep=getUniqueRunDependency("fp "+fullname);addRunDependency(dep);var finish=()=>removeRunDependency(dep);var byteArray=FS.readFile(fullname);plugin["handle"](byteArray,fullname,finish,finish);handled=true}})})}},createNode(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=LZ4.node_ops;node.stream_ops=LZ4.stream_ops;node.timestamp=(mtime||new Date).getTime();assert(LZ4.FILE_MODE!==LZ4.DIR_MODE);if(mode===LZ4.FILE_MODE){node.size=contents.end-contents.start;node.contents=contents}else{node.size=4096;node.contents={}}if(parent){parent.contents[name]=node}return node},node_ops:{getattr(node){return{dev:1,ino:node.id,mode:node.mode,nlink:1,uid:0,gid:0,rdev:0,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)}},setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}},lookup(parent,name){throw new FS.ErrnoError(44)},mknod(parent,name,mode,dev){throw new FS.ErrnoError(63)},rename(oldNode,newDir,newName){throw new FS.ErrnoError(63)},unlink(parent,name){throw new FS.ErrnoError(63)},rmdir(parent,name){throw new FS.ErrnoError(63)},readdir(node){throw new FS.ErrnoError(63)},symlink(parent,newName,oldPath){throw new FS.ErrnoError(63)}},stream_ops:{read(stream,buffer,offset,length,position){length=Math.min(length,stream.node.size-position);if(length<=0)return 0;var contents=stream.node.contents;var compressedData=contents.compressedData;var written=0;while(written=0){currChunk=compressedData["cachedChunks"][found]}else{compressedData["cachedIndexes"].pop();compressedData["cachedIndexes"].unshift(chunkIndex);currChunk=compressedData["cachedChunks"].pop();compressedData["cachedChunks"].unshift(currChunk);if(compressedData["debug"]){out("decompressing chunk "+chunkIndex);Module["decompressedChunks"]=(Module["decompressedChunks"]||0)+1}var compressed=compressedData["data"].subarray(compressedStart,compressedStart+compressedSize);var originalSize=LZ4.codec.uncompress(compressed,currChunk);if(chunkIndex8){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:type,opts:opts,mountpoint: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(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}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":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS,"PROXYFS":PROXYFS}},init(input,output,error){FS.init.initialized=true;Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit(){FS.init.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: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:ptr,allocated:true}};node.stream_ops=stream_ops;return node}};Module["FS"]=FS;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]=stat.dev;HEAP32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAP32[buf+12>>2]=stat.uid;HEAP32[buf+16>>2]=stat.gid;HEAP32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);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}};Module["SYSCALLS"]=SYSCALLS;function ___syscall__newselect(nfds,readfds,writefds,exceptfds,timeout){try{var total=0;var srcReadLow=readfds?HEAP32[readfds>>2]:0,srcReadHigh=readfds?HEAP32[readfds+4>>2]:0;var srcWriteLow=writefds?HEAP32[writefds>>2]:0,srcWriteHigh=writefds?HEAP32[writefds+4>>2]:0;var srcExceptLow=exceptfds?HEAP32[exceptfds>>2]:0,srcExceptHigh=exceptfds?HEAP32[exceptfds+4>>2]:0;var dstReadLow=0,dstReadHigh=0;var dstWriteLow=0,dstWriteHigh=0;var dstExceptLow=0,dstExceptHigh=0;var allLow=(readfds?HEAP32[readfds>>2]:0)|(writefds?HEAP32[writefds>>2]:0)|(exceptfds?HEAP32[exceptfds>>2]:0);var allHigh=(readfds?HEAP32[readfds+4>>2]:0)|(writefds?HEAP32[writefds+4>>2]:0)|(exceptfds?HEAP32[exceptfds+4>>2]:0);var check=function(fd,low,high,val){return fd<32?low&val:high&val};for(var fd=0;fd>2]:0,tv_usec=readfds?HEAP32[timeout+4>>2]: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]=dstReadLow;HEAP32[readfds+4>>2]=dstReadHigh}if(writefds){HEAP32[writefds>>2]=dstWriteLow;HEAP32[writefds+4>>2]=dstWriteHigh}if(exceptfds){HEAP32[exceptfds>>2]=dstExceptLow;HEAP32[exceptfds+4>>2]=dstExceptHigh}return total}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}Module["___syscall__newselect"]=___syscall__newselect;___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:family,type:type,protocol: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: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;if(ENVIRONMENT_IS_NODE){WebSocketConstructor=require("ws")}else{WebSocketConstructor=WebSocket}ws=new WebSocketConstructor(url,opts);ws.binaryType="arraybuffer"}catch(e){throw new FS.ErrnoError(23)}}var peer={addr:addr,port: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: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]=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};Module["getSocketFromFD"]=getSocketFromFD;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]};Module["Sockets"]=Sockets;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};Module["inetPton4"]=inetPton4;var jstoi_q=str=>parseInt(str);Module["jstoi_q"]=jstoi_q;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]=16}HEAP16[sa>>1]=family;HEAP32[sa+4>>2]=addr;HEAP16[sa+2>>1]=_htons(port);break;case 10:addr=inetPton6(addr);zeroMemory(sa,28);if(addrlen){HEAP32[addrlen>>2]=28}HEAP32[sa>>2]=family;HEAP32[sa+8>>2]=addr[0];HEAP32[sa+12>>2]=addr[1];HEAP32[sa+16>>2]=addr[2];HEAP32[sa+20>>2]=addr[3];HEAP16[sa+2>>1]=_htons(port);break;default:return 5}return 0};Module["writeSockaddr"]=writeSockaddr;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}};Module["DNS"]=DNS;function ___syscall_accept4(fd,addr,addrlen,flags,d1,d2){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}}Module["___syscall_accept4"]=___syscall_accept4;___syscall_accept4.sig="iippiii";var inetNtop4=addr=>(addr&255)+"."+(addr>>8&255)+"."+(addr>>16&255)+"."+(addr>>24&255);Module["inetNtop4"]=inetNtop4;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];var port=_ntohs(HEAPU16[sa+2>>1]);var addr;switch(family){case 2:if(salen!==16){return{errno:28}}addr=HEAP32[sa+4>>2];addr=inetNtop4(addr);break;case 10:if(salen!==28){return{errno:28}}addr=[HEAP32[sa+8>>2],HEAP32[sa+12>>2],HEAP32[sa+16>>2],HEAP32[sa+20>>2]];addr=inetNtop6(addr);break;default:return{errno:5}}return{family:family,addr:addr,port:port}};Module["readSockaddr"]=readSockaddr;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};Module["getSocketAddress"]=getSocketAddress;function ___syscall_bind(fd,addr,addrlen,d1,d2,d3){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}}Module["___syscall_bind"]=___syscall_bind;___syscall_bind.sig="iippiii";function ___syscall_chdir(path){try{path=SYSCALLS.getStr(path);FS.chdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}Module["___syscall_chdir"]=___syscall_chdir;___syscall_chdir.sig="ip";function ___syscall_chmod(path,mode){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}}Module["___syscall_chmod"]=___syscall_chmod;___syscall_chmod.sig="ipi";function ___syscall_connect(fd,addr,addrlen,d1,d2,d3){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}}Module["___syscall_connect"]=___syscall_connect;___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}}Module["___syscall_dup"]=___syscall_dup;___syscall_dup.sig="ii";function ___syscall_dup3(fd,newfd,flags){try{var old=SYSCALLS.getStreamFromFD(fd);if(old.fd===newfd)return-28;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}}Module["___syscall_dup3"]=___syscall_dup3;___syscall_dup3.sig="iiii";function ___syscall_faccessat(dirfd,path,amode,flags){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}}Module["___syscall_faccessat"]=___syscall_faccessat;___syscall_faccessat.sig="iipii";var ___syscall_fadvise64=(fd,offset,len,advice)=>0;Module["___syscall_fadvise64"]=___syscall_fadvise64;___syscall_fadvise64.sig="iijji";var MAX_INT53=9007199254740992;Module["MAX_INT53"]=MAX_INT53;var MIN_INT53=-9007199254740992;Module["MIN_INT53"]=MIN_INT53;var bigintToI53Checked=num=>numMAX_INT53?NaN:Number(num);Module["bigintToI53Checked"]=bigintToI53Checked;function ___syscall_fallocate(fd,mode,offset,len){offset=bigintToI53Checked(offset);len=bigintToI53Checked(len);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}}Module["___syscall_fallocate"]=___syscall_fallocate;___syscall_fallocate.sig="iiijj";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}}Module["___syscall_fchdir"]=___syscall_fchdir;___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}}Module["___syscall_fchmod"]=___syscall_fchmod;___syscall_fchmod.sig="iii";function ___syscall_fchmodat2(dirfd,path,mode,flags){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}}Module["___syscall_fchmodat2"]=___syscall_fchmodat2;___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}}Module["___syscall_fchown32"]=___syscall_fchown32;___syscall_fchown32.sig="iiii";function ___syscall_fchownat(dirfd,path,owner,group,flags){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}}Module["___syscall_fchownat"]=___syscall_fchownat;___syscall_fchownat.sig="iipiii";function syscallGetVarargI(){var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret}Module["syscallGetVarargI"]=syscallGetVarargI;var syscallGetVarargP=syscallGetVarargI;Module["syscallGetVarargP"]=syscallGetVarargP;function ___syscall_fcntl64(fd,cmd,varargs){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]=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}}Module["___syscall_fcntl64"]=___syscall_fcntl64;___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}}Module["___syscall_fdatasync"]=___syscall_fdatasync;___syscall_fdatasync.sig="ii";function ___syscall_fstat64(fd,buf){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}}Module["___syscall_fstat64"]=___syscall_fstat64;___syscall_fstat64.sig="iip";function ___syscall_statfs64(path,size,buf){try{path=SYSCALLS.getStr(path);HEAP32[buf+4>>2]=4096;HEAP32[buf+40>>2]=4096;HEAP32[buf+8>>2]=1e6;HEAP32[buf+12>>2]=5e5;HEAP32[buf+16>>2]=5e5;HEAP32[buf+20>>2]=FS.nextInode;HEAP32[buf+24>>2]=1e6;HEAP32[buf+28>>2]=42;HEAP32[buf+44>>2]=2;HEAP32[buf+36>>2]=255;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}Module["___syscall_statfs64"]=___syscall_statfs64;___syscall_statfs64.sig="ippp";function ___syscall_fstatfs64(fd,size,buf){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}}Module["___syscall_fstatfs64"]=___syscall_fstatfs64;___syscall_fstatfs64.sig="iipp";function ___syscall_ftruncate64(fd,length){length=bigintToI53Checked(length);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}}Module["___syscall_ftruncate64"]=___syscall_ftruncate64;___syscall_ftruncate64.sig="iij";var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);Module["stringToUTF8"]=stringToUTF8;function ___syscall_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd)+1;if(size>3]=BigInt(id);HEAP64[dirp+pos+8>>3]=BigInt((idx+1)*struct_size);HEAP16[dirp+pos+16>>1]=280;HEAP8[dirp+pos+18]=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}}Module["___syscall_getdents64"]=___syscall_getdents64;___syscall_getdents64.sig="iipp";function ___syscall_getpeername(fd,addr,addrlen,d1,d2,d3){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}}Module["___syscall_getpeername"]=___syscall_getpeername;___syscall_getpeername.sig="iippiii";function ___syscall_getsockname(fd,addr,addrlen,d1,d2,d3){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}}Module["___syscall_getsockname"]=___syscall_getsockname;___syscall_getsockname.sig="iippiii";function ___syscall_getsockopt(fd,level,optname,optval,optlen,d1){try{var sock=getSocketFromFD(fd);if(level===1){if(optname===4){HEAP32[optval>>2]=sock.error;HEAP32[optlen>>2]=4;sock.error=null;return 0}}return-50}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}Module["___syscall_getsockopt"]=___syscall_getsockopt;___syscall_getsockopt.sig="iiiippi";function ___syscall_ioctl(fd,op,varargs){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]=termios.c_iflag||0;HEAP32[argp+4>>2]=termios.c_oflag||0;HEAP32[argp+8>>2]=termios.c_cflag||0;HEAP32[argp+12>>2]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[argp+i+17]=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];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag:c_iflag,c_oflag:c_oflag,c_cflag:c_cflag,c_lflag:c_lflag,c_cc:c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[argp>>2]=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]=winsize[0];HEAP16[argp+2>>1]=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}}Module["___syscall_ioctl"]=___syscall_ioctl;___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}}Module["___syscall_listen"]=___syscall_listen;___syscall_listen.sig="iiiiiii";function ___syscall_lstat64(path,buf){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}}Module["___syscall_lstat64"]=___syscall_lstat64;___syscall_lstat64.sig="ipp";function ___syscall_mkdirat(dirfd,path,mode){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}}Module["___syscall_mkdirat"]=___syscall_mkdirat;___syscall_mkdirat.sig="iipi";function ___syscall_mknodat(dirfd,path,mode,dev){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}}Module["___syscall_mknodat"]=___syscall_mknodat;___syscall_mknodat.sig="iipii";function ___syscall_newfstatat(dirfd,path,buf,flags){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}}Module["___syscall_newfstatat"]=___syscall_newfstatat;___syscall_newfstatat.sig="iippi";function ___syscall_openat(dirfd,path,flags,varargs){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}}Module["___syscall_openat"]=___syscall_openat;___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+++"]"}};Module["PIPEFS"]=PIPEFS;function ___syscall_pipe(fdPtr){try{if(fdPtr==0){throw new FS.ErrnoError(21)}var res=PIPEFS.createPipe();HEAP32[fdPtr>>2]=res.readable_fd;HEAP32[fdPtr+4>>2]=res.writable_fd;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}Module["___syscall_pipe"]=___syscall_pipe;___syscall_pipe.sig="ip";function ___syscall_poll(fds,nfds,timeout){try{var nonzero=0;for(var i=0;i>2];var events=HEAP16[pollfd+4>>1];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]=mask}return nonzero}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}Module["___syscall_poll"]=___syscall_poll;___syscall_poll.sig="ipii";function ___syscall_readlinkat(dirfd,path,buf,bufsize){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];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}Module["___syscall_readlinkat"]=___syscall_readlinkat;___syscall_readlinkat.sig="iippp";function ___syscall_recvfrom(fd,buf,len,flags,addr,addrlen){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);return msg.buffer.byteLength}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}Module["___syscall_recvfrom"]=___syscall_recvfrom;___syscall_recvfrom.sig="iippipp";function ___syscall_recvmsg(fd,message,flags,d1,d2,d3){try{var sock=getSocketFromFD(fd);var iov=HEAPU32[message+8>>2];var num=HEAP32[message+12>>2];var total=0;for(var i=0;i>2]}var msg=sock.sock_ops.recvmsg(sock,total);if(!msg)return 0;var name=HEAPU32[message>>2];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];var iovlen=HEAP32[iov+(8*i+4)>>2];if(!iovlen){continue}var length=Math.min(iovlen,bytesRemaining);var buf=msg.buffer.subarray(bytesRead,bytesRead+length);HEAPU8.set(buf,iovbase+bytesRead);bytesRead+=length;bytesRemaining-=length}return bytesRead}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}Module["___syscall_recvmsg"]=___syscall_recvmsg;___syscall_recvmsg.sig="iipiiii";function ___syscall_renameat(olddirfd,oldpath,newdirfd,newpath){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}}Module["___syscall_renameat"]=___syscall_renameat;___syscall_renameat.sig="iipip";function ___syscall_rmdir(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}Module["___syscall_rmdir"]=___syscall_rmdir;___syscall_rmdir.sig="ip";function ___syscall_sendmsg(fd,message,flags,d1,d2,d3){try{var sock=getSocketFromFD(fd);var iov=HEAPU32[message+8>>2];var num=HEAP32[message+12>>2];var addr,port;var name=HEAPU32[message>>2];var namelen=HEAP32[message+4>>2];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]}var view=new Uint8Array(total);var offset=0;for(var i=0;i>2];var iovlen=HEAP32[iov+(8*i+4)>>2];for(var j=0;jHEAPU32[ptr>>2]+HEAP32[ptr+4>>2]*4294967296;Module["readI53FromI64"]=readI53FromI64;function ___syscall_utimensat(dirfd,path,times,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path,true);if(!times){var atime=Date.now();var mtime=atime}else{var seconds=readI53FromI64(times);var nanoseconds=HEAP32[times+8>>2];atime=seconds*1e3+nanoseconds/(1e3*1e3);times+=16;seconds=readI53FromI64(times);nanoseconds=HEAP32[times+8>>2];mtime=seconds*1e3+nanoseconds/(1e3*1e3)}FS.utime(path,atime,mtime);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}Module["___syscall_utimensat"]=___syscall_utimensat;___syscall_utimensat.sig="iippi";var ___table_base=new WebAssembly.Global({"value":"i32","mutable":false},1);Module["___table_base"]=___table_base;var ENV={};Module["ENV"]=ENV;var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};Module["stringToUTF8OnStack"]=stringToUTF8OnStack;var dlSetError=msg=>{var sp=stackSave();var cmsg=stringToUTF8OnStack(msg);___dl_seterr(cmsg,0);stackRestore(sp)};Module["dlSetError"]=dlSetError;var dlopenInternal=(handle,jsflags)=>{var filename=UTF8ToString(handle+36);var flags=HEAP32[handle+4>>2];filename=PATH.normalize(filename);var searchpaths=[];var global=Boolean(flags&256);var localScope=global?null:{};var combinedFlags={global: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}};Module["dlopenInternal"]=dlopenInternal;var __dlopen_js=handle=>dlopenInternal(handle,{loadAsync:false});Module["__dlopen_js"]=__dlopen_js;__dlopen_js.sig="pp";var __dlsym_js=(handle,symbol,symbolIndex)=>{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);result=lib.exports[symbol];if(typeof result=="function"){var addr=getFunctionAddress(result);if(addr){result=addr}else{result=addFunction(result,result.sig);HEAPU32[symbolIndex>>2]=newSymIndex}}return result};Module["__dlsym_js"]=__dlsym_js;__dlsym_js.sig="pppp";var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};Module["handleException"]=handleException;var runtimeKeepaliveCounter=0;Module["runtimeKeepaliveCounter"]=runtimeKeepaliveCounter;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;Module["keepRuntimeAlive"]=keepRuntimeAlive;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};Module["_proc_exit"]=_proc_exit;_proc_exit.sig="vi";var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};Module["exitJS"]=exitJS;var _exit=exitJS;Module["_exit"]=_exit;_exit.sig="vi";var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};Module["maybeExit"]=maybeExit;var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};Module["callUserCallback"]=callUserCallback;var __emscripten_dlopen_js=(handle,onsuccess,onerror,user_data)=>{function errorCallback(e){var filename=UTF8ToString(handle+36);dlSetError(`'Could not load dynamic lib: ${filename}\n${e}`);callUserCallback(()=>getWasmTableEntry(onerror)(handle,user_data))}function successCallback(){callUserCallback(()=>getWasmTableEntry(onsuccess)(handle,user_data))}var promise=dlopenInternal(handle,{loadAsync:true});if(promise){promise.then(successCallback,errorCallback)}else{errorCallback()}};Module["__emscripten_dlopen_js"]=__emscripten_dlopen_js;__emscripten_dlopen_js.sig="vpppp";var nowIsMonotonic=1;Module["nowIsMonotonic"]=nowIsMonotonic;var __emscripten_get_now_is_monotonic=()=>nowIsMonotonic;Module["__emscripten_get_now_is_monotonic"]=__emscripten_get_now_is_monotonic;__emscripten_get_now_is_monotonic.sig="i";var __emscripten_get_progname=(str,len)=>{stringToUTF8(thisProgram,str,len)};Module["__emscripten_get_progname"]=__emscripten_get_progname;__emscripten_get_progname.sig="vpi";var __emscripten_lookup_name=name=>{var nameString=UTF8ToString(name);return inetPton4(DNS.lookup_name(nameString))};Module["__emscripten_lookup_name"]=__emscripten_lookup_name;__emscripten_lookup_name.sig="ip";var __emscripten_runtime_keepalive_clear=()=>{noExitRuntime=false;runtimeKeepaliveCounter=0};Module["__emscripten_runtime_keepalive_clear"]=__emscripten_runtime_keepalive_clear;__emscripten_runtime_keepalive_clear.sig="v";var __emscripten_system=command=>{if(ENVIRONMENT_IS_NODE){if(!command)return 1;var cmdstr=UTF8ToString(command);if(!cmdstr.length)return 0;var cp=require("child_process");var ret=cp.spawnSync(cmdstr,[],{shell:true,stdio:"inherit"});var _W_EXITCODE=(ret,sig)=>ret<<8|sig;if(ret.status===null){var signalToNumber=sig=>{switch(sig){case"SIGHUP":return 1;case"SIGINT":return 2;case"SIGQUIT":return 3;case"SIGFPE":return 8;case"SIGKILL":return 9;case"SIGALRM":return 14;case"SIGTERM":return 15}return 2};return _W_EXITCODE(0,signalToNumber(ret.signal))}return _W_EXITCODE(ret.status,0)}if(!command)return 0;return-52};Module["__emscripten_system"]=__emscripten_system;__emscripten_system.sig="ip";var __emscripten_throw_longjmp=()=>{throw Module.wrapException(Infinity)};Module["__emscripten_throw_longjmp"]=__emscripten_throw_longjmp;__emscripten_throw_longjmp.sig="v";function __gmtime_js(time,tmPtr){time=bigintToI53Checked(time);var date=new Date(time*1e3);HEAP32[tmPtr>>2]=date.getUTCSeconds();HEAP32[tmPtr+4>>2]=date.getUTCMinutes();HEAP32[tmPtr+8>>2]=date.getUTCHours();HEAP32[tmPtr+12>>2]=date.getUTCDate();HEAP32[tmPtr+16>>2]=date.getUTCMonth();HEAP32[tmPtr+20>>2]=date.getUTCFullYear()-1900;HEAP32[tmPtr+24>>2]=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]=yday}Module["__gmtime_js"]=__gmtime_js;__gmtime_js.sig="vjp";var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);Module["isLeapYear"]=isLeapYear;var MONTH_DAYS_LEAP_CUMULATIVE=[0,31,60,91,121,152,182,213,244,274,305,335];Module["MONTH_DAYS_LEAP_CUMULATIVE"]=MONTH_DAYS_LEAP_CUMULATIVE;var MONTH_DAYS_REGULAR_CUMULATIVE=[0,31,59,90,120,151,181,212,243,273,304,334];Module["MONTH_DAYS_REGULAR_CUMULATIVE"]=MONTH_DAYS_REGULAR_CUMULATIVE;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};Module["ydayFromDate"]=ydayFromDate;function __localtime_js(time,tmPtr){time=bigintToI53Checked(time);var date=new Date(time*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(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]=dst}Module["__localtime_js"]=__localtime_js;__localtime_js.sig="vjp";var __mktime_js=function(tmPtr){var ret=(()=>{var date=new Date(HEAP32[tmPtr+20>>2]+1900,HEAP32[tmPtr+16>>2],HEAP32[tmPtr+12>>2],HEAP32[tmPtr+8>>2],HEAP32[tmPtr+4>>2],HEAP32[tmPtr>>2],0);var dst=HEAP32[tmPtr+32>>2];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]=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]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getYear();var timeMs=date.getTime();if(isNaN(timeMs)){return-1}return timeMs/1e3})();return BigInt(ret)};Module["__mktime_js"]=__mktime_js;__mktime_js.sig="jp";function __mmap_js(len,prot,flags,fd,offset,allocated,addr){offset=bigintToI53Checked(offset);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]=res.allocated;HEAPU32[addr>>2]=ptr;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}Module["__mmap_js"]=__mmap_js;__mmap_js.sig="ipiiijpp";function __msync_js(addr,len,prot,flags,fd,offset){offset=bigintToI53Checked(offset);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}}Module["__msync_js"]=__msync_js;__msync_js.sig="ippiiij";function __munmap_js(addr,len,prot,flags,fd,offset){offset=bigintToI53Checked(offset);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}}Module["__munmap_js"]=__munmap_js;__munmap_js.sig="ippiiij";var timers={};Module["timers"]=timers;var _emscripten_get_now;_emscripten_get_now=()=>performance.now();Module["_emscripten_get_now"]=_emscripten_get_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:id,timeout_ms:timeout_ms};return 0};Module["__setitimer_js"]=__setitimer_js;__setitimer_js.sig="iid";var __timegm_js=function(tmPtr){var ret=(()=>{var time=Date.UTC(HEAP32[tmPtr+20>>2]+1900,HEAP32[tmPtr+16>>2],HEAP32[tmPtr+12>>2],HEAP32[tmPtr+8>>2],HEAP32[tmPtr+4>>2],HEAP32[tmPtr>>2],0);var date=new Date(time);HEAP32[tmPtr+24>>2]=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]=yday;return date.getTime()/1e3})();return BigInt(ret)};Module["__timegm_js"]=__timegm_js;__timegm_js.sig="jp";var __tzset_js=(timezone,daylight,std_name,dst_name)=>{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]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);var extractZone=date=>date.toLocaleTimeString(undefined,{hour12:false,timeZoneName:"short"}).split(" ")[1];var winterName=extractZone(winter);var summerName=extractZone(summer);if(summerOffset{abort("")};Module["_abort"]=_abort;_abort.sig="v";var readEmAsmArgsArray=[];Module["readEmAsmArgsArray"]=readEmAsmArgsArray;var readEmAsmArgs=(sigPtr,buf)=>{readEmAsmArgsArray.length=0;var ch;while(ch=HEAPU8[sigPtr++]){var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?HEAPU32[buf>>2]:ch==106?HEAP64[buf>>3]:ch==105?HEAP32[buf>>2]:HEAPF64[buf>>3]);buf+=wide?8:4}return readEmAsmArgsArray};Module["readEmAsmArgs"]=readEmAsmArgs;var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code](...args)};Module["runEmAsmFunction"]=runEmAsmFunction;var _emscripten_asm_const_int=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);Module["_emscripten_asm_const_int"]=_emscripten_asm_const_int;_emscripten_asm_const_int.sig="ippp";var _emscripten_console_error=str=>{console.error(UTF8ToString(str))};Module["_emscripten_console_error"]=_emscripten_console_error;_emscripten_console_error.sig="vp";var _emscripten_console_log=str=>{console.log(UTF8ToString(str))};Module["_emscripten_console_log"]=_emscripten_console_log;_emscripten_console_log.sig="vp";var _emscripten_console_warn=str=>{console.warn(UTF8ToString(str))};Module["_emscripten_console_warn"]=_emscripten_console_warn;_emscripten_console_warn.sig="vp";var _emscripten_date_now=()=>Date.now();Module["_emscripten_date_now"]=_emscripten_date_now;_emscripten_date_now.sig="d";var _emscripten_err=str=>err(UTF8ToString(str));Module["_emscripten_err"]=_emscripten_err;_emscripten_err.sig="vp";var _emscripten_exit_with_live_runtime=()=>{throw"unwind"};Module["_emscripten_exit_with_live_runtime"]=_emscripten_exit_with_live_runtime;_emscripten_exit_with_live_runtime.sig="v";var getHeapMax=()=>2147483648;Module["getHeapMax"]=getHeapMax;var _emscripten_get_heap_max=()=>getHeapMax();Module["_emscripten_get_heap_max"]=_emscripten_get_heap_max;_emscripten_get_heap_max.sig="p";var _emscripten_get_now_res=()=>{if(ENVIRONMENT_IS_NODE){return 1}return 1e3};Module["_emscripten_get_now_res"]=_emscripten_get_now_res;_emscripten_get_now_res.sig="d";var webgl_enable_ANGLE_instanced_arrays=ctx=>{var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=(index,divisor)=>ext["vertexAttribDivisorANGLE"](index,divisor);ctx["drawArraysInstanced"]=(mode,first,count,primcount)=>ext["drawArraysInstancedANGLE"](mode,first,count,primcount);ctx["drawElementsInstanced"]=(mode,count,type,indices,primcount)=>ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount);return 1}};Module["webgl_enable_ANGLE_instanced_arrays"]=webgl_enable_ANGLE_instanced_arrays;var webgl_enable_OES_vertex_array_object=ctx=>{var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=()=>ext["createVertexArrayOES"]();ctx["deleteVertexArray"]=vao=>ext["deleteVertexArrayOES"](vao);ctx["bindVertexArray"]=vao=>ext["bindVertexArrayOES"](vao);ctx["isVertexArray"]=vao=>ext["isVertexArrayOES"](vao);return 1}};Module["webgl_enable_OES_vertex_array_object"]=webgl_enable_OES_vertex_array_object;var webgl_enable_WEBGL_draw_buffers=ctx=>{var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=(n,bufs)=>ext["drawBuffersWEBGL"](n,bufs);return 1}};Module["webgl_enable_WEBGL_draw_buffers"]=webgl_enable_WEBGL_draw_buffers;var webgl_enable_WEBGL_multi_draw=ctx=>!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"));Module["webgl_enable_WEBGL_multi_draw"]=webgl_enable_WEBGL_multi_draw;var getEmscriptenSupportedExtensions=ctx=>{var supportedExtensions=["ANGLE_instanced_arrays","EXT_blend_minmax","EXT_disjoint_timer_query","EXT_frag_depth","EXT_shader_texture_lod","EXT_sRGB","OES_element_index_uint","OES_fbo_render_mipmap","OES_standard_derivatives","OES_texture_float","OES_texture_half_float","OES_texture_half_float_linear","OES_vertex_array_object","WEBGL_color_buffer_float","WEBGL_depth_texture","WEBGL_draw_buffers","EXT_color_buffer_half_float","EXT_depth_clamp","EXT_float_blend","EXT_texture_compression_bptc","EXT_texture_compression_rgtc","EXT_texture_filter_anisotropic","KHR_parallel_shader_compile","OES_texture_float_linear","WEBGL_blend_func_extended","WEBGL_compressed_texture_astc","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_etc1","WEBGL_compressed_texture_s3tc","WEBGL_compressed_texture_s3tc_srgb","WEBGL_debug_renderer_info","WEBGL_debug_shaders","WEBGL_lose_context","WEBGL_multi_draw"];return(ctx.getSupportedExtensions()||[]).filter(ext=>supportedExtensions.includes(ext))};Module["getEmscriptenSupportedExtensions"]=getEmscriptenSupportedExtensions;var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,recordError:errorCode=>{if(!GL.lastError){GL.lastError=errorCode}},getNewId:table=>{var ret=GL.counter++;for(var i=table.length;i{for(var i=0;i>2]=id}},getSource:(shader,count,string,length)=>{var source="";for(var i=0;i>2]:undefined;source+=UTF8ToString(HEAPU32[string+i*4>>2],len)}return source},createContext:(canvas,webGLContextAttributes)=>{var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:(ctx,webGLContextAttributes)=>{var handle=GL.getNewId(GL.contexts);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault=="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:contextHandle=>{GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext?.GLctx;return!(contextHandle&&!GLctx)},getContext:contextHandle=>GL.contexts[contextHandle],deleteContext:contextHandle=>{if(GL.currentContext===GL.contexts[contextHandle]){GL.currentContext=null}if(typeof JSEvents=="object"){JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas)}if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas){GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined}GL.contexts[contextHandle]=null},initExtensions:context=>{context||=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;webgl_enable_ANGLE_instanced_arrays(GLctx);webgl_enable_OES_vertex_array_object(GLctx);webgl_enable_WEBGL_draw_buffers(GLctx);{GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}webgl_enable_WEBGL_multi_draw(GLctx);getEmscriptenSupportedExtensions(GLctx).forEach(ext=>{if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};Module["GL"]=GL;var _glActiveTexture=x0=>GLctx.activeTexture(x0);Module["_glActiveTexture"]=_glActiveTexture;_glActiveTexture.sig="vi";var _emscripten_glActiveTexture=_glActiveTexture;Module["_emscripten_glActiveTexture"]=_emscripten_glActiveTexture;_emscripten_glActiveTexture.sig="vi";var _glAttachShader=(program,shader)=>{GLctx.attachShader(GL.programs[program],GL.shaders[shader])};Module["_glAttachShader"]=_glAttachShader;_glAttachShader.sig="vii";var _emscripten_glAttachShader=_glAttachShader;Module["_emscripten_glAttachShader"]=_emscripten_glAttachShader;_emscripten_glAttachShader.sig="vii";var _glBeginQueryEXT=(target,id)=>{GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.queries[id])};Module["_glBeginQueryEXT"]=_glBeginQueryEXT;_glBeginQueryEXT.sig="vii";var _emscripten_glBeginQueryEXT=_glBeginQueryEXT;Module["_emscripten_glBeginQueryEXT"]=_emscripten_glBeginQueryEXT;var _glBindAttribLocation=(program,index,name)=>{GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))};Module["_glBindAttribLocation"]=_glBindAttribLocation;_glBindAttribLocation.sig="viip";var _emscripten_glBindAttribLocation=_glBindAttribLocation;Module["_emscripten_glBindAttribLocation"]=_emscripten_glBindAttribLocation;_emscripten_glBindAttribLocation.sig="viip";var _glBindBuffer=(target,buffer)=>{GLctx.bindBuffer(target,GL.buffers[buffer])};Module["_glBindBuffer"]=_glBindBuffer;_glBindBuffer.sig="vii";var _emscripten_glBindBuffer=_glBindBuffer;Module["_emscripten_glBindBuffer"]=_emscripten_glBindBuffer;_emscripten_glBindBuffer.sig="vii";var _glBindFramebuffer=(target,framebuffer)=>{GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])};Module["_glBindFramebuffer"]=_glBindFramebuffer;_glBindFramebuffer.sig="vii";var _emscripten_glBindFramebuffer=_glBindFramebuffer;Module["_emscripten_glBindFramebuffer"]=_emscripten_glBindFramebuffer;_emscripten_glBindFramebuffer.sig="vii";var _glBindRenderbuffer=(target,renderbuffer)=>{GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])};Module["_glBindRenderbuffer"]=_glBindRenderbuffer;_glBindRenderbuffer.sig="vii";var _emscripten_glBindRenderbuffer=_glBindRenderbuffer;Module["_emscripten_glBindRenderbuffer"]=_emscripten_glBindRenderbuffer;_emscripten_glBindRenderbuffer.sig="vii";var _glBindTexture=(target,texture)=>{GLctx.bindTexture(target,GL.textures[texture])};Module["_glBindTexture"]=_glBindTexture;_glBindTexture.sig="vii";var _emscripten_glBindTexture=_glBindTexture;Module["_emscripten_glBindTexture"]=_emscripten_glBindTexture;_emscripten_glBindTexture.sig="vii";var _glBindVertexArray=vao=>{GLctx.bindVertexArray(GL.vaos[vao])};Module["_glBindVertexArray"]=_glBindVertexArray;_glBindVertexArray.sig="vi";var _glBindVertexArrayOES=_glBindVertexArray;Module["_glBindVertexArrayOES"]=_glBindVertexArrayOES;_glBindVertexArrayOES.sig="vi";var _emscripten_glBindVertexArrayOES=_glBindVertexArrayOES;Module["_emscripten_glBindVertexArrayOES"]=_emscripten_glBindVertexArrayOES;_emscripten_glBindVertexArrayOES.sig="vi";var _glBlendColor=(x0,x1,x2,x3)=>GLctx.blendColor(x0,x1,x2,x3);Module["_glBlendColor"]=_glBlendColor;_glBlendColor.sig="vffff";var _emscripten_glBlendColor=_glBlendColor;Module["_emscripten_glBlendColor"]=_emscripten_glBlendColor;_emscripten_glBlendColor.sig="vffff";var _glBlendEquation=x0=>GLctx.blendEquation(x0);Module["_glBlendEquation"]=_glBlendEquation;_glBlendEquation.sig="vi";var _emscripten_glBlendEquation=_glBlendEquation;Module["_emscripten_glBlendEquation"]=_emscripten_glBlendEquation;_emscripten_glBlendEquation.sig="vi";var _glBlendEquationSeparate=(x0,x1)=>GLctx.blendEquationSeparate(x0,x1);Module["_glBlendEquationSeparate"]=_glBlendEquationSeparate;_glBlendEquationSeparate.sig="vii";var _emscripten_glBlendEquationSeparate=_glBlendEquationSeparate;Module["_emscripten_glBlendEquationSeparate"]=_emscripten_glBlendEquationSeparate;_emscripten_glBlendEquationSeparate.sig="vii";var _glBlendFunc=(x0,x1)=>GLctx.blendFunc(x0,x1);Module["_glBlendFunc"]=_glBlendFunc;_glBlendFunc.sig="vii";var _emscripten_glBlendFunc=_glBlendFunc;Module["_emscripten_glBlendFunc"]=_emscripten_glBlendFunc;_emscripten_glBlendFunc.sig="vii";var _glBlendFuncSeparate=(x0,x1,x2,x3)=>GLctx.blendFuncSeparate(x0,x1,x2,x3);Module["_glBlendFuncSeparate"]=_glBlendFuncSeparate;_glBlendFuncSeparate.sig="viiii";var _emscripten_glBlendFuncSeparate=_glBlendFuncSeparate;Module["_emscripten_glBlendFuncSeparate"]=_emscripten_glBlendFuncSeparate;_emscripten_glBlendFuncSeparate.sig="viiii";var _glBufferData=(target,size,data,usage)=>{GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)};Module["_glBufferData"]=_glBufferData;_glBufferData.sig="vippi";var _emscripten_glBufferData=_glBufferData;Module["_emscripten_glBufferData"]=_emscripten_glBufferData;_emscripten_glBufferData.sig="vippi";var _glBufferSubData=(target,offset,size,data)=>{GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))};Module["_glBufferSubData"]=_glBufferSubData;_glBufferSubData.sig="vippp";var _emscripten_glBufferSubData=_glBufferSubData;Module["_emscripten_glBufferSubData"]=_emscripten_glBufferSubData;_emscripten_glBufferSubData.sig="vippp";var _glCheckFramebufferStatus=x0=>GLctx.checkFramebufferStatus(x0);Module["_glCheckFramebufferStatus"]=_glCheckFramebufferStatus;_glCheckFramebufferStatus.sig="ii";var _emscripten_glCheckFramebufferStatus=_glCheckFramebufferStatus;Module["_emscripten_glCheckFramebufferStatus"]=_emscripten_glCheckFramebufferStatus;_emscripten_glCheckFramebufferStatus.sig="ii";var _glClear=x0=>GLctx.clear(x0);Module["_glClear"]=_glClear;_glClear.sig="vi";var _emscripten_glClear=_glClear;Module["_emscripten_glClear"]=_emscripten_glClear;_emscripten_glClear.sig="vi";var _glClearColor=(x0,x1,x2,x3)=>GLctx.clearColor(x0,x1,x2,x3);Module["_glClearColor"]=_glClearColor;_glClearColor.sig="vffff";var _emscripten_glClearColor=_glClearColor;Module["_emscripten_glClearColor"]=_emscripten_glClearColor;_emscripten_glClearColor.sig="vffff";var _glClearDepthf=x0=>GLctx.clearDepth(x0);Module["_glClearDepthf"]=_glClearDepthf;_glClearDepthf.sig="vf";var _emscripten_glClearDepthf=_glClearDepthf;Module["_emscripten_glClearDepthf"]=_emscripten_glClearDepthf;_emscripten_glClearDepthf.sig="vf";var _glClearStencil=x0=>GLctx.clearStencil(x0);Module["_glClearStencil"]=_glClearStencil;_glClearStencil.sig="vi";var _emscripten_glClearStencil=_glClearStencil;Module["_emscripten_glClearStencil"]=_emscripten_glClearStencil;_emscripten_glClearStencil.sig="vi";var _glColorMask=(red,green,blue,alpha)=>{GLctx.colorMask(!!red,!!green,!!blue,!!alpha)};Module["_glColorMask"]=_glColorMask;_glColorMask.sig="viiii";var _emscripten_glColorMask=_glColorMask;Module["_emscripten_glColorMask"]=_emscripten_glColorMask;_emscripten_glColorMask.sig="viiii";var _glCompileShader=shader=>{GLctx.compileShader(GL.shaders[shader])};Module["_glCompileShader"]=_glCompileShader;_glCompileShader.sig="vi";var _emscripten_glCompileShader=_glCompileShader;Module["_emscripten_glCompileShader"]=_emscripten_glCompileShader;_emscripten_glCompileShader.sig="vi";var _glCompressedTexImage2D=(target,level,internalFormat,width,height,border,imageSize,data)=>{GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)};Module["_glCompressedTexImage2D"]=_glCompressedTexImage2D;_glCompressedTexImage2D.sig="viiiiiiip";var _emscripten_glCompressedTexImage2D=_glCompressedTexImage2D;Module["_emscripten_glCompressedTexImage2D"]=_emscripten_glCompressedTexImage2D;_emscripten_glCompressedTexImage2D.sig="viiiiiiip";var _glCompressedTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,imageSize,data)=>{GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)};Module["_glCompressedTexSubImage2D"]=_glCompressedTexSubImage2D;_glCompressedTexSubImage2D.sig="viiiiiiiip";var _emscripten_glCompressedTexSubImage2D=_glCompressedTexSubImage2D;Module["_emscripten_glCompressedTexSubImage2D"]=_emscripten_glCompressedTexSubImage2D;_emscripten_glCompressedTexSubImage2D.sig="viiiiiiiip";var _glCopyTexImage2D=(x0,x1,x2,x3,x4,x5,x6,x7)=>GLctx.copyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7);Module["_glCopyTexImage2D"]=_glCopyTexImage2D;_glCopyTexImage2D.sig="viiiiiiii";var _emscripten_glCopyTexImage2D=_glCopyTexImage2D;Module["_emscripten_glCopyTexImage2D"]=_emscripten_glCopyTexImage2D;_emscripten_glCopyTexImage2D.sig="viiiiiiii";var _glCopyTexSubImage2D=(x0,x1,x2,x3,x4,x5,x6,x7)=>GLctx.copyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7);Module["_glCopyTexSubImage2D"]=_glCopyTexSubImage2D;_glCopyTexSubImage2D.sig="viiiiiiii";var _emscripten_glCopyTexSubImage2D=_glCopyTexSubImage2D;Module["_emscripten_glCopyTexSubImage2D"]=_emscripten_glCopyTexSubImage2D;_emscripten_glCopyTexSubImage2D.sig="viiiiiiii";var _glCreateProgram=()=>{var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id};Module["_glCreateProgram"]=_glCreateProgram;_glCreateProgram.sig="i";var _emscripten_glCreateProgram=_glCreateProgram;Module["_emscripten_glCreateProgram"]=_emscripten_glCreateProgram;_emscripten_glCreateProgram.sig="i";var _glCreateShader=shaderType=>{var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id};Module["_glCreateShader"]=_glCreateShader;_glCreateShader.sig="ii";var _emscripten_glCreateShader=_glCreateShader;Module["_emscripten_glCreateShader"]=_emscripten_glCreateShader;_emscripten_glCreateShader.sig="ii";var _glCullFace=x0=>GLctx.cullFace(x0);Module["_glCullFace"]=_glCullFace;_glCullFace.sig="vi";var _emscripten_glCullFace=_glCullFace;Module["_emscripten_glCullFace"]=_emscripten_glCullFace;_emscripten_glCullFace.sig="vi";var _glDeleteBuffers=(n,buffers)=>{for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}};Module["_glDeleteBuffers"]=_glDeleteBuffers;_glDeleteBuffers.sig="vip";var _emscripten_glDeleteBuffers=_glDeleteBuffers;Module["_emscripten_glDeleteBuffers"]=_emscripten_glDeleteBuffers;_emscripten_glDeleteBuffers.sig="vip";var _glDeleteFramebuffers=(n,framebuffers)=>{for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}};Module["_glDeleteFramebuffers"]=_glDeleteFramebuffers;_glDeleteFramebuffers.sig="vip";var _emscripten_glDeleteFramebuffers=_glDeleteFramebuffers;Module["_emscripten_glDeleteFramebuffers"]=_emscripten_glDeleteFramebuffers;_emscripten_glDeleteFramebuffers.sig="vip";var _glDeleteProgram=id=>{if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null};Module["_glDeleteProgram"]=_glDeleteProgram;_glDeleteProgram.sig="vi";var _emscripten_glDeleteProgram=_glDeleteProgram;Module["_emscripten_glDeleteProgram"]=_emscripten_glDeleteProgram;_emscripten_glDeleteProgram.sig="vi";var _glDeleteQueriesEXT=(n,ids)=>{for(var i=0;i>2];var query=GL.queries[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.queries[id]=null}};Module["_glDeleteQueriesEXT"]=_glDeleteQueriesEXT;_glDeleteQueriesEXT.sig="vip";var _emscripten_glDeleteQueriesEXT=_glDeleteQueriesEXT;Module["_emscripten_glDeleteQueriesEXT"]=_emscripten_glDeleteQueriesEXT;var _glDeleteRenderbuffers=(n,renderbuffers)=>{for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}};Module["_glDeleteRenderbuffers"]=_glDeleteRenderbuffers;_glDeleteRenderbuffers.sig="vip";var _emscripten_glDeleteRenderbuffers=_glDeleteRenderbuffers;Module["_emscripten_glDeleteRenderbuffers"]=_emscripten_glDeleteRenderbuffers;_emscripten_glDeleteRenderbuffers.sig="vip";var _glDeleteShader=id=>{if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null};Module["_glDeleteShader"]=_glDeleteShader;_glDeleteShader.sig="vi";var _emscripten_glDeleteShader=_glDeleteShader;Module["_emscripten_glDeleteShader"]=_emscripten_glDeleteShader;_emscripten_glDeleteShader.sig="vi";var _glDeleteTextures=(n,textures)=>{for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}};Module["_glDeleteTextures"]=_glDeleteTextures;_glDeleteTextures.sig="vip";var _emscripten_glDeleteTextures=_glDeleteTextures;Module["_emscripten_glDeleteTextures"]=_emscripten_glDeleteTextures;_emscripten_glDeleteTextures.sig="vip";var _glDeleteVertexArrays=(n,vaos)=>{for(var i=0;i>2];GLctx.deleteVertexArray(GL.vaos[id]);GL.vaos[id]=null}};Module["_glDeleteVertexArrays"]=_glDeleteVertexArrays;_glDeleteVertexArrays.sig="vip";var _glDeleteVertexArraysOES=_glDeleteVertexArrays;Module["_glDeleteVertexArraysOES"]=_glDeleteVertexArraysOES;_glDeleteVertexArraysOES.sig="vip";var _emscripten_glDeleteVertexArraysOES=_glDeleteVertexArraysOES;Module["_emscripten_glDeleteVertexArraysOES"]=_emscripten_glDeleteVertexArraysOES;_emscripten_glDeleteVertexArraysOES.sig="vip";var _glDepthFunc=x0=>GLctx.depthFunc(x0);Module["_glDepthFunc"]=_glDepthFunc;_glDepthFunc.sig="vi";var _emscripten_glDepthFunc=_glDepthFunc;Module["_emscripten_glDepthFunc"]=_emscripten_glDepthFunc;_emscripten_glDepthFunc.sig="vi";var _glDepthMask=flag=>{GLctx.depthMask(!!flag)};Module["_glDepthMask"]=_glDepthMask;_glDepthMask.sig="vi";var _emscripten_glDepthMask=_glDepthMask;Module["_emscripten_glDepthMask"]=_emscripten_glDepthMask;_emscripten_glDepthMask.sig="vi";var _glDepthRangef=(x0,x1)=>GLctx.depthRange(x0,x1);Module["_glDepthRangef"]=_glDepthRangef;_glDepthRangef.sig="vff";var _emscripten_glDepthRangef=_glDepthRangef;Module["_emscripten_glDepthRangef"]=_emscripten_glDepthRangef;_emscripten_glDepthRangef.sig="vff";var _glDetachShader=(program,shader)=>{GLctx.detachShader(GL.programs[program],GL.shaders[shader])};Module["_glDetachShader"]=_glDetachShader;_glDetachShader.sig="vii";var _emscripten_glDetachShader=_glDetachShader;Module["_emscripten_glDetachShader"]=_emscripten_glDetachShader;_emscripten_glDetachShader.sig="vii";var _glDisable=x0=>GLctx.disable(x0);Module["_glDisable"]=_glDisable;_glDisable.sig="vi";var _emscripten_glDisable=_glDisable;Module["_emscripten_glDisable"]=_emscripten_glDisable;_emscripten_glDisable.sig="vi";var _glDisableVertexAttribArray=index=>{GLctx.disableVertexAttribArray(index)};Module["_glDisableVertexAttribArray"]=_glDisableVertexAttribArray;_glDisableVertexAttribArray.sig="vi";var _emscripten_glDisableVertexAttribArray=_glDisableVertexAttribArray;Module["_emscripten_glDisableVertexAttribArray"]=_emscripten_glDisableVertexAttribArray;_emscripten_glDisableVertexAttribArray.sig="vi";var _glDrawArrays=(mode,first,count)=>{GLctx.drawArrays(mode,first,count)};Module["_glDrawArrays"]=_glDrawArrays;_glDrawArrays.sig="viii";var _emscripten_glDrawArrays=_glDrawArrays;Module["_emscripten_glDrawArrays"]=_emscripten_glDrawArrays;_emscripten_glDrawArrays.sig="viii";var _glDrawArraysInstanced=(mode,first,count,primcount)=>{GLctx.drawArraysInstanced(mode,first,count,primcount)};Module["_glDrawArraysInstanced"]=_glDrawArraysInstanced;_glDrawArraysInstanced.sig="viiii";var _glDrawArraysInstancedANGLE=_glDrawArraysInstanced;Module["_glDrawArraysInstancedANGLE"]=_glDrawArraysInstancedANGLE;var _emscripten_glDrawArraysInstancedANGLE=_glDrawArraysInstancedANGLE;Module["_emscripten_glDrawArraysInstancedANGLE"]=_emscripten_glDrawArraysInstancedANGLE;var tempFixedLengthArray=[];Module["tempFixedLengthArray"]=tempFixedLengthArray;var _glDrawBuffers=(n,bufs)=>{var bufArray=tempFixedLengthArray[n];for(var i=0;i>2]}GLctx.drawBuffers(bufArray)};Module["_glDrawBuffers"]=_glDrawBuffers;_glDrawBuffers.sig="vip";var _glDrawBuffersWEBGL=_glDrawBuffers;Module["_glDrawBuffersWEBGL"]=_glDrawBuffersWEBGL;var _emscripten_glDrawBuffersWEBGL=_glDrawBuffersWEBGL;Module["_emscripten_glDrawBuffersWEBGL"]=_emscripten_glDrawBuffersWEBGL;var _glDrawElements=(mode,count,type,indices)=>{GLctx.drawElements(mode,count,type,indices)};Module["_glDrawElements"]=_glDrawElements;_glDrawElements.sig="viiip";var _emscripten_glDrawElements=_glDrawElements;Module["_emscripten_glDrawElements"]=_emscripten_glDrawElements;_emscripten_glDrawElements.sig="viiip";var _glDrawElementsInstanced=(mode,count,type,indices,primcount)=>{GLctx.drawElementsInstanced(mode,count,type,indices,primcount)};Module["_glDrawElementsInstanced"]=_glDrawElementsInstanced;_glDrawElementsInstanced.sig="viiipi";var _glDrawElementsInstancedANGLE=_glDrawElementsInstanced;Module["_glDrawElementsInstancedANGLE"]=_glDrawElementsInstancedANGLE;var _emscripten_glDrawElementsInstancedANGLE=_glDrawElementsInstancedANGLE;Module["_emscripten_glDrawElementsInstancedANGLE"]=_emscripten_glDrawElementsInstancedANGLE;var _glEnable=x0=>GLctx.enable(x0);Module["_glEnable"]=_glEnable;_glEnable.sig="vi";var _emscripten_glEnable=_glEnable;Module["_emscripten_glEnable"]=_emscripten_glEnable;_emscripten_glEnable.sig="vi";var _glEnableVertexAttribArray=index=>{GLctx.enableVertexAttribArray(index)};Module["_glEnableVertexAttribArray"]=_glEnableVertexAttribArray;_glEnableVertexAttribArray.sig="vi";var _emscripten_glEnableVertexAttribArray=_glEnableVertexAttribArray;Module["_emscripten_glEnableVertexAttribArray"]=_emscripten_glEnableVertexAttribArray;_emscripten_glEnableVertexAttribArray.sig="vi";var _glEndQueryEXT=target=>{GLctx.disjointTimerQueryExt["endQueryEXT"](target)};Module["_glEndQueryEXT"]=_glEndQueryEXT;_glEndQueryEXT.sig="vi";var _emscripten_glEndQueryEXT=_glEndQueryEXT;Module["_emscripten_glEndQueryEXT"]=_emscripten_glEndQueryEXT;var _glFinish=()=>GLctx.finish();Module["_glFinish"]=_glFinish;_glFinish.sig="v";var _emscripten_glFinish=_glFinish;Module["_emscripten_glFinish"]=_emscripten_glFinish;_emscripten_glFinish.sig="v";var _glFlush=()=>GLctx.flush();Module["_glFlush"]=_glFlush;_glFlush.sig="v";var _emscripten_glFlush=_glFlush;Module["_emscripten_glFlush"]=_emscripten_glFlush;_emscripten_glFlush.sig="v";var _glFramebufferRenderbuffer=(target,attachment,renderbuffertarget,renderbuffer)=>{GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])};Module["_glFramebufferRenderbuffer"]=_glFramebufferRenderbuffer;_glFramebufferRenderbuffer.sig="viiii";var _emscripten_glFramebufferRenderbuffer=_glFramebufferRenderbuffer;Module["_emscripten_glFramebufferRenderbuffer"]=_emscripten_glFramebufferRenderbuffer;_emscripten_glFramebufferRenderbuffer.sig="viiii";var _glFramebufferTexture2D=(target,attachment,textarget,texture,level)=>{GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)};Module["_glFramebufferTexture2D"]=_glFramebufferTexture2D;_glFramebufferTexture2D.sig="viiiii";var _emscripten_glFramebufferTexture2D=_glFramebufferTexture2D;Module["_emscripten_glFramebufferTexture2D"]=_emscripten_glFramebufferTexture2D;_emscripten_glFramebufferTexture2D.sig="viiiii";var _glFrontFace=x0=>GLctx.frontFace(x0);Module["_glFrontFace"]=_glFrontFace;_glFrontFace.sig="vi";var _emscripten_glFrontFace=_glFrontFace;Module["_emscripten_glFrontFace"]=_emscripten_glFrontFace;_emscripten_glFrontFace.sig="vi";var _glGenBuffers=(n,buffers)=>{GL.genObject(n,buffers,"createBuffer",GL.buffers)};Module["_glGenBuffers"]=_glGenBuffers;_glGenBuffers.sig="vip";var _emscripten_glGenBuffers=_glGenBuffers;Module["_emscripten_glGenBuffers"]=_emscripten_glGenBuffers;_emscripten_glGenBuffers.sig="vip";var _glGenFramebuffers=(n,ids)=>{GL.genObject(n,ids,"createFramebuffer",GL.framebuffers)};Module["_glGenFramebuffers"]=_glGenFramebuffers;_glGenFramebuffers.sig="vip";var _emscripten_glGenFramebuffers=_glGenFramebuffers;Module["_emscripten_glGenFramebuffers"]=_emscripten_glGenFramebuffers;_emscripten_glGenFramebuffers.sig="vip";var _glGenQueriesEXT=(n,ids)=>{for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.queries);query.name=id;GL.queries[id]=query;HEAP32[ids+i*4>>2]=id}};Module["_glGenQueriesEXT"]=_glGenQueriesEXT;_glGenQueriesEXT.sig="vip";var _emscripten_glGenQueriesEXT=_glGenQueriesEXT;Module["_emscripten_glGenQueriesEXT"]=_emscripten_glGenQueriesEXT;var _glGenRenderbuffers=(n,renderbuffers)=>{GL.genObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)};Module["_glGenRenderbuffers"]=_glGenRenderbuffers;_glGenRenderbuffers.sig="vip";var _emscripten_glGenRenderbuffers=_glGenRenderbuffers;Module["_emscripten_glGenRenderbuffers"]=_emscripten_glGenRenderbuffers;_emscripten_glGenRenderbuffers.sig="vip";var _glGenTextures=(n,textures)=>{GL.genObject(n,textures,"createTexture",GL.textures)};Module["_glGenTextures"]=_glGenTextures;_glGenTextures.sig="vip";var _emscripten_glGenTextures=_glGenTextures;Module["_emscripten_glGenTextures"]=_emscripten_glGenTextures;_emscripten_glGenTextures.sig="vip";var _glGenVertexArrays=(n,arrays)=>{GL.genObject(n,arrays,"createVertexArray",GL.vaos)};Module["_glGenVertexArrays"]=_glGenVertexArrays;_glGenVertexArrays.sig="vip";var _glGenVertexArraysOES=_glGenVertexArrays;Module["_glGenVertexArraysOES"]=_glGenVertexArraysOES;_glGenVertexArraysOES.sig="vip";var _emscripten_glGenVertexArraysOES=_glGenVertexArraysOES;Module["_emscripten_glGenVertexArraysOES"]=_emscripten_glGenVertexArraysOES;_emscripten_glGenVertexArraysOES.sig="vip";var _glGenerateMipmap=x0=>GLctx.generateMipmap(x0);Module["_glGenerateMipmap"]=_glGenerateMipmap;_glGenerateMipmap.sig="vi";var _emscripten_glGenerateMipmap=_glGenerateMipmap;Module["_emscripten_glGenerateMipmap"]=_emscripten_glGenerateMipmap;_emscripten_glGenerateMipmap.sig="vi";var __glGetActiveAttribOrUniform=(funcName,program,index,bufSize,length,size,type,name)=>{program=GL.programs[program];var info=GLctx[funcName](program,index);if(info){var numBytesWrittenExclNull=name&&stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull;if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}};Module["__glGetActiveAttribOrUniform"]=__glGetActiveAttribOrUniform;var _glGetActiveAttrib=(program,index,bufSize,length,size,type,name)=>{__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)};Module["_glGetActiveAttrib"]=_glGetActiveAttrib;_glGetActiveAttrib.sig="viiipppp";var _emscripten_glGetActiveAttrib=_glGetActiveAttrib;Module["_emscripten_glGetActiveAttrib"]=_emscripten_glGetActiveAttrib;_emscripten_glGetActiveAttrib.sig="viiipppp";var _glGetActiveUniform=(program,index,bufSize,length,size,type,name)=>{__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)};Module["_glGetActiveUniform"]=_glGetActiveUniform;_glGetActiveUniform.sig="viiipppp";var _emscripten_glGetActiveUniform=_glGetActiveUniform;Module["_emscripten_glGetActiveUniform"]=_emscripten_glGetActiveUniform;_emscripten_glGetActiveUniform.sig="viiipppp";var _glGetAttachedShaders=(program,maxCount,count,shaders)=>{var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}};Module["_glGetAttachedShaders"]=_glGetAttachedShaders;_glGetAttachedShaders.sig="viipp";var _emscripten_glGetAttachedShaders=_glGetAttachedShaders;Module["_emscripten_glGetAttachedShaders"]=_emscripten_glGetAttachedShaders;_emscripten_glGetAttachedShaders.sig="viipp";var _glGetAttribLocation=(program,name)=>GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name));Module["_glGetAttribLocation"]=_glGetAttribLocation;_glGetAttribLocation.sig="iip";var _emscripten_glGetAttribLocation=_glGetAttribLocation;Module["_emscripten_glGetAttribLocation"]=_emscripten_glGetAttribLocation;_emscripten_glGetAttribLocation.sig="iip";var writeI53ToI64=(ptr,num)=>{HEAPU32[ptr>>2]=num;var lower=HEAPU32[ptr>>2];HEAPU32[ptr+4>>2]=(num-lower)/4294967296};Module["writeI53ToI64"]=writeI53ToI64;var emscriptenWebGLGet=(name_,p,type)=>{if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=0&&type!=1){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case 2:HEAPF32[p+i*4>>2]=result[i];break;case 4:HEAP8[p+i]=result[i]?1:0;break}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err(`GL_INVALID_ENUM in glGet${type}v: Unknown object returned from WebGL getParameter(${name_})! (error: ${e})`);return}}break;default:GL.recordError(1280);err(`GL_INVALID_ENUM in glGet${type}v: Native code calling glGet${type}v(${name_}) and it returns ${result} of type ${typeof result}!`);return}}switch(type){case 1:writeI53ToI64(p,ret);break;case 0:HEAP32[p>>2]=ret;break;case 2:HEAPF32[p>>2]=ret;break;case 4:HEAP8[p]=ret?1:0;break}};Module["emscriptenWebGLGet"]=emscriptenWebGLGet;var _glGetBooleanv=(name_,p)=>emscriptenWebGLGet(name_,p,4);Module["_glGetBooleanv"]=_glGetBooleanv;_glGetBooleanv.sig="vip";var _emscripten_glGetBooleanv=_glGetBooleanv;Module["_emscripten_glGetBooleanv"]=_emscripten_glGetBooleanv;_emscripten_glGetBooleanv.sig="vip";var _glGetBufferParameteriv=(target,value,data)=>{if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)};Module["_glGetBufferParameteriv"]=_glGetBufferParameteriv;_glGetBufferParameteriv.sig="viip";var _emscripten_glGetBufferParameteriv=_glGetBufferParameteriv;Module["_emscripten_glGetBufferParameteriv"]=_emscripten_glGetBufferParameteriv;_emscripten_glGetBufferParameteriv.sig="viip";var _glGetError=()=>{var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error};Module["_glGetError"]=_glGetError;_glGetError.sig="i";var _emscripten_glGetError=_glGetError;Module["_emscripten_glGetError"]=_emscripten_glGetError;_emscripten_glGetError.sig="i";var _glGetFloatv=(name_,p)=>emscriptenWebGLGet(name_,p,2);Module["_glGetFloatv"]=_glGetFloatv;_glGetFloatv.sig="vip";var _emscripten_glGetFloatv=_glGetFloatv;Module["_emscripten_glGetFloatv"]=_emscripten_glGetFloatv;_emscripten_glGetFloatv.sig="vip";var _glGetFramebufferAttachmentParameteriv=(target,attachment,pname,params)=>{var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result};Module["_glGetFramebufferAttachmentParameteriv"]=_glGetFramebufferAttachmentParameteriv;_glGetFramebufferAttachmentParameteriv.sig="viiip";var _emscripten_glGetFramebufferAttachmentParameteriv=_glGetFramebufferAttachmentParameteriv;Module["_emscripten_glGetFramebufferAttachmentParameteriv"]=_emscripten_glGetFramebufferAttachmentParameteriv;_emscripten_glGetFramebufferAttachmentParameteriv.sig="viiip";var _glGetIntegerv=(name_,p)=>emscriptenWebGLGet(name_,p,0);Module["_glGetIntegerv"]=_glGetIntegerv;_glGetIntegerv.sig="vip";var _emscripten_glGetIntegerv=_glGetIntegerv;Module["_emscripten_glGetIntegerv"]=_emscripten_glGetIntegerv;_emscripten_glGetIntegerv.sig="vip";var _glGetProgramInfoLog=(program,maxLength,length,infoLog)=>{var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};Module["_glGetProgramInfoLog"]=_glGetProgramInfoLog;_glGetProgramInfoLog.sig="viipp";var _emscripten_glGetProgramInfoLog=_glGetProgramInfoLog;Module["_emscripten_glGetProgramInfoLog"]=_emscripten_glGetProgramInfoLog;_emscripten_glGetProgramInfoLog.sig="viipp";var _glGetProgramiv=(program,pname,p)=>{if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}program=GL.programs[program];if(pname==35716){var log=GLctx.getProgramInfoLog(program);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){if(!program.maxUniformLength){for(var i=0;i>2]=program.maxUniformLength}else if(pname==35722){if(!program.maxAttributeLength){for(var i=0;i>2]=program.maxAttributeLength}else if(pname==35381){if(!program.maxUniformBlockNameLength){for(var i=0;i>2]=program.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(program,pname)}};Module["_glGetProgramiv"]=_glGetProgramiv;_glGetProgramiv.sig="viip";var _emscripten_glGetProgramiv=_glGetProgramiv;Module["_emscripten_glGetProgramiv"]=_emscripten_glGetProgramiv;_emscripten_glGetProgramiv.sig="viip";var _glGetQueryObjecti64vEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param;{param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname)}var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)};Module["_glGetQueryObjecti64vEXT"]=_glGetQueryObjecti64vEXT;_glGetQueryObjecti64vEXT.sig="viip";var _emscripten_glGetQueryObjecti64vEXT=_glGetQueryObjecti64vEXT;Module["_emscripten_glGetQueryObjecti64vEXT"]=_emscripten_glGetQueryObjecti64vEXT;var _glGetQueryObjectivEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret};Module["_glGetQueryObjectivEXT"]=_glGetQueryObjectivEXT;_glGetQueryObjectivEXT.sig="viip";var _emscripten_glGetQueryObjectivEXT=_glGetQueryObjectivEXT;Module["_emscripten_glGetQueryObjectivEXT"]=_emscripten_glGetQueryObjectivEXT;var _glGetQueryObjectui64vEXT=_glGetQueryObjecti64vEXT;Module["_glGetQueryObjectui64vEXT"]=_glGetQueryObjectui64vEXT;var _emscripten_glGetQueryObjectui64vEXT=_glGetQueryObjectui64vEXT;Module["_emscripten_glGetQueryObjectui64vEXT"]=_emscripten_glGetQueryObjectui64vEXT;var _glGetQueryObjectuivEXT=_glGetQueryObjectivEXT;Module["_glGetQueryObjectuivEXT"]=_glGetQueryObjectuivEXT;var _emscripten_glGetQueryObjectuivEXT=_glGetQueryObjectuivEXT;Module["_emscripten_glGetQueryObjectuivEXT"]=_emscripten_glGetQueryObjectuivEXT;var _glGetQueryivEXT=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)};Module["_glGetQueryivEXT"]=_glGetQueryivEXT;_glGetQueryivEXT.sig="viip";var _emscripten_glGetQueryivEXT=_glGetQueryivEXT;Module["_emscripten_glGetQueryivEXT"]=_emscripten_glGetQueryivEXT;var _glGetRenderbufferParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)};Module["_glGetRenderbufferParameteriv"]=_glGetRenderbufferParameteriv;_glGetRenderbufferParameteriv.sig="viip";var _emscripten_glGetRenderbufferParameteriv=_glGetRenderbufferParameteriv;Module["_emscripten_glGetRenderbufferParameteriv"]=_emscripten_glGetRenderbufferParameteriv;_emscripten_glGetRenderbufferParameteriv.sig="viip";var _glGetShaderInfoLog=(shader,maxLength,length,infoLog)=>{var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};Module["_glGetShaderInfoLog"]=_glGetShaderInfoLog;_glGetShaderInfoLog.sig="viipp";var _emscripten_glGetShaderInfoLog=_glGetShaderInfoLog;Module["_emscripten_glGetShaderInfoLog"]=_emscripten_glGetShaderInfoLog;_emscripten_glGetShaderInfoLog.sig="viipp";var _glGetShaderPrecisionFormat=(shaderType,precisionType,range,precision)=>{var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision};Module["_glGetShaderPrecisionFormat"]=_glGetShaderPrecisionFormat;_glGetShaderPrecisionFormat.sig="viipp";var _emscripten_glGetShaderPrecisionFormat=_glGetShaderPrecisionFormat;Module["_emscripten_glGetShaderPrecisionFormat"]=_emscripten_glGetShaderPrecisionFormat;_emscripten_glGetShaderPrecisionFormat.sig="viipp";var _glGetShaderSource=(shader,bufSize,length,source)=>{var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};Module["_glGetShaderSource"]=_glGetShaderSource;_glGetShaderSource.sig="viipp";var _emscripten_glGetShaderSource=_glGetShaderSource;Module["_emscripten_glGetShaderSource"]=_emscripten_glGetShaderSource;_emscripten_glGetShaderSource.sig="viipp";var _glGetShaderiv=(shader,pname,p)=>{if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var logLength=log?log.length+1:0;HEAP32[p>>2]=logLength}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source?source.length+1:0;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}};Module["_glGetShaderiv"]=_glGetShaderiv;_glGetShaderiv.sig="viip";var _emscripten_glGetShaderiv=_glGetShaderiv;Module["_emscripten_glGetShaderiv"]=_emscripten_glGetShaderiv;_emscripten_glGetShaderiv.sig="viip";var stringToNewUTF8=str=>{var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret};Module["stringToNewUTF8"]=stringToNewUTF8;var webglGetExtensions=function $webglGetExtensions(){var exts=getEmscriptenSupportedExtensions(GLctx);exts=exts.concat(exts.map(e=>"GL_"+e));return exts};Module["webglGetExtensions"]=webglGetExtensions;var _glGetString=name_=>{var ret=GL.stringCache[name_];if(!ret){switch(name_){case 7939:ret=stringToNewUTF8(webglGetExtensions().join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=s?stringToNewUTF8(s):0;break;case 7938:var glVersion=GLctx.getParameter(7938);{glVersion=`OpenGL ES 2.0 (${glVersion})`}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(35724);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion=`OpenGL ES GLSL ES ${ver_num[1]} (${glslVersion})`}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280)}GL.stringCache[name_]=ret}return ret};Module["_glGetString"]=_glGetString;_glGetString.sig="pi";var _emscripten_glGetString=_glGetString;Module["_emscripten_glGetString"]=_emscripten_glGetString;_emscripten_glGetString.sig="pi";var _glGetTexParameterfv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)};Module["_glGetTexParameterfv"]=_glGetTexParameterfv;_glGetTexParameterfv.sig="viip";var _emscripten_glGetTexParameterfv=_glGetTexParameterfv;Module["_emscripten_glGetTexParameterfv"]=_emscripten_glGetTexParameterfv;_emscripten_glGetTexParameterfv.sig="viip";var _glGetTexParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)};Module["_glGetTexParameteriv"]=_glGetTexParameteriv;_glGetTexParameteriv.sig="viip";var _emscripten_glGetTexParameteriv=_glGetTexParameteriv;Module["_emscripten_glGetTexParameteriv"]=_emscripten_glGetTexParameteriv;_emscripten_glGetTexParameteriv.sig="viip";var webglGetLeftBracePos=name=>name.slice(-1)=="]"&&name.lastIndexOf("[");Module["webglGetLeftBracePos"]=webglGetLeftBracePos;var webglPrepareUniformLocationsBeforeFirstUse=program=>{var uniformLocsById=program.uniformLocsById,uniformSizeAndIdsByName=program.uniformSizeAndIdsByName,i,j;if(!uniformLocsById){program.uniformLocsById=uniformLocsById={};program.uniformArrayNamesById={};for(i=0;i0?nm.slice(0,lb):nm;var id=program.uniformIdCounter;program.uniformIdCounter+=sz;uniformSizeAndIdsByName[arrayName]=[sz,id];for(j=0;j{name=UTF8ToString(name);if(program=GL.programs[program]){webglPrepareUniformLocationsBeforeFirstUse(program);var uniformLocsById=program.uniformLocsById;var arrayIndex=0;var uniformBaseName=name;var leftBrace=webglGetLeftBracePos(name);if(leftBrace>0){arrayIndex=jstoi_q(name.slice(leftBrace+1))>>>0;uniformBaseName=name.slice(0,leftBrace)}var sizeAndId=program.uniformSizeAndIdsByName[uniformBaseName];if(sizeAndId&&arrayIndex{var p=GLctx.currentProgram;if(p){var webglLoc=p.uniformLocsById[location];if(typeof webglLoc=="number"){p.uniformLocsById[location]=webglLoc=GLctx.getUniformLocation(p,p.uniformArrayNamesById[location]+(webglLoc>0?`[${webglLoc}]`:""))}return webglLoc}else{GL.recordError(1282)}};Module["webglGetUniformLocation"]=webglGetUniformLocation;var emscriptenWebGLGetUniform=(program,location,params,type)=>{if(!params){GL.recordError(1281);return}program=GL.programs[program];webglPrepareUniformLocationsBeforeFirstUse(program);var data=GLctx.getUniform(program,webglGetUniformLocation(location));if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}};Module["emscriptenWebGLGetUniform"]=emscriptenWebGLGetUniform;var _glGetUniformfv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,2)};Module["_glGetUniformfv"]=_glGetUniformfv;_glGetUniformfv.sig="viip";var _emscripten_glGetUniformfv=_glGetUniformfv;Module["_emscripten_glGetUniformfv"]=_emscripten_glGetUniformfv;_emscripten_glGetUniformfv.sig="viip";var _glGetUniformiv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,0)};Module["_glGetUniformiv"]=_glGetUniformiv;_glGetUniformiv.sig="viip";var _emscripten_glGetUniformiv=_glGetUniformiv;Module["_emscripten_glGetUniformiv"]=_emscripten_glGetUniformiv;_emscripten_glGetUniformiv.sig="viip";var _glGetVertexAttribPointerv=(index,pname,pointer)=>{if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)};Module["_glGetVertexAttribPointerv"]=_glGetVertexAttribPointerv;_glGetVertexAttribPointerv.sig="viip";var _emscripten_glGetVertexAttribPointerv=_glGetVertexAttribPointerv;Module["_emscripten_glGetVertexAttribPointerv"]=_emscripten_glGetVertexAttribPointerv;_emscripten_glGetVertexAttribPointerv.sig="viip";var emscriptenWebGLGetVertexAttrib=(index,pname,params,type)=>{if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data&&data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break;case 5:HEAP32[params>>2]=Math.fround(data);break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break;case 5:HEAP32[params+i*4>>2]=Math.fround(data[i]);break}}}};Module["emscriptenWebGLGetVertexAttrib"]=emscriptenWebGLGetVertexAttrib;var _glGetVertexAttribfv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,2)};Module["_glGetVertexAttribfv"]=_glGetVertexAttribfv;_glGetVertexAttribfv.sig="viip";var _emscripten_glGetVertexAttribfv=_glGetVertexAttribfv;Module["_emscripten_glGetVertexAttribfv"]=_emscripten_glGetVertexAttribfv;_emscripten_glGetVertexAttribfv.sig="viip";var _glGetVertexAttribiv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,5)};Module["_glGetVertexAttribiv"]=_glGetVertexAttribiv;_glGetVertexAttribiv.sig="viip";var _emscripten_glGetVertexAttribiv=_glGetVertexAttribiv;Module["_emscripten_glGetVertexAttribiv"]=_emscripten_glGetVertexAttribiv;_emscripten_glGetVertexAttribiv.sig="viip";var _glHint=(x0,x1)=>GLctx.hint(x0,x1);Module["_glHint"]=_glHint;_glHint.sig="vii";var _emscripten_glHint=_glHint;Module["_emscripten_glHint"]=_emscripten_glHint;_emscripten_glHint.sig="vii";var _glIsBuffer=buffer=>{var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)};Module["_glIsBuffer"]=_glIsBuffer;_glIsBuffer.sig="ii";var _emscripten_glIsBuffer=_glIsBuffer;Module["_emscripten_glIsBuffer"]=_emscripten_glIsBuffer;_emscripten_glIsBuffer.sig="ii";var _glIsEnabled=x0=>GLctx.isEnabled(x0);Module["_glIsEnabled"]=_glIsEnabled;_glIsEnabled.sig="ii";var _emscripten_glIsEnabled=_glIsEnabled;Module["_emscripten_glIsEnabled"]=_emscripten_glIsEnabled;_emscripten_glIsEnabled.sig="ii";var _glIsFramebuffer=framebuffer=>{var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)};Module["_glIsFramebuffer"]=_glIsFramebuffer;_glIsFramebuffer.sig="ii";var _emscripten_glIsFramebuffer=_glIsFramebuffer;Module["_emscripten_glIsFramebuffer"]=_emscripten_glIsFramebuffer;_emscripten_glIsFramebuffer.sig="ii";var _glIsProgram=program=>{program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)};Module["_glIsProgram"]=_glIsProgram;_glIsProgram.sig="ii";var _emscripten_glIsProgram=_glIsProgram;Module["_emscripten_glIsProgram"]=_emscripten_glIsProgram;_emscripten_glIsProgram.sig="ii";var _glIsQueryEXT=id=>{var query=GL.queries[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)};Module["_glIsQueryEXT"]=_glIsQueryEXT;_glIsQueryEXT.sig="ii";var _emscripten_glIsQueryEXT=_glIsQueryEXT;Module["_emscripten_glIsQueryEXT"]=_emscripten_glIsQueryEXT;var _glIsRenderbuffer=renderbuffer=>{var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)};Module["_glIsRenderbuffer"]=_glIsRenderbuffer;_glIsRenderbuffer.sig="ii";var _emscripten_glIsRenderbuffer=_glIsRenderbuffer;Module["_emscripten_glIsRenderbuffer"]=_emscripten_glIsRenderbuffer;_emscripten_glIsRenderbuffer.sig="ii";var _glIsShader=shader=>{var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)};Module["_glIsShader"]=_glIsShader;_glIsShader.sig="ii";var _emscripten_glIsShader=_glIsShader;Module["_emscripten_glIsShader"]=_emscripten_glIsShader;_emscripten_glIsShader.sig="ii";var _glIsTexture=id=>{var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)};Module["_glIsTexture"]=_glIsTexture;_glIsTexture.sig="ii";var _emscripten_glIsTexture=_glIsTexture;Module["_emscripten_glIsTexture"]=_emscripten_glIsTexture;_emscripten_glIsTexture.sig="ii";var _glIsVertexArray=array=>{var vao=GL.vaos[array];if(!vao)return 0;return GLctx.isVertexArray(vao)};Module["_glIsVertexArray"]=_glIsVertexArray;_glIsVertexArray.sig="ii";var _glIsVertexArrayOES=_glIsVertexArray;Module["_glIsVertexArrayOES"]=_glIsVertexArrayOES;_glIsVertexArrayOES.sig="ii";var _emscripten_glIsVertexArrayOES=_glIsVertexArrayOES;Module["_emscripten_glIsVertexArrayOES"]=_emscripten_glIsVertexArrayOES;_emscripten_glIsVertexArrayOES.sig="ii";var _glLineWidth=x0=>GLctx.lineWidth(x0);Module["_glLineWidth"]=_glLineWidth;_glLineWidth.sig="vf";var _emscripten_glLineWidth=_glLineWidth;Module["_emscripten_glLineWidth"]=_emscripten_glLineWidth;_emscripten_glLineWidth.sig="vf";var _glLinkProgram=program=>{program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}};Module["_glLinkProgram"]=_glLinkProgram;_glLinkProgram.sig="vi";var _emscripten_glLinkProgram=_glLinkProgram;Module["_emscripten_glLinkProgram"]=_emscripten_glLinkProgram;_emscripten_glLinkProgram.sig="vi";var _glPixelStorei=(pname,param)=>{if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)};Module["_glPixelStorei"]=_glPixelStorei;_glPixelStorei.sig="vii";var _emscripten_glPixelStorei=_glPixelStorei;Module["_emscripten_glPixelStorei"]=_emscripten_glPixelStorei;_emscripten_glPixelStorei.sig="vii";var _glPolygonOffset=(x0,x1)=>GLctx.polygonOffset(x0,x1);Module["_glPolygonOffset"]=_glPolygonOffset;_glPolygonOffset.sig="vff";var _emscripten_glPolygonOffset=_glPolygonOffset;Module["_emscripten_glPolygonOffset"]=_emscripten_glPolygonOffset;_emscripten_glPolygonOffset.sig="vff";var _glQueryCounterEXT=(id,target)=>{GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.queries[id],target)};Module["_glQueryCounterEXT"]=_glQueryCounterEXT;_glQueryCounterEXT.sig="vii";var _emscripten_glQueryCounterEXT=_glQueryCounterEXT;Module["_emscripten_glQueryCounterEXT"]=_emscripten_glQueryCounterEXT;var computeUnpackAlignedImageSize=(width,height,sizePerPixel,alignment)=>{function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize};Module["computeUnpackAlignedImageSize"]=computeUnpackAlignedImageSize;var colorChannelsInGlTextureFormat=format=>{var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1};Module["colorChannelsInGlTextureFormat"]=colorChannelsInGlTextureFormat;var heapObjectForWebGLType=type=>{type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16};Module["heapObjectForWebGLType"]=heapObjectForWebGLType;var toTypedArrayIndex=(pointer,heap)=>pointer>>>31-Math.clz32(heap.BYTES_PER_ELEMENT);Module["toTypedArrayIndex"]=toTypedArrayIndex;var emscriptenWebGLGetTexPixelData=(type,format,width,height,pixels,internalFormat)=>{var heap=heapObjectForWebGLType(type);var sizePerPixel=colorChannelsInGlTextureFormat(format)*heap.BYTES_PER_ELEMENT;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);return heap.subarray(toTypedArrayIndex(pixels,heap),toTypedArrayIndex(pixels+bytes,heap))};Module["emscriptenWebGLGetTexPixelData"]=emscriptenWebGLGetTexPixelData;var _glReadPixels=(x,y,width,height,format,type,pixels)=>{var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)};Module["_glReadPixels"]=_glReadPixels;_glReadPixels.sig="viiiiiip";var _emscripten_glReadPixels=_glReadPixels;Module["_emscripten_glReadPixels"]=_emscripten_glReadPixels;_emscripten_glReadPixels.sig="viiiiiip";var _glReleaseShaderCompiler=()=>{};Module["_glReleaseShaderCompiler"]=_glReleaseShaderCompiler;_glReleaseShaderCompiler.sig="v";var _emscripten_glReleaseShaderCompiler=_glReleaseShaderCompiler;Module["_emscripten_glReleaseShaderCompiler"]=_emscripten_glReleaseShaderCompiler;_emscripten_glReleaseShaderCompiler.sig="v";var _glRenderbufferStorage=(x0,x1,x2,x3)=>GLctx.renderbufferStorage(x0,x1,x2,x3);Module["_glRenderbufferStorage"]=_glRenderbufferStorage;_glRenderbufferStorage.sig="viiii";var _emscripten_glRenderbufferStorage=_glRenderbufferStorage;Module["_emscripten_glRenderbufferStorage"]=_emscripten_glRenderbufferStorage;_emscripten_glRenderbufferStorage.sig="viiii";var _glSampleCoverage=(value,invert)=>{GLctx.sampleCoverage(value,!!invert)};Module["_glSampleCoverage"]=_glSampleCoverage;_glSampleCoverage.sig="vfi";var _emscripten_glSampleCoverage=_glSampleCoverage;Module["_emscripten_glSampleCoverage"]=_emscripten_glSampleCoverage;_emscripten_glSampleCoverage.sig="vfi";var _glScissor=(x0,x1,x2,x3)=>GLctx.scissor(x0,x1,x2,x3);Module["_glScissor"]=_glScissor;_glScissor.sig="viiii";var _emscripten_glScissor=_glScissor;Module["_emscripten_glScissor"]=_emscripten_glScissor;_emscripten_glScissor.sig="viiii";var _glShaderBinary=(count,shaders,binaryformat,binary,length)=>{GL.recordError(1280)};Module["_glShaderBinary"]=_glShaderBinary;_glShaderBinary.sig="vipipi";var _emscripten_glShaderBinary=_glShaderBinary;Module["_emscripten_glShaderBinary"]=_emscripten_glShaderBinary;_emscripten_glShaderBinary.sig="vipipi";var _glShaderSource=(shader,count,string,length)=>{var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)};Module["_glShaderSource"]=_glShaderSource;_glShaderSource.sig="viipp";var _emscripten_glShaderSource=_glShaderSource;Module["_emscripten_glShaderSource"]=_emscripten_glShaderSource;_emscripten_glShaderSource.sig="viipp";var _glStencilFunc=(x0,x1,x2)=>GLctx.stencilFunc(x0,x1,x2);Module["_glStencilFunc"]=_glStencilFunc;_glStencilFunc.sig="viii";var _emscripten_glStencilFunc=_glStencilFunc;Module["_emscripten_glStencilFunc"]=_emscripten_glStencilFunc;_emscripten_glStencilFunc.sig="viii";var _glStencilFuncSeparate=(x0,x1,x2,x3)=>GLctx.stencilFuncSeparate(x0,x1,x2,x3);Module["_glStencilFuncSeparate"]=_glStencilFuncSeparate;_glStencilFuncSeparate.sig="viiii";var _emscripten_glStencilFuncSeparate=_glStencilFuncSeparate;Module["_emscripten_glStencilFuncSeparate"]=_emscripten_glStencilFuncSeparate;_emscripten_glStencilFuncSeparate.sig="viiii";var _glStencilMask=x0=>GLctx.stencilMask(x0);Module["_glStencilMask"]=_glStencilMask;_glStencilMask.sig="vi";var _emscripten_glStencilMask=_glStencilMask;Module["_emscripten_glStencilMask"]=_emscripten_glStencilMask;_emscripten_glStencilMask.sig="vi";var _glStencilMaskSeparate=(x0,x1)=>GLctx.stencilMaskSeparate(x0,x1);Module["_glStencilMaskSeparate"]=_glStencilMaskSeparate;_glStencilMaskSeparate.sig="vii";var _emscripten_glStencilMaskSeparate=_glStencilMaskSeparate;Module["_emscripten_glStencilMaskSeparate"]=_emscripten_glStencilMaskSeparate;_emscripten_glStencilMaskSeparate.sig="vii";var _glStencilOp=(x0,x1,x2)=>GLctx.stencilOp(x0,x1,x2);Module["_glStencilOp"]=_glStencilOp;_glStencilOp.sig="viii";var _emscripten_glStencilOp=_glStencilOp;Module["_emscripten_glStencilOp"]=_emscripten_glStencilOp;_emscripten_glStencilOp.sig="viii";var _glStencilOpSeparate=(x0,x1,x2,x3)=>GLctx.stencilOpSeparate(x0,x1,x2,x3);Module["_glStencilOpSeparate"]=_glStencilOpSeparate;_glStencilOpSeparate.sig="viiii";var _emscripten_glStencilOpSeparate=_glStencilOpSeparate;Module["_emscripten_glStencilOpSeparate"]=_emscripten_glStencilOpSeparate;_emscripten_glStencilOpSeparate.sig="viiii";var _glTexImage2D=(target,level,internalFormat,width,height,border,format,type,pixels)=>{var pixelData=pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null;GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixelData)};Module["_glTexImage2D"]=_glTexImage2D;_glTexImage2D.sig="viiiiiiiip";var _emscripten_glTexImage2D=_glTexImage2D;Module["_emscripten_glTexImage2D"]=_emscripten_glTexImage2D;_emscripten_glTexImage2D.sig="viiiiiiiip";var _glTexParameterf=(x0,x1,x2)=>GLctx.texParameterf(x0,x1,x2);Module["_glTexParameterf"]=_glTexParameterf;_glTexParameterf.sig="viif";var _emscripten_glTexParameterf=_glTexParameterf;Module["_emscripten_glTexParameterf"]=_emscripten_glTexParameterf;_emscripten_glTexParameterf.sig="viif";var _glTexParameterfv=(target,pname,params)=>{var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)};Module["_glTexParameterfv"]=_glTexParameterfv;_glTexParameterfv.sig="viip";var _emscripten_glTexParameterfv=_glTexParameterfv;Module["_emscripten_glTexParameterfv"]=_emscripten_glTexParameterfv;_emscripten_glTexParameterfv.sig="viip";var _glTexParameteri=(x0,x1,x2)=>GLctx.texParameteri(x0,x1,x2);Module["_glTexParameteri"]=_glTexParameteri;_glTexParameteri.sig="viii";var _emscripten_glTexParameteri=_glTexParameteri;Module["_emscripten_glTexParameteri"]=_emscripten_glTexParameteri;_emscripten_glTexParameteri.sig="viii";var _glTexParameteriv=(target,pname,params)=>{var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)};Module["_glTexParameteriv"]=_glTexParameteriv;_glTexParameteriv.sig="viip";var _emscripten_glTexParameteriv=_glTexParameteriv;Module["_emscripten_glTexParameteriv"]=_emscripten_glTexParameteriv;_emscripten_glTexParameteriv.sig="viip";var _glTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,type,pixels)=>{var pixelData=pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0):null;GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)};Module["_glTexSubImage2D"]=_glTexSubImage2D;_glTexSubImage2D.sig="viiiiiiiip";var _emscripten_glTexSubImage2D=_glTexSubImage2D;Module["_emscripten_glTexSubImage2D"]=_emscripten_glTexSubImage2D;_emscripten_glTexSubImage2D.sig="viiiiiiiip";var _glUniform1f=(location,v0)=>{GLctx.uniform1f(webglGetUniformLocation(location),v0)};Module["_glUniform1f"]=_glUniform1f;_glUniform1f.sig="vif";var _emscripten_glUniform1f=_glUniform1f;Module["_emscripten_glUniform1f"]=_emscripten_glUniform1f;_emscripten_glUniform1f.sig="vif";var miniTempWebGLFloatBuffers=[];Module["miniTempWebGLFloatBuffers"]=miniTempWebGLFloatBuffers;var _glUniform1fv=(location,count,value)=>{if(count<=288){var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(webglGetUniformLocation(location),view)};Module["_glUniform1fv"]=_glUniform1fv;_glUniform1fv.sig="viip";var _emscripten_glUniform1fv=_glUniform1fv;Module["_emscripten_glUniform1fv"]=_emscripten_glUniform1fv;_emscripten_glUniform1fv.sig="viip";var _glUniform1i=(location,v0)=>{GLctx.uniform1i(webglGetUniformLocation(location),v0)};Module["_glUniform1i"]=_glUniform1i;_glUniform1i.sig="vii";var _emscripten_glUniform1i=_glUniform1i;Module["_emscripten_glUniform1i"]=_emscripten_glUniform1i;_emscripten_glUniform1i.sig="vii";var miniTempWebGLIntBuffers=[];Module["miniTempWebGLIntBuffers"]=miniTempWebGLIntBuffers;var _glUniform1iv=(location,count,value)=>{if(count<=288){var view=miniTempWebGLIntBuffers[count];for(var i=0;i>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(webglGetUniformLocation(location),view)};Module["_glUniform1iv"]=_glUniform1iv;_glUniform1iv.sig="viip";var _emscripten_glUniform1iv=_glUniform1iv;Module["_emscripten_glUniform1iv"]=_emscripten_glUniform1iv;_emscripten_glUniform1iv.sig="viip";var _glUniform2f=(location,v0,v1)=>{GLctx.uniform2f(webglGetUniformLocation(location),v0,v1)};Module["_glUniform2f"]=_glUniform2f;_glUniform2f.sig="viff";var _emscripten_glUniform2f=_glUniform2f;Module["_emscripten_glUniform2f"]=_emscripten_glUniform2f;_emscripten_glUniform2f.sig="viff";var _glUniform2fv=(location,count,value)=>{if(count<=144){var view=miniTempWebGLFloatBuffers[2*count];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(webglGetUniformLocation(location),view)};Module["_glUniform2fv"]=_glUniform2fv;_glUniform2fv.sig="viip";var _emscripten_glUniform2fv=_glUniform2fv;Module["_emscripten_glUniform2fv"]=_emscripten_glUniform2fv;_emscripten_glUniform2fv.sig="viip";var _glUniform2i=(location,v0,v1)=>{GLctx.uniform2i(webglGetUniformLocation(location),v0,v1)};Module["_glUniform2i"]=_glUniform2i;_glUniform2i.sig="viii";var _emscripten_glUniform2i=_glUniform2i;Module["_emscripten_glUniform2i"]=_emscripten_glUniform2i;_emscripten_glUniform2i.sig="viii";var _glUniform2iv=(location,count,value)=>{if(count<=144){var view=miniTempWebGLIntBuffers[2*count];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(webglGetUniformLocation(location),view)};Module["_glUniform2iv"]=_glUniform2iv;_glUniform2iv.sig="viip";var _emscripten_glUniform2iv=_glUniform2iv;Module["_emscripten_glUniform2iv"]=_emscripten_glUniform2iv;_emscripten_glUniform2iv.sig="viip";var _glUniform3f=(location,v0,v1,v2)=>{GLctx.uniform3f(webglGetUniformLocation(location),v0,v1,v2)};Module["_glUniform3f"]=_glUniform3f;_glUniform3f.sig="vifff";var _emscripten_glUniform3f=_glUniform3f;Module["_emscripten_glUniform3f"]=_emscripten_glUniform3f;_emscripten_glUniform3f.sig="vifff";var _glUniform3fv=(location,count,value)=>{if(count<=96){var view=miniTempWebGLFloatBuffers[3*count];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(webglGetUniformLocation(location),view)};Module["_glUniform3fv"]=_glUniform3fv;_glUniform3fv.sig="viip";var _emscripten_glUniform3fv=_glUniform3fv;Module["_emscripten_glUniform3fv"]=_emscripten_glUniform3fv;_emscripten_glUniform3fv.sig="viip";var _glUniform3i=(location,v0,v1,v2)=>{GLctx.uniform3i(webglGetUniformLocation(location),v0,v1,v2)};Module["_glUniform3i"]=_glUniform3i;_glUniform3i.sig="viiii";var _emscripten_glUniform3i=_glUniform3i;Module["_emscripten_glUniform3i"]=_emscripten_glUniform3i;_emscripten_glUniform3i.sig="viiii";var _glUniform3iv=(location,count,value)=>{if(count<=96){var view=miniTempWebGLIntBuffers[3*count];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(webglGetUniformLocation(location),view)};Module["_glUniform3iv"]=_glUniform3iv;_glUniform3iv.sig="viip";var _emscripten_glUniform3iv=_glUniform3iv;Module["_emscripten_glUniform3iv"]=_emscripten_glUniform3iv;_emscripten_glUniform3iv.sig="viip";var _glUniform4f=(location,v0,v1,v2,v3)=>{GLctx.uniform4f(webglGetUniformLocation(location),v0,v1,v2,v3)};Module["_glUniform4f"]=_glUniform4f;_glUniform4f.sig="viffff";var _emscripten_glUniform4f=_glUniform4f;Module["_emscripten_glUniform4f"]=_emscripten_glUniform4f;_emscripten_glUniform4f.sig="viffff";var _glUniform4fv=(location,count,value)=>{if(count<=72){var view=miniTempWebGLFloatBuffers[4*count];var heap=HEAPF32;value=value>>2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(webglGetUniformLocation(location),view)};Module["_glUniform4fv"]=_glUniform4fv;_glUniform4fv.sig="viip";var _emscripten_glUniform4fv=_glUniform4fv;Module["_emscripten_glUniform4fv"]=_emscripten_glUniform4fv;_emscripten_glUniform4fv.sig="viip";var _glUniform4i=(location,v0,v1,v2,v3)=>{GLctx.uniform4i(webglGetUniformLocation(location),v0,v1,v2,v3)};Module["_glUniform4i"]=_glUniform4i;_glUniform4i.sig="viiiii";var _emscripten_glUniform4i=_glUniform4i;Module["_emscripten_glUniform4i"]=_emscripten_glUniform4i;_emscripten_glUniform4i.sig="viiiii";var _glUniform4iv=(location,count,value)=>{if(count<=72){var view=miniTempWebGLIntBuffers[4*count];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(webglGetUniformLocation(location),view)};Module["_glUniform4iv"]=_glUniform4iv;_glUniform4iv.sig="viip";var _emscripten_glUniform4iv=_glUniform4iv;Module["_emscripten_glUniform4iv"]=_emscripten_glUniform4iv;_emscripten_glUniform4iv.sig="viip";var _glUniformMatrix2fv=(location,count,transpose,value)=>{if(count<=72){var view=miniTempWebGLFloatBuffers[4*count];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(webglGetUniformLocation(location),!!transpose,view)};Module["_glUniformMatrix2fv"]=_glUniformMatrix2fv;_glUniformMatrix2fv.sig="viiip";var _emscripten_glUniformMatrix2fv=_glUniformMatrix2fv;Module["_emscripten_glUniformMatrix2fv"]=_emscripten_glUniformMatrix2fv;_emscripten_glUniformMatrix2fv.sig="viiip";var _glUniformMatrix3fv=(location,count,transpose,value)=>{if(count<=32){var view=miniTempWebGLFloatBuffers[9*count];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(webglGetUniformLocation(location),!!transpose,view)};Module["_glUniformMatrix3fv"]=_glUniformMatrix3fv;_glUniformMatrix3fv.sig="viiip";var _emscripten_glUniformMatrix3fv=_glUniformMatrix3fv;Module["_emscripten_glUniformMatrix3fv"]=_emscripten_glUniformMatrix3fv;_emscripten_glUniformMatrix3fv.sig="viiip";var _glUniformMatrix4fv=(location,count,transpose,value)=>{if(count<=18){var view=miniTempWebGLFloatBuffers[16*count];var heap=HEAPF32;value=value>>2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(webglGetUniformLocation(location),!!transpose,view)};Module["_glUniformMatrix4fv"]=_glUniformMatrix4fv;_glUniformMatrix4fv.sig="viiip";var _emscripten_glUniformMatrix4fv=_glUniformMatrix4fv;Module["_emscripten_glUniformMatrix4fv"]=_emscripten_glUniformMatrix4fv;_emscripten_glUniformMatrix4fv.sig="viiip";var _glUseProgram=program=>{program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program};Module["_glUseProgram"]=_glUseProgram;_glUseProgram.sig="vi";var _emscripten_glUseProgram=_glUseProgram;Module["_emscripten_glUseProgram"]=_emscripten_glUseProgram;_emscripten_glUseProgram.sig="vi";var _glValidateProgram=program=>{GLctx.validateProgram(GL.programs[program])};Module["_glValidateProgram"]=_glValidateProgram;_glValidateProgram.sig="vi";var _emscripten_glValidateProgram=_glValidateProgram;Module["_emscripten_glValidateProgram"]=_emscripten_glValidateProgram;_emscripten_glValidateProgram.sig="vi";var _glVertexAttrib1f=(x0,x1)=>GLctx.vertexAttrib1f(x0,x1);Module["_glVertexAttrib1f"]=_glVertexAttrib1f;_glVertexAttrib1f.sig="vif";var _emscripten_glVertexAttrib1f=_glVertexAttrib1f;Module["_emscripten_glVertexAttrib1f"]=_emscripten_glVertexAttrib1f;_emscripten_glVertexAttrib1f.sig="vif";var _glVertexAttrib1fv=(index,v)=>{GLctx.vertexAttrib1f(index,HEAPF32[v>>2])};Module["_glVertexAttrib1fv"]=_glVertexAttrib1fv;_glVertexAttrib1fv.sig="vip";var _emscripten_glVertexAttrib1fv=_glVertexAttrib1fv;Module["_emscripten_glVertexAttrib1fv"]=_emscripten_glVertexAttrib1fv;_emscripten_glVertexAttrib1fv.sig="vip";var _glVertexAttrib2f=(x0,x1,x2)=>GLctx.vertexAttrib2f(x0,x1,x2);Module["_glVertexAttrib2f"]=_glVertexAttrib2f;_glVertexAttrib2f.sig="viff";var _emscripten_glVertexAttrib2f=_glVertexAttrib2f;Module["_emscripten_glVertexAttrib2f"]=_emscripten_glVertexAttrib2f;_emscripten_glVertexAttrib2f.sig="viff";var _glVertexAttrib2fv=(index,v)=>{GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])};Module["_glVertexAttrib2fv"]=_glVertexAttrib2fv;_glVertexAttrib2fv.sig="vip";var _emscripten_glVertexAttrib2fv=_glVertexAttrib2fv;Module["_emscripten_glVertexAttrib2fv"]=_emscripten_glVertexAttrib2fv;_emscripten_glVertexAttrib2fv.sig="vip";var _glVertexAttrib3f=(x0,x1,x2,x3)=>GLctx.vertexAttrib3f(x0,x1,x2,x3);Module["_glVertexAttrib3f"]=_glVertexAttrib3f;_glVertexAttrib3f.sig="vifff";var _emscripten_glVertexAttrib3f=_glVertexAttrib3f;Module["_emscripten_glVertexAttrib3f"]=_emscripten_glVertexAttrib3f;_emscripten_glVertexAttrib3f.sig="vifff";var _glVertexAttrib3fv=(index,v)=>{GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])};Module["_glVertexAttrib3fv"]=_glVertexAttrib3fv;_glVertexAttrib3fv.sig="vip";var _emscripten_glVertexAttrib3fv=_glVertexAttrib3fv;Module["_emscripten_glVertexAttrib3fv"]=_emscripten_glVertexAttrib3fv;_emscripten_glVertexAttrib3fv.sig="vip";var _glVertexAttrib4f=(x0,x1,x2,x3,x4)=>GLctx.vertexAttrib4f(x0,x1,x2,x3,x4);Module["_glVertexAttrib4f"]=_glVertexAttrib4f;_glVertexAttrib4f.sig="viffff";var _emscripten_glVertexAttrib4f=_glVertexAttrib4f;Module["_emscripten_glVertexAttrib4f"]=_emscripten_glVertexAttrib4f;_emscripten_glVertexAttrib4f.sig="viffff";var _glVertexAttrib4fv=(index,v)=>{GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])};Module["_glVertexAttrib4fv"]=_glVertexAttrib4fv;_glVertexAttrib4fv.sig="vip";var _emscripten_glVertexAttrib4fv=_glVertexAttrib4fv;Module["_emscripten_glVertexAttrib4fv"]=_emscripten_glVertexAttrib4fv;_emscripten_glVertexAttrib4fv.sig="vip";var _glVertexAttribDivisor=(index,divisor)=>{GLctx.vertexAttribDivisor(index,divisor)};Module["_glVertexAttribDivisor"]=_glVertexAttribDivisor;_glVertexAttribDivisor.sig="vii";var _glVertexAttribDivisorANGLE=_glVertexAttribDivisor;Module["_glVertexAttribDivisorANGLE"]=_glVertexAttribDivisorANGLE;var _emscripten_glVertexAttribDivisorANGLE=_glVertexAttribDivisorANGLE;Module["_emscripten_glVertexAttribDivisorANGLE"]=_emscripten_glVertexAttribDivisorANGLE;var _glVertexAttribPointer=(index,size,type,normalized,stride,ptr)=>{GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)};Module["_glVertexAttribPointer"]=_glVertexAttribPointer;_glVertexAttribPointer.sig="viiiiip";var _emscripten_glVertexAttribPointer=_glVertexAttribPointer;Module["_emscripten_glVertexAttribPointer"]=_emscripten_glVertexAttribPointer;_emscripten_glVertexAttribPointer.sig="viiiiip";var _glViewport=(x0,x1,x2,x3)=>GLctx.viewport(x0,x1,x2,x3);Module["_glViewport"]=_glViewport;_glViewport.sig="viiii";var _emscripten_glViewport=_glViewport;Module["_emscripten_glViewport"]=_emscripten_glViewport;_emscripten_glViewport.sig="viiii";var _emscripten_out=str=>out(UTF8ToString(str));Module["_emscripten_out"]=_emscripten_out;_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)}}Module["HandleAllocator"]=HandleAllocator;var promiseMap=new HandleAllocator;Module["promiseMap"]=promiseMap;var makePromise=()=>{var promiseInfo={};promiseInfo.promise=new Promise((resolve,reject)=>{promiseInfo.reject=reject;promiseInfo.resolve=resolve});promiseInfo.id=promiseMap.allocate(promiseInfo);return promiseInfo};Module["makePromise"]=makePromise;var _emscripten_promise_create=()=>makePromise().id;Module["_emscripten_promise_create"]=_emscripten_promise_create;_emscripten_promise_create.sig="p";var _emscripten_promise_destroy=id=>{promiseMap.free(id)};Module["_emscripten_promise_destroy"]=_emscripten_promise_destroy;_emscripten_promise_destroy.sig="vp";var getPromise=id=>promiseMap.get(id).promise;Module["getPromise"]=getPromise;var _emscripten_promise_resolve=(id,result,value)=>{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}};Module["_emscripten_promise_resolve"]=_emscripten_promise_resolve;_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){}};Module["growMemory"]=growMemory;var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;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,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};Module["_emscripten_resize_heap"]=_emscripten_resize_heap;_emscripten_resize_heap.sig="ip";var getExecutableName=()=>thisProgram||"./this.program";Module["getExecutableName"]=getExecutableName;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};Module["getEnvStrings"]=getEnvStrings;var stringToAscii=(str,buffer)=>{for(var i=0;i{var bufSize=0;getEnvStrings().forEach((string,i)=>{var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0};Module["_environ_get"]=_environ_get;_environ_get.sig="ipp";var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(string=>bufSize+=string.length+1);HEAPU32[penviron_buf_size>>2]=bufSize;return 0};Module["_environ_sizes_get"]=_environ_sizes_get;_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}}Module["_fd_close"]=_fd_close;_fd_close.sig="ii";function _fd_fdstat_get(fd,pbuf){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]=type;HEAP16[pbuf+2>>1]=flags;HEAP64[pbuf+8>>3]=BigInt(rightsBase);HEAP64[pbuf+16>>3]=BigInt(rightsInheriting);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}Module["_fd_fdstat_get"]=_fd_fdstat_get;_fd_fdstat_get.sig="iip";var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}Module["_fd_pread"]=_fd_pread;_fd_pread.sig="iippjp";var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(typeof offset!="undefined"){offset+=curr}}return ret};Module["doWritev"]=doWritev;function _fd_pwrite(fd,iov,iovcnt,offset,pnum){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt,offset);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}Module["_fd_pwrite"]=_fd_pwrite;_fd_pwrite.sig="iippjp";function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}Module["_fd_read"]=_fd_read;_fd_read.sig="iippp";function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);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}}Module["_fd_seek"]=_fd_seek;_fd_seek.sig="iijip";function _fd_sync(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);if(stream.stream_ops?.fsync){return stream.stream_ops.fsync(stream)}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}Module["_fd_sync"]=_fd_sync;_fd_sync.sig="ii";function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}Module["_fd_write"]=_fd_write;_fd_write.sig="iippp";var _getaddrinfo=(node,service,hint,out)=>{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]=family;HEAP32[ai+8>>2]=type;HEAP32[ai+12>>2]=proto;HEAPU32[ai+24>>2]=canon;HEAPU32[ai+20>>2]=sa;if(family===10){HEAP32[ai+16>>2]=28}else{HEAP32[ai+16>>2]=16}HEAP32[ai+28>>2]=0;return ai}if(hint){flags=HEAP32[hint>>2];family=HEAP32[hint+4>>2];type=HEAP32[hint+8>>2];proto=HEAP32[hint+12>>2]}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]&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]=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]=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]=ai;return 0};Module["_getaddrinfo"]=_getaddrinfo;_getaddrinfo.sig="ipppp";var _getentropy=(buffer,size)=>{randomFill(HEAPU8.subarray(buffer,buffer+size));return 0};Module["_getentropy"]=_getentropy;_getentropy.sig="ipp";var _getnameinfo=(sa,salen,node,nodelen,serv,servlen,flags)=>{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};Module["_getnameinfo"]=_getnameinfo;_getnameinfo.sig="ipipipii";var Protocols={list:[],map:{}};Module["Protocols"]=Protocols;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]=aliasBuf}HEAPU32[aliasListBuf+j>>2]=0;var pe=_malloc(12);HEAPU32[pe>>2]=nameBuf;HEAPU32[pe+4>>2]=aliasListBuf;HEAP32[pe+8>>2]=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};Module["_setprotoent"]=_setprotoent;_setprotoent.sig="vi";var _getprotobyname=name=>{name=UTF8ToString(name);_setprotoent(true);var result=Protocols.map[name];return result};Module["_getprotobyname"]=_getprotobyname;_getprotobyname.sig="pp";var arraySum=(array,index)=>{var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum};Module["arraySum"]=arraySum;var MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];Module["MONTH_DAYS_LEAP"]=MONTH_DAYS_LEAP;var MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];Module["MONTH_DAYS_REGULAR"]=MONTH_DAYS_REGULAR;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};Module["addDays"]=addDays;var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};Module["writeArrayToMemory"]=writeArrayToMemory;var _strftime=(s,maxsize,format,tm)=>{var tm_zone=HEAPU32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}return thisDate.getFullYear()}return thisDate.getFullYear()-1}var EXPANSION_RULES_2={"%a":date=>WEEKDAYS[date.tm_wday].substring(0,3),"%A":date=>WEEKDAYS[date.tm_wday],"%b":date=>MONTHS[date.tm_mon].substring(0,3),"%B":date=>MONTHS[date.tm_mon],"%C":date=>{var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":date=>leadingNulls(date.tm_mday,2),"%e":date=>leadingSomething(date.tm_mday,2," "),"%g":date=>getWeekBasedYear(date).toString().substring(2),"%G":getWeekBasedYear,"%H":date=>leadingNulls(date.tm_hour,2),"%I":date=>{var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":date=>leadingNulls(date.tm_mday+arraySum(isLeapYear(date.tm_year+1900)?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,date.tm_mon-1),3),"%m":date=>leadingNulls(date.tm_mon+1,2),"%M":date=>leadingNulls(date.tm_min,2),"%n":()=>"\n","%p":date=>{if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}return"PM"},"%S":date=>leadingNulls(date.tm_sec,2),"%t":()=>"\t","%u":date=>date.tm_wday||7,"%U":date=>{var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":date=>{var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":date=>date.tm_wday,"%W":date=>{var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":date=>(date.tm_year+1900).toString().substring(2),"%Y":date=>date.tm_year+1900,"%z":date=>{var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":date=>date.tm_zone,"%%":()=>"%"};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1};Module["_strftime"]=_strftime;_strftime.sig="ppppp";var _strftime_l=(s,maxsize,format,tm,loc)=>_strftime(s,maxsize,format,tm);Module["_strftime_l"]=_strftime_l;_strftime_l.sig="pppppp";var _stackAlloc=stackAlloc;Module["_stackAlloc"]=_stackAlloc;var _stackRestore=stackSave;Module["_stackRestore"]=_stackRestore;var _stackSave=stackSave;Module["_stackSave"]=_stackSave;var FS_unlink=path=>FS.unlink(path);Module["FS_unlink"]=FS_unlink;var writeI53ToI64Clamped=(ptr,num)=>{if(num>0x8000000000000000){HEAPU32[ptr>>2]=4294967295;HEAPU32[ptr+4>>2]=2147483647}else if(num<-0x8000000000000000){HEAPU32[ptr>>2]=0;HEAPU32[ptr+4>>2]=2147483648}else{writeI53ToI64(ptr,num)}};Module["writeI53ToI64Clamped"]=writeI53ToI64Clamped;var writeI53ToI64Signaling=(ptr,num)=>{if(num>0x8000000000000000||num<-0x8000000000000000){throw`RangeError: ${num}`}writeI53ToI64(ptr,num)};Module["writeI53ToI64Signaling"]=writeI53ToI64Signaling;var writeI53ToU64Clamped=(ptr,num)=>{if(num>0x10000000000000000){HEAPU32[ptr>>2]=4294967295;HEAPU32[ptr+4>>2]=4294967295}else if(num<0){HEAPU32[ptr>>2]=0;HEAPU32[ptr+4>>2]=0}else{writeI53ToI64(ptr,num)}};Module["writeI53ToU64Clamped"]=writeI53ToU64Clamped;var writeI53ToU64Signaling=(ptr,num)=>{if(num<0||num>0x10000000000000000){throw`RangeError: ${num}`}writeI53ToI64(ptr,num)};Module["writeI53ToU64Signaling"]=writeI53ToU64Signaling;var readI53FromU64=ptr=>HEAPU32[ptr>>2]+HEAPU32[ptr+4>>2]*4294967296;Module["readI53FromU64"]=readI53FromU64;var convertI32PairToI53=(lo,hi)=>(lo>>>0)+hi*4294967296;Module["convertI32PairToI53"]=convertI32PairToI53;var convertI32PairToI53Checked=(lo,hi)=>hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN;Module["convertI32PairToI53Checked"]=convertI32PairToI53Checked;var convertU32PairToI53=(lo,hi)=>(lo>>>0)+(hi>>>0)*4294967296;Module["convertU32PairToI53"]=convertU32PairToI53;var getTempRet0=val=>__emscripten_tempret_get();Module["getTempRet0"]=getTempRet0;var ptrToString=ptr=>{ptr>>>=0;return"0x"+ptr.toString(16).padStart(8,"0")};Module["ptrToString"]=ptrToString;var _emscripten_notify_memory_growth=memoryIndex=>{updateMemoryViews()};Module["_emscripten_notify_memory_growth"]=_emscripten_notify_memory_growth;_emscripten_notify_memory_growth.sig="vp";var ___asctime_r=(tmPtr,buf)=>{var date={tm_sec:HEAP32[tmPtr>>2],tm_min:HEAP32[tmPtr+4>>2],tm_hour:HEAP32[tmPtr+8>>2],tm_mday:HEAP32[tmPtr+12>>2],tm_mon:HEAP32[tmPtr+16>>2],tm_year:HEAP32[tmPtr+20>>2],tm_wday:HEAP32[tmPtr+24>>2]};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};Module["___asctime_r"]=___asctime_r;___asctime_r.sig="ppp";var withStackSave=f=>{var stack=stackSave();var ret=f();stackRestore(stack);return ret};Module["withStackSave"]=withStackSave;var _strptime=(buf,format,tm)=>{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]+1900,1970,9999),month:fixup(HEAP32[tm+16>>2],0,11),day:fixup(HEAP32[tm+12>>2],1,31),hour:fixup(HEAP32[tm+8>>2],0,23),min:fixup(HEAP32[tm+4>>2],0,59),sec:fixup(HEAP32[tm>>2],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]=fullDate.getSeconds();HEAP32[tm+4>>2]=fullDate.getMinutes();HEAP32[tm+8>>2]=fullDate.getHours();HEAP32[tm+12>>2]=fullDate.getDate();HEAP32[tm+16>>2]=fullDate.getMonth();HEAP32[tm+20>>2]=fullDate.getFullYear()-1900;HEAP32[tm+24>>2]=fullDate.getDay();HEAP32[tm+28>>2]=arraySum(isLeapYear(fullDate.getFullYear())?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,fullDate.getMonth()-1)+fullDate.getDate()-1;HEAP32[tm+32>>2]=0;HEAP32[tm+36>>2]=date.gmtoff;return buf+intArrayFromString(matches[0]).length-1}return 0};Module["_strptime"]=_strptime;_strptime.sig="pppp";var _strptime_l=(buf,format,tm,locale)=>_strptime(buf,format,tm);Module["_strptime_l"]=_strptime_l;_strptime_l.sig="ppppp";var ERRNO_MESSAGES={0:"Success",1:"Arg list too long",2:"Permission denied",3:"Address already in use",4:"Address not available",5:"Address family not supported by protocol family",6:"No more processes",7:"Socket already connected",8:"Bad file number",9:"Trying to read unreadable message",10:"Mount device busy",11:"Operation canceled",12:"No children",13:"Connection aborted",14:"Connection refused",15:"Connection reset by peer",16:"File locking deadlock error",17:"Destination address required",18:"Math arg out of domain of func",19:"Quota exceeded",20:"File exists",21:"Bad address",22:"File too large",23:"Host is unreachable",24:"Identifier removed",25:"Illegal byte sequence",26:"Connection already in progress",27:"Interrupted system call",28:"Invalid argument",29:"I/O error",30:"Socket is already connected",31:"Is a directory",32:"Too many symbolic links",33:"Too many open files",34:"Too many links",35:"Message too long",36:"Multihop attempted",37:"File or path name too long",38:"Network interface is not configured",39:"Connection reset by network",40:"Network is unreachable",41:"Too many open files in system",42:"No buffer space available",43:"No such device",44:"No such file or directory",45:"Exec format error",46:"No record locks available",47:"The link has been severed",48:"Not enough core",49:"No message of desired type",50:"Protocol not available",51:"No space left on device",52:"Function not implemented",53:"Socket is not connected",54:"Not a directory",55:"Directory not empty",56:"State not recoverable",57:"Socket operation on non-socket",59:"Not a typewriter",60:"No such device or address",61:"Value too large for defined data type",62:"Previous owner died",63:"Not super-user",64:"Broken pipe",65:"Protocol error",66:"Unknown protocol",67:"Protocol wrong type for socket",68:"Math result not representable",69:"Read only file system",70:"Illegal seek",71:"No such process",72:"Stale file handle",73:"Connection timed out",74:"Text file busy",75:"Cross-device link",100:"Device not a stream",101:"Bad font file fmt",102:"Invalid slot",103:"Invalid request code",104:"No anode",105:"Block device required",106:"Channel number out of range",107:"Level 3 halted",108:"Level 3 reset",109:"Link number out of range",110:"Protocol driver not attached",111:"No CSI structure available",112:"Level 2 halted",113:"Invalid exchange",114:"Invalid request descriptor",115:"Exchange full",116:"No data (for no delay io)",117:"Timer expired",118:"Out of streams resources",119:"Machine is not on the network",120:"Package not installed",121:"The object is remote",122:"Advertise error",123:"Srmount error",124:"Communication error on send",125:"Cross mount point (not really error)",126:"Given log. name not unique",127:"f.d. invalid for this operation",128:"Remote address changed",129:"Can access a needed shared lib",130:"Accessing a corrupted shared lib",131:".lib section in a.out corrupted",132:"Attempting to link in too many libs",133:"Attempting to exec a shared library",135:"Streams pipe error",136:"Too many users",137:"Socket type not supported",138:"Not supported",139:"Protocol family not supported",140:"Can't send after socket shutdown",141:"Too many references",142:"Host is down",148:"No medium (in tape drive)",156:"Level 2 not synchronized"};Module["ERRNO_MESSAGES"]=ERRNO_MESSAGES;var _endprotoent=()=>{};Module["_endprotoent"]=_endprotoent;_endprotoent.sig="v";var _getprotoent=number=>{if(_setprotoent.index===Protocols.list.length){return 0}var result=Protocols.list[_setprotoent.index++];return result};Module["_getprotoent"]=_getprotoent;_getprotoent.sig="p";var _getprotobynumber=number=>{_setprotoent(true);var result=Protocols.map[number];return result};Module["_getprotobynumber"]=_getprotobynumber;_getprotobynumber.sig="pi";var _emscripten_run_script=ptr=>{eval(UTF8ToString(ptr))};Module["_emscripten_run_script"]=_emscripten_run_script;_emscripten_run_script.sig="vp";var _emscripten_run_script_int=ptr=>eval(UTF8ToString(ptr))|0;Module["_emscripten_run_script_int"]=_emscripten_run_script_int;_emscripten_run_script_int.sig="ip";var _emscripten_run_script_string=ptr=>{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();Module["_emscripten_random"]=_emscripten_random;_emscripten_random.sig="f";var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};Module["warnOnce"]=warnOnce;function jsStackTrace(){return(new Error).stack.toString()}Module["jsStackTrace"]=jsStackTrace;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);if(!parts)parts=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: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}Module["getCallstack"]=getCallstack;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)}};Module["emscriptenLog"]=emscriptenLog;var reallyNegative=x=>x<0||x===0&&1/x===-Infinity;Module["reallyNegative"]=reallyNegative;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};Module["reSign"]=reSign;var unSign=(value,bits)=>{if(value>=0){return value}return bits<=32?2*Math.abs(1<{var end=ptr;while(HEAPU8[end])++end;return end-ptr};Module["strLen"]=strLen;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];argIndex+=8}else if(type=="i64"){ret=[HEAP32[argIndex>>2],HEAP32[argIndex+4>>2]];argIndex+=8}else{type="i32";ret=HEAP32[argIndex>>2];argIndex+=4}return ret}var ret=[];var curr,next,currArg;while(1){var startTextIndex=textIndex;curr=HEAP8[textIndex];if(curr===0)break;next=HEAP8[textIndex+1];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]}var width=0;if(next==42){width=getNextArg("i32");textIndex++;next=HEAP8[textIndex+1]}else{while(next>=48&&next<=57){width=width*10+(next-48);textIndex++;next=HEAP8[textIndex+1]}}var precisionSet=false,precision=-1;if(next==46){precision=0;precisionSet=true;textIndex++;next=HEAP8[textIndex+1];if(next==42){precision=getNextArg("i32");textIndex++}else{while(1){var precisionChr=HEAP8[textIndex+1];if(precisionChr<48||precisionChr>57)break;precision=precision*10+(precisionChr-48);textIndex++}}next=HEAP8[textIndex+1]}if(precision<0){precision=6;precisionSet=false}var argSize;switch(String.fromCharCode(next)){case"h":var nextNext=HEAP8[textIndex+2];if(nextNext==104){textIndex++;argSize=1}else{argSize=2}break;case"l":var nextNext=HEAP8[textIndex+2];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];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.lengthexponent&&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.length0){ret.push(32)}if(!flagLeftAlign)ret.push(getNextArg("i8"));break}case"n":{var ptr=getNextArg("i32*");HEAP32[ptr>>2]=ret.length;break}case"%":{ret.push(curr);break}default:{for(var i=startTextIndex;i{var result=formatString(format,varargs);var str=UTF8ArrayToString(result,0);emscriptenLog(flags,str)};Module["_emscripten_log"]=_emscripten_log;_emscripten_log.sig="vipp";var _emscripten_get_compiler_setting=name=>{throw"You must build with -sRETAIN_COMPILER_SETTINGS for getCompilerSetting or emscripten_get_compiler_setting to work"};Module["_emscripten_get_compiler_setting"]=_emscripten_get_compiler_setting;_emscripten_get_compiler_setting.sig="pp";var _emscripten_has_asyncify=()=>0;Module["_emscripten_has_asyncify"]=_emscripten_has_asyncify;_emscripten_has_asyncify.sig="i";function _emscripten_debugger(){debugger}Module["_emscripten_debugger"]=_emscripten_debugger;_emscripten_debugger.sig="v";var _emscripten_print_double=(x,to,max)=>{var str=x+"";if(to)return stringToUTF8(str,to,max);else return lengthBytesUTF8(str)};Module["_emscripten_print_double"]=_emscripten_print_double;_emscripten_print_double.sig="idpi";var _emscripten_get_module_name=(buf,length)=>stringToUTF8(wasmBinaryFile,buf,length);Module["_emscripten_get_module_name"]=_emscripten_get_module_name;_emscripten_get_module_name.sig="ppp";var _emscripten_asm_const_double=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);Module["_emscripten_asm_const_double"]=_emscripten_asm_const_double;_emscripten_asm_const_double.sig="dppp";var _emscripten_asm_const_ptr=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);Module["_emscripten_asm_const_ptr"]=_emscripten_asm_const_ptr;_emscripten_asm_const_ptr.sig="pppp";var runMainThreadEmAsm=(emAsmAddr,sigPtr,argbuf,sync)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[emAsmAddr](...args)};Module["runMainThreadEmAsm"]=runMainThreadEmAsm;var _emscripten_asm_const_int_sync_on_main_thread=(emAsmAddr,sigPtr,argbuf)=>runMainThreadEmAsm(emAsmAddr,sigPtr,argbuf,1);Module["_emscripten_asm_const_int_sync_on_main_thread"]=_emscripten_asm_const_int_sync_on_main_thread;_emscripten_asm_const_int_sync_on_main_thread.sig="ippp";var _emscripten_asm_const_ptr_sync_on_main_thread=(emAsmAddr,sigPtr,argbuf)=>runMainThreadEmAsm(emAsmAddr,sigPtr,argbuf,1);Module["_emscripten_asm_const_ptr_sync_on_main_thread"]=_emscripten_asm_const_ptr_sync_on_main_thread;_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;Module["_emscripten_asm_const_double_sync_on_main_thread"]=_emscripten_asm_const_double_sync_on_main_thread;_emscripten_asm_const_double_sync_on_main_thread.sig="dppp";var _emscripten_asm_const_async_on_main_thread=(emAsmAddr,sigPtr,argbuf)=>runMainThreadEmAsm(emAsmAddr,sigPtr,argbuf,0);Module["_emscripten_asm_const_async_on_main_thread"]=_emscripten_asm_const_async_on_main_thread;_emscripten_asm_const_async_on_main_thread.sig="vppp";var jstoi_s=Number;Module["jstoi_s"]=jstoi_s;var __Unwind_Backtrace=(func,arg)=>{var trace=getCallstack();var parts=trace.split("\n");for(var i=0;iabort("Unwind_GetIPInfo");Module["__Unwind_GetIPInfo"]=__Unwind_GetIPInfo;__Unwind_GetIPInfo.sig="ppp";var __Unwind_FindEnclosingFunction=ip=>0;Module["__Unwind_FindEnclosingFunction"]=__Unwind_FindEnclosingFunction;__Unwind_FindEnclosingFunction.sig="pp";var __Unwind_RaiseException=ex=>{err("Warning: _Unwind_RaiseException is not correctly implemented");return ___cxa_throw(ex,0,0)};Module["__Unwind_RaiseException"]=__Unwind_RaiseException;__Unwind_RaiseException.sig="ip";var __Unwind_DeleteException=ex=>{err("TODO: Unwind_DeleteException")};Module["__Unwind_DeleteException"]=__Unwind_DeleteException;__Unwind_DeleteException.sig="vp";var listenOnce=(object,event,func)=>{object.addEventListener(event,func,{"once":true})};Module["listenOnce"]=listenOnce;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()})}})})};Module["autoResumeAudioContext"]=autoResumeAudioContext;var getDynCaller=(sig,ptr)=>(...args)=>dynCall(sig,ptr,args);Module["getDynCaller"]=getDynCaller;var _emscripten_force_exit=status=>{__emscripten_runtime_keepalive_clear();_exit(status)};Module["_emscripten_force_exit"]=_emscripten_force_exit;_emscripten_force_exit.sig="vi";var _emscripten_outn=(str,len)=>out(UTF8ToString(str,len));Module["_emscripten_outn"]=_emscripten_outn;_emscripten_outn.sig="vpp";var _emscripten_errn=(str,len)=>err(UTF8ToString(str,len));Module["_emscripten_errn"]=_emscripten_errn;_emscripten_errn.sig="vpp";var _emscripten_throw_number=number=>{throw number};Module["_emscripten_throw_number"]=_emscripten_throw_number;_emscripten_throw_number.sig="vd";var _emscripten_throw_string=str=>{throw UTF8ToString(str)};Module["_emscripten_throw_string"]=_emscripten_throw_string;_emscripten_throw_string.sig="vp";var runtimeKeepalivePush=()=>{runtimeKeepaliveCounter+=1};Module["runtimeKeepalivePush"]=runtimeKeepalivePush;runtimeKeepalivePush.sig="v";var runtimeKeepalivePop=()=>{runtimeKeepaliveCounter-=1};Module["runtimeKeepalivePop"]=runtimeKeepalivePop;runtimeKeepalivePop.sig="v";var _emscripten_runtime_keepalive_push=runtimeKeepalivePush;Module["_emscripten_runtime_keepalive_push"]=_emscripten_runtime_keepalive_push;_emscripten_runtime_keepalive_push.sig="v";var _emscripten_runtime_keepalive_pop=runtimeKeepalivePop;Module["_emscripten_runtime_keepalive_pop"]=_emscripten_runtime_keepalive_pop;_emscripten_runtime_keepalive_pop.sig="v";var _emscripten_runtime_keepalive_check=keepRuntimeAlive;Module["_emscripten_runtime_keepalive_check"]=_emscripten_runtime_keepalive_check;_emscripten_runtime_keepalive_check.sig="i";var asmjsMangle=x=>{if(x=="__main_argc_argv"){x="main"}return x.startsWith("dynCall_")?x:"_"+x};Module["asmjsMangle"]=asmjsMangle;var ___global_base=1024;Module["___global_base"]=___global_base;var __emscripten_fs_load_embedded_files=ptr=>{do{var name_addr=HEAPU32[ptr>>2];ptr+=4;var len=HEAPU32[ptr>>2];ptr+=4;var content=HEAPU32[ptr>>2];ptr+=4;var name=UTF8ToString(name_addr);FS.createPath("/",PATH.dirname(name),true,true);FS.createDataFile(name,null,HEAP8.subarray(content,content+len),true,true,true)}while(HEAPU32[ptr>>2])};Module["__emscripten_fs_load_embedded_files"]=__emscripten_fs_load_embedded_files;__emscripten_fs_load_embedded_files.sig="vp";var POINTER_SIZE=4;Module["POINTER_SIZE"]=POINTER_SIZE;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}}}Module["getNativeTypeSize"]=getNativeTypeSize;var STACK_SIZE=5242880;Module["STACK_SIZE"]=STACK_SIZE;var STACK_ALIGN=16;Module["STACK_ALIGN"]=STACK_ALIGN;var ASSERTIONS=0;Module["ASSERTIONS"]=ASSERTIONS;var getCFunc=ident=>{var func=Module["_"+ident];return func};Module["getCFunc"]=getCFunc;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;i{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)};Module["cwrap"]=cwrap;var removeFunction=index=>{functionsInTableMap.delete(getWasmTableEntry(index));setWasmTableEntry(index,null);freeTableIndexes.push(index)};Module["removeFunction"]=removeFunction;var _emscripten_math_cbrt=Math.cbrt;Module["_emscripten_math_cbrt"]=_emscripten_math_cbrt;_emscripten_math_cbrt.sig="dd";var _emscripten_math_pow=Math.pow;Module["_emscripten_math_pow"]=_emscripten_math_pow;_emscripten_math_pow.sig="ddd";var _emscripten_math_random=Math.random;Module["_emscripten_math_random"]=_emscripten_math_random;_emscripten_math_random.sig="d";var _emscripten_math_sign=Math.sign;Module["_emscripten_math_sign"]=_emscripten_math_sign;_emscripten_math_sign.sig="dd";var _emscripten_math_sqrt=Math.sqrt;Module["_emscripten_math_sqrt"]=_emscripten_math_sqrt;_emscripten_math_sqrt.sig="dd";var _emscripten_math_exp=Math.exp;Module["_emscripten_math_exp"]=_emscripten_math_exp;_emscripten_math_exp.sig="dd";var _emscripten_math_expm1=Math.expm1;Module["_emscripten_math_expm1"]=_emscripten_math_expm1;_emscripten_math_expm1.sig="dd";var _emscripten_math_fmod=(x,y)=>x%y;Module["_emscripten_math_fmod"]=_emscripten_math_fmod;_emscripten_math_fmod.sig="ddd";var _emscripten_math_log=Math.log;Module["_emscripten_math_log"]=_emscripten_math_log;_emscripten_math_log.sig="dd";var _emscripten_math_log1p=Math.log1p;Module["_emscripten_math_log1p"]=_emscripten_math_log1p;_emscripten_math_log1p.sig="dd";var _emscripten_math_log10=Math.log10;Module["_emscripten_math_log10"]=_emscripten_math_log10;_emscripten_math_log10.sig="dd";var _emscripten_math_log2=Math.log2;Module["_emscripten_math_log2"]=_emscripten_math_log2;_emscripten_math_log2.sig="dd";var _emscripten_math_round=Math.round;Module["_emscripten_math_round"]=_emscripten_math_round;_emscripten_math_round.sig="dd";var _emscripten_math_acos=Math.acos;Module["_emscripten_math_acos"]=_emscripten_math_acos;_emscripten_math_acos.sig="dd";var _emscripten_math_acosh=Math.acosh;Module["_emscripten_math_acosh"]=_emscripten_math_acosh;_emscripten_math_acosh.sig="dd";var _emscripten_math_asin=Math.asin;Module["_emscripten_math_asin"]=_emscripten_math_asin;_emscripten_math_asin.sig="dd";var _emscripten_math_asinh=Math.asinh;Module["_emscripten_math_asinh"]=_emscripten_math_asinh;_emscripten_math_asinh.sig="dd";var _emscripten_math_atan=Math.atan;Module["_emscripten_math_atan"]=_emscripten_math_atan;_emscripten_math_atan.sig="dd";var _emscripten_math_atanh=Math.atanh;Module["_emscripten_math_atanh"]=_emscripten_math_atanh;_emscripten_math_atanh.sig="dd";var _emscripten_math_atan2=Math.atan2;Module["_emscripten_math_atan2"]=_emscripten_math_atan2;_emscripten_math_atan2.sig="ddd";var _emscripten_math_cos=Math.cos;Module["_emscripten_math_cos"]=_emscripten_math_cos;_emscripten_math_cos.sig="dd";var _emscripten_math_cosh=Math.cosh;Module["_emscripten_math_cosh"]=_emscripten_math_cosh;_emscripten_math_cosh.sig="dd";var _emscripten_math_hypot=(count,varargs)=>{var args=[];for(var i=0;i>3])}return Math.hypot(...args)};Module["_emscripten_math_hypot"]=_emscripten_math_hypot;_emscripten_math_hypot.sig="dip";var _emscripten_math_sin=Math.sin;Module["_emscripten_math_sin"]=_emscripten_math_sin;_emscripten_math_sin.sig="dd";var _emscripten_math_sinh=Math.sinh;Module["_emscripten_math_sinh"]=_emscripten_math_sinh;_emscripten_math_sinh.sig="dd";var _emscripten_math_tan=Math.tan;Module["_emscripten_math_tan"]=_emscripten_math_tan;_emscripten_math_tan.sig="dd";var _emscripten_math_tanh=Math.tanh;Module["_emscripten_math_tanh"]=_emscripten_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("")}Module["intArrayToString"]=intArrayToString;var AsciiToString=ptr=>{var str="";while(1){var ch=HEAPU8[ptr++];if(!ch)return str;str+=String.fromCharCode(ch)}};Module["AsciiToString"]=AsciiToString;var UTF16Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):undefined;Module["UTF16Decoder"]=UTF16Decoder;var UTF16ToString=(ptr,maxBytesToRead)=>{var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder)return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr));var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str};Module["UTF16ToString"]=UTF16ToString;var stringToUTF16=(str,outPtr,maxBytesToWrite)=>{maxBytesToWrite??=2147483647;if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr};Module["stringToUTF16"]=stringToUTF16;var lengthBytesUTF16=str=>str.length*2;Module["lengthBytesUTF16"]=lengthBytesUTF16;var UTF32ToString=(ptr,maxBytesToRead)=>{var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];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};Module["UTF32ToString"]=UTF32ToString;var stringToUTF32=(str,outPtr,maxBytesToWrite)=>{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]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr};Module["stringToUTF32"]=stringToUTF32;var lengthBytesUTF32=str=>{var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len};Module["lengthBytesUTF32"]=lengthBytesUTF32;var JSEvents={removeAllEventListeners(){while(JSEvents.eventHandlers.length){JSEvents._removeHandler(JSEvents.eventHandlers.length-1)}JSEvents.deferredCalls=[]},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 i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort((x,y)=>x.precedence{for(var i=0;icString>2?UTF8ToString(cString):cString;Module["maybeCStringToJsString"]=maybeCStringToJsString;var specialHTMLTargets=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];Module["specialHTMLTargets"]=specialHTMLTargets;var findEventTarget=target=>{target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!="undefined"?document.querySelector(target):undefined);return domElement};Module["findEventTarget"]=findEventTarget;var registerKeyEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(176);var keyEventHandlerFunc=e=>{var keyEventData=JSEvents.keyEvent;HEAPF64[keyEventData>>3]=e.timeStamp;var idx=keyEventData>>2;HEAP32[idx+2]=e.location;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;HEAP32[idx+7]=e.repeat;HEAP32[idx+8]=e.charCode;HEAP32[idx+9]=e.keyCode;HEAP32[idx+10]=e.which;stringToUTF8(e.key||"",keyEventData+44,32);stringToUTF8(e.code||"",keyEventData+76,32);stringToUTF8(e.char||"",keyEventData+108,32);stringToUTF8(e.locale||"",keyEventData+140,32);if(getWasmTableEntry(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};Module["registerKeyEventCallback"]=registerKeyEventCallback;var findCanvasEventTarget=findEventTarget;Module["findCanvasEventTarget"]=findCanvasEventTarget;var _emscripten_set_keypress_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);Module["_emscripten_set_keypress_callback_on_thread"]=_emscripten_set_keypress_callback_on_thread;_emscripten_set_keypress_callback_on_thread.sig="ippipp";var _emscripten_set_keydown_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);Module["_emscripten_set_keydown_callback_on_thread"]=_emscripten_set_keydown_callback_on_thread;_emscripten_set_keydown_callback_on_thread.sig="ippipp";var _emscripten_set_keyup_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread);Module["_emscripten_set_keyup_callback_on_thread"]=_emscripten_set_keyup_callback_on_thread;_emscripten_set_keyup_callback_on_thread.sig="ippipp";var getBoundingClientRect=e=>specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0};Module["getBoundingClientRect"]=getBoundingClientRect;var fillMouseEventData=(eventStruct,e,target)=>{HEAPF64[eventStruct>>3]=e.timeStamp;var idx=eventStruct>>2;HEAP32[idx+2]=e.screenX;HEAP32[idx+3]=e.screenY;HEAP32[idx+4]=e.clientX;HEAP32[idx+5]=e.clientY;HEAP32[idx+6]=e.ctrlKey;HEAP32[idx+7]=e.shiftKey;HEAP32[idx+8]=e.altKey;HEAP32[idx+9]=e.metaKey;HEAP16[idx*2+20]=e.button;HEAP16[idx*2+21]=e.buttons;HEAP32[idx+11]=e["movementX"];HEAP32[idx+12]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+13]=e.clientX-(rect.left|0);HEAP32[idx+14]=e.clientY-(rect.top|0)};Module["fillMouseEventData"]=fillMouseEventData;var registerMouseEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=findEventTarget(target);var mouseEventHandlerFunc=(e=event)=>{fillMouseEventData(JSEvents.mouseEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};Module["registerMouseEventCallback"]=registerMouseEventCallback;var _emscripten_set_click_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);Module["_emscripten_set_click_callback_on_thread"]=_emscripten_set_click_callback_on_thread;_emscripten_set_click_callback_on_thread.sig="ippipp";var _emscripten_set_mousedown_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread);Module["_emscripten_set_mousedown_callback_on_thread"]=_emscripten_set_mousedown_callback_on_thread;_emscripten_set_mousedown_callback_on_thread.sig="ippipp";var _emscripten_set_mouseup_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread);Module["_emscripten_set_mouseup_callback_on_thread"]=_emscripten_set_mouseup_callback_on_thread;_emscripten_set_mouseup_callback_on_thread.sig="ippipp";var _emscripten_set_dblclick_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,7,"dblclick",targetThread);Module["_emscripten_set_dblclick_callback_on_thread"]=_emscripten_set_dblclick_callback_on_thread;_emscripten_set_dblclick_callback_on_thread.sig="ippipp";var _emscripten_set_mousemove_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread);Module["_emscripten_set_mousemove_callback_on_thread"]=_emscripten_set_mousemove_callback_on_thread;_emscripten_set_mousemove_callback_on_thread.sig="ippipp";var _emscripten_set_mouseenter_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,33,"mouseenter",targetThread);Module["_emscripten_set_mouseenter_callback_on_thread"]=_emscripten_set_mouseenter_callback_on_thread;_emscripten_set_mouseenter_callback_on_thread.sig="ippipp";var _emscripten_set_mouseleave_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,34,"mouseleave",targetThread);Module["_emscripten_set_mouseleave_callback_on_thread"]=_emscripten_set_mouseleave_callback_on_thread;_emscripten_set_mouseleave_callback_on_thread.sig="ippipp";var _emscripten_set_mouseover_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,35,"mouseover",targetThread);Module["_emscripten_set_mouseover_callback_on_thread"]=_emscripten_set_mouseover_callback_on_thread;_emscripten_set_mouseover_callback_on_thread.sig="ippipp";var _emscripten_set_mouseout_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,36,"mouseout",targetThread);Module["_emscripten_set_mouseout_callback_on_thread"]=_emscripten_set_mouseout_callback_on_thread;_emscripten_set_mouseout_callback_on_thread.sig="ippipp";var _emscripten_get_mouse_status=mouseState=>{if(!JSEvents.mouseEvent)return-7;HEAP8.set(HEAP8.subarray(JSEvents.mouseEvent,JSEvents.mouseEvent+72),mouseState);return 0};Module["_emscripten_get_mouse_status"]=_emscripten_get_mouse_status;_emscripten_get_mouse_status.sig="ip";var registerWheelEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.wheelEvent)JSEvents.wheelEvent=_malloc(104);var wheelHandlerFunc=(e=event)=>{var wheelEvent=JSEvents.wheelEvent;fillMouseEventData(wheelEvent,e,target);HEAPF64[wheelEvent+72>>3]=e["deltaX"];HEAPF64[wheelEvent+80>>3]=e["deltaY"];HEAPF64[wheelEvent+88>>3]=e["deltaZ"];HEAP32[wheelEvent+96>>2]=e["deltaMode"];if(getWasmTableEntry(callbackfunc)(eventTypeId,wheelEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:wheelHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};Module["registerWheelEventCallback"]=registerWheelEventCallback;var _emscripten_set_wheel_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{target=findEventTarget(target);if(!target)return-4;if(typeof target.onwheel!="undefined"){return registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread)}else{return-1}};Module["_emscripten_set_wheel_callback_on_thread"]=_emscripten_set_wheel_callback_on_thread;_emscripten_set_wheel_callback_on_thread.sig="ippipp";var registerUiEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.uiEvent)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;HEAP32[uiEvent+4>>2]=b.clientWidth;HEAP32[uiEvent+8>>2]=b.clientHeight;HEAP32[uiEvent+12>>2]=innerWidth;HEAP32[uiEvent+16>>2]=innerHeight;HEAP32[uiEvent+20>>2]=outerWidth;HEAP32[uiEvent+24>>2]=outerHeight;HEAP32[uiEvent+28>>2]=pageXOffset|0;HEAP32[uiEvent+32>>2]=pageYOffset|0;if(getWasmTableEntry(callbackfunc)(eventTypeId,uiEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:uiEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};Module["registerUiEventCallback"]=registerUiEventCallback;var _emscripten_set_resize_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerUiEventCallback(target,userData,useCapture,callbackfunc,10,"resize",targetThread);Module["_emscripten_set_resize_callback_on_thread"]=_emscripten_set_resize_callback_on_thread;_emscripten_set_resize_callback_on_thread.sig="ippipp";var _emscripten_set_scroll_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerUiEventCallback(target,userData,useCapture,callbackfunc,11,"scroll",targetThread);Module["_emscripten_set_scroll_callback_on_thread"]=_emscripten_set_scroll_callback_on_thread;_emscripten_set_scroll_callback_on_thread.sig="ippipp";var registerFocusEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.focusEvent)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(getWasmTableEntry(callbackfunc)(eventTypeId,focusEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:focusEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};Module["registerFocusEventCallback"]=registerFocusEventCallback;var _emscripten_set_blur_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread);Module["_emscripten_set_blur_callback_on_thread"]=_emscripten_set_blur_callback_on_thread;_emscripten_set_blur_callback_on_thread.sig="ippipp";var _emscripten_set_focus_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread);Module["_emscripten_set_focus_callback_on_thread"]=_emscripten_set_focus_callback_on_thread;_emscripten_set_focus_callback_on_thread.sig="ippipp";var _emscripten_set_focusin_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerFocusEventCallback(target,userData,useCapture,callbackfunc,14,"focusin",targetThread);Module["_emscripten_set_focusin_callback_on_thread"]=_emscripten_set_focusin_callback_on_thread;_emscripten_set_focusin_callback_on_thread.sig="ippipp";var _emscripten_set_focusout_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerFocusEventCallback(target,userData,useCapture,callbackfunc,15,"focusout",targetThread);Module["_emscripten_set_focusout_callback_on_thread"]=_emscripten_set_focusout_callback_on_thread;_emscripten_set_focusout_callback_on_thread.sig="ippipp";var fillDeviceOrientationEventData=(eventStruct,e,target)=>{HEAPF64[eventStruct>>3]=e.alpha;HEAPF64[eventStruct+8>>3]=e.beta;HEAPF64[eventStruct+16>>3]=e.gamma;HEAP32[eventStruct+24>>2]=e.absolute};Module["fillDeviceOrientationEventData"]=fillDeviceOrientationEventData;var registerDeviceOrientationEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.deviceOrientationEvent)JSEvents.deviceOrientationEvent=_malloc(32);var deviceOrientationEventHandlerFunc=(e=event)=>{fillDeviceOrientationEventData(JSEvents.deviceOrientationEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.deviceOrientationEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:deviceOrientationEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};Module["registerDeviceOrientationEventCallback"]=registerDeviceOrientationEventCallback;var _emscripten_set_deviceorientation_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>registerDeviceOrientationEventCallback(2,userData,useCapture,callbackfunc,16,"deviceorientation",targetThread);Module["_emscripten_set_deviceorientation_callback_on_thread"]=_emscripten_set_deviceorientation_callback_on_thread;_emscripten_set_deviceorientation_callback_on_thread.sig="ipipp";var _emscripten_get_deviceorientation_status=orientationState=>{if(!JSEvents.deviceOrientationEvent)return-7;HEAP32.set(HEAP32.subarray(JSEvents.deviceOrientationEvent,32),orientationState);return 0};Module["_emscripten_get_deviceorientation_status"]=_emscripten_get_deviceorientation_status;_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]=a["x"];HEAPF64[eventStruct+8>>3]=a["y"];HEAPF64[eventStruct+16>>3]=a["z"];HEAPF64[eventStruct+24>>3]=ag["x"];HEAPF64[eventStruct+32>>3]=ag["y"];HEAPF64[eventStruct+40>>3]=ag["z"];HEAPF64[eventStruct+48>>3]=rr["alpha"];HEAPF64[eventStruct+56>>3]=rr["beta"];HEAPF64[eventStruct+64>>3]=rr["gamma"]};Module["fillDeviceMotionEventData"]=fillDeviceMotionEventData;var registerDeviceMotionEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.deviceMotionEvent)JSEvents.deviceMotionEvent=_malloc(80);var deviceMotionEventHandlerFunc=(e=event)=>{fillDeviceMotionEventData(JSEvents.deviceMotionEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.deviceMotionEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:deviceMotionEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};Module["registerDeviceMotionEventCallback"]=registerDeviceMotionEventCallback;var _emscripten_set_devicemotion_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>registerDeviceMotionEventCallback(2,userData,useCapture,callbackfunc,17,"devicemotion",targetThread);Module["_emscripten_set_devicemotion_callback_on_thread"]=_emscripten_set_devicemotion_callback_on_thread;_emscripten_set_devicemotion_callback_on_thread.sig="ipipp";var _emscripten_get_devicemotion_status=motionState=>{if(!JSEvents.deviceMotionEvent)return-7;HEAP32.set(HEAP32.subarray(JSEvents.deviceMotionEvent,80),motionState);return 0};Module["_emscripten_get_devicemotion_status"]=_emscripten_get_devicemotion_status;_emscripten_get_devicemotion_status.sig="ip";var screenOrientation=()=>{if(!window.screen)return undefined;return screen.orientation||screen["mozOrientation"]||screen["webkitOrientation"]};Module["screenOrientation"]=screenOrientation;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]=orientationIndex;HEAP32[eventStruct+4>>2]=orientationAngle};Module["fillOrientationChangeEventData"]=fillOrientationChangeEventData;var registerOrientationChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.orientationChangeEvent)JSEvents.orientationChangeEvent=_malloc(8);var orientationChangeEventHandlerFunc=(e=event)=>{var orientationChangeEvent=JSEvents.orientationChangeEvent;fillOrientationChangeEventData(orientationChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,orientationChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:orientationChangeEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};Module["registerOrientationChangeEventCallback"]=registerOrientationChangeEventCallback;var _emscripten_set_orientationchange_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(!window.screen||!screen.orientation)return-1;return registerOrientationChangeEventCallback(screen.orientation,userData,useCapture,callbackfunc,18,"change",targetThread)};Module["_emscripten_set_orientationchange_callback_on_thread"]=_emscripten_set_orientationchange_callback_on_thread;_emscripten_set_orientationchange_callback_on_thread.sig="ipipp";var _emscripten_get_orientation_status=orientationChangeEvent=>{if(!screenOrientation()&&typeof orientation=="undefined")return-1;fillOrientationChangeEventData(orientationChangeEvent);return 0};Module["_emscripten_get_orientation_status"]=_emscripten_get_orientation_status;_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};Module["_emscripten_lock_orientation"]=_emscripten_lock_orientation;_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};Module["_emscripten_unlock_orientation"]=_emscripten_unlock_orientation;_emscripten_unlock_orientation.sig="i";var fillFullscreenChangeEventData=eventStruct=>{var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement?.id||"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}};Module["fillFullscreenChangeEventData"]=fillFullscreenChangeEventData;var registerFullscreenChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=(e=event)=>{var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};Module["registerFullscreenChangeEventCallback"]=registerFullscreenChangeEventCallback;var _emscripten_set_fullscreenchange_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{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)};Module["_emscripten_set_fullscreenchange_callback_on_thread"]=_emscripten_set_fullscreenchange_callback_on_thread;_emscripten_set_fullscreenchange_callback_on_thread.sig="ippipp";var _emscripten_get_fullscreen_status=fullscreenStatus=>{if(!JSEvents.fullscreenEnabled())return-1;fillFullscreenChangeEventData(fullscreenStatus);return 0};Module["_emscripten_get_fullscreen_status"]=_emscripten_get_fullscreen_status;_emscripten_get_fullscreen_status.sig="ip";var _emscripten_get_canvas_element_size=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(!canvas)return-4;HEAP32[width>>2]=canvas.width;HEAP32[height>>2]=canvas.height};Module["_emscripten_get_canvas_element_size"]=_emscripten_get_canvas_element_size;_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],HEAP32[h>>2]];stackRestore(sp);return size};Module["getCanvasElementSize"]=getCanvasElementSize;var _emscripten_set_canvas_element_size=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0};Module["_emscripten_set_canvas_element_size"]=_emscripten_set_canvas_element_size;_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)}};Module["setCanvasElementSize"]=setCanvasElementSize;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){getWasmTableEntry(currentFullscreenStrategy.canvasResizedCallback)(37,0,currentFullscreenStrategy.canvasResizedCallbackUserData)}}}document.addEventListener("fullscreenchange",restoreOldStyle);document.addEventListener("webkitfullscreenchange",restoreOldStyle);return restoreOldStyle};Module["registerRestoreOldStyle"]=registerRestoreOldStyle;var setLetterbox=(element,topBottom,leftRight)=>{element.style.paddingLeft=element.style.paddingRight=leftRight+"px";element.style.paddingTop=element.style.paddingBottom=topBottom+"px"};Module["setLetterbox"]=setLetterbox;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){getWasmTableEntry(strategy.canvasResizedCallback)(37,0,strategy.canvasResizedCallbackUserData)}return 0};Module["JSEvents_requestFullscreen"]=JSEvents_requestFullscreen;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 i=0;i{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){getWasmTableEntry(currentFullscreenStrategy.canvasResizedCallback)(37,0,currentFullscreenStrategy.canvasResizedCallbackUserData)}};Module["softFullscreenResizeWebGLRenderTarget"]=softFullscreenResizeWebGLRenderTarget;var doRequestFullscreen=(target,strategy)=>{if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;if(!target.requestFullscreen&&!target.webkitRequestFullscreen){return-3}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(strategy.deferUntilInEventHandler){JSEvents.deferCall(JSEvents_requestFullscreen,1,[target,strategy]);return 1}return-2}return JSEvents_requestFullscreen(target,strategy)};Module["doRequestFullscreen"]=doRequestFullscreen;var _emscripten_request_fullscreen=(target,deferUntilInEventHandler)=>{var strategy={scaleMode:0,canvasResolutionScaleMode:0,filteringMode:0,deferUntilInEventHandler:deferUntilInEventHandler,canvasResizedCallbackTargetThread:2};return doRequestFullscreen(target,strategy)};Module["_emscripten_request_fullscreen"]=_emscripten_request_fullscreen;_emscripten_request_fullscreen.sig="ipi";var _emscripten_request_fullscreen_strategy=(target,deferUntilInEventHandler,fullscreenStrategy)=>{var strategy={scaleMode:HEAP32[fullscreenStrategy>>2],canvasResolutionScaleMode:HEAP32[fullscreenStrategy+4>>2],filteringMode:HEAP32[fullscreenStrategy+8>>2],deferUntilInEventHandler:deferUntilInEventHandler,canvasResizedCallback:HEAP32[fullscreenStrategy+12>>2],canvasResizedCallbackUserData:HEAP32[fullscreenStrategy+16>>2]};return doRequestFullscreen(target,strategy)};Module["_emscripten_request_fullscreen_strategy"]=_emscripten_request_fullscreen_strategy;_emscripten_request_fullscreen_strategy.sig="ipip";var _emscripten_enter_soft_fullscreen=(target,fullscreenStrategy)=>{target=findEventTarget(target);if(!target)return-4;var strategy={scaleMode:HEAP32[fullscreenStrategy>>2],canvasResolutionScaleMode:HEAP32[fullscreenStrategy+4>>2],filteringMode:HEAP32[fullscreenStrategy+8>>2],canvasResizedCallback:HEAP32[fullscreenStrategy+12>>2],canvasResizedCallbackUserData:HEAP32[fullscreenStrategy+16>>2],target: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){getWasmTableEntry(strategy.canvasResizedCallback)(37,0,strategy.canvasResizedCallbackUserData)}currentFullscreenStrategy=0}restoreOldWindowedStyle=restoreWindowedState;currentFullscreenStrategy=strategy;addEventListener("resize",softFullscreenResizeWebGLRenderTarget);if(strategy.canvasResizedCallback){getWasmTableEntry(strategy.canvasResizedCallback)(37,0,strategy.canvasResizedCallbackUserData)}return 0};Module["_emscripten_enter_soft_fullscreen"]=_emscripten_enter_soft_fullscreen;_emscripten_enter_soft_fullscreen.sig="ipp";var _emscripten_exit_soft_fullscreen=()=>{restoreOldWindowedStyle?.();restoreOldWindowedStyle=null;return 0};Module["_emscripten_exit_soft_fullscreen"]=_emscripten_exit_soft_fullscreen;_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};Module["_emscripten_exit_fullscreen"]=_emscripten_exit_fullscreen;_emscripten_exit_fullscreen.sig="i";var fillPointerlockChangeEventData=eventStruct=>{var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement?.id||"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)};Module["fillPointerlockChangeEventData"]=fillPointerlockChangeEventData;var registerPointerlockChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.pointerlockChangeEvent)JSEvents.pointerlockChangeEvent=_malloc(260);var pointerlockChangeEventHandlerFunc=(e=event)=>{var pointerlockChangeEvent=JSEvents.pointerlockChangeEvent;fillPointerlockChangeEventData(pointerlockChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,pointerlockChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:pointerlockChangeEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};Module["registerPointerlockChangeEventCallback"]=registerPointerlockChangeEventCallback;var _emscripten_set_pointerlockchange_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{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)};Module["_emscripten_set_pointerlockchange_callback_on_thread"]=_emscripten_set_pointerlockchange_callback_on_thread;_emscripten_set_pointerlockchange_callback_on_thread.sig="ippipp";var registerPointerlockErrorEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var pointerlockErrorEventHandlerFunc=(e=event)=>{if(getWasmTableEntry(callbackfunc)(eventTypeId,0,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:pointerlockErrorEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};Module["registerPointerlockErrorEventCallback"]=registerPointerlockErrorEventCallback;var _emscripten_set_pointerlockerror_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{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)};Module["_emscripten_set_pointerlockerror_callback_on_thread"]=_emscripten_set_pointerlockerror_callback_on_thread;_emscripten_set_pointerlockerror_callback_on_thread.sig="ippipp";var _emscripten_get_pointerlock_status=pointerlockStatus=>{if(pointerlockStatus)fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0};Module["_emscripten_get_pointerlock_status"]=_emscripten_get_pointerlock_status;_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};Module["requestPointerLock"]=requestPointerLock;var _emscripten_request_pointerlock=(target,deferUntilInEventHandler)=>{target=findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(requestPointerLock,2,[target]);return 1}return-2}return requestPointerLock(target)};Module["_emscripten_request_pointerlock"]=_emscripten_request_pointerlock;_emscripten_request_pointerlock.sig="ipi";var _emscripten_exit_pointerlock=()=>{JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else{return-1}return 0};Module["_emscripten_exit_pointerlock"]=_emscripten_exit_pointerlock;_emscripten_exit_pointerlock.sig="i";var _emscripten_vibrate=msecs=>{if(!navigator.vibrate)return-1;navigator.vibrate(msecs);return 0};Module["_emscripten_vibrate"]=_emscripten_vibrate;_emscripten_vibrate.sig="ii";var _emscripten_vibrate_pattern=(msecsArray,numEntries)=>{if(!navigator.vibrate)return-1;var vibrateList=[];for(var i=0;i>2];vibrateList.push(msecs)}navigator.vibrate(vibrateList);return 0};Module["_emscripten_vibrate_pattern"]=_emscripten_vibrate_pattern;_emscripten_vibrate_pattern.sig="ipi";var fillVisibilityChangeEventData=eventStruct=>{var visibilityStates=["hidden","visible","prerender","unloaded"];var visibilityState=visibilityStates.indexOf(document.visibilityState);HEAP32[eventStruct>>2]=document.hidden;HEAP32[eventStruct+4>>2]=visibilityState};Module["fillVisibilityChangeEventData"]=fillVisibilityChangeEventData;var registerVisibilityChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.visibilityChangeEvent)JSEvents.visibilityChangeEvent=_malloc(8);var visibilityChangeEventHandlerFunc=(e=event)=>{var visibilityChangeEvent=JSEvents.visibilityChangeEvent;fillVisibilityChangeEventData(visibilityChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,visibilityChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:visibilityChangeEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};Module["registerVisibilityChangeEventCallback"]=registerVisibilityChangeEventCallback;var _emscripten_set_visibilitychange_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(!specialHTMLTargets[1]){return-4}return registerVisibilityChangeEventCallback(specialHTMLTargets[1],userData,useCapture,callbackfunc,21,"visibilitychange",targetThread)};Module["_emscripten_set_visibilitychange_callback_on_thread"]=_emscripten_set_visibilitychange_callback_on_thread;_emscripten_set_visibilitychange_callback_on_thread.sig="ipipp";var _emscripten_get_visibility_status=visibilityStatus=>{if(typeof document.visibilityState=="undefined"&&typeof document.hidden=="undefined"){return-1}fillVisibilityChangeEventData(visibilityStatus);return 0};Module["_emscripten_get_visibility_status"]=_emscripten_get_visibility_status;_emscripten_get_visibility_status.sig="ip";var registerTouchEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1696);target=findEventTarget(target);var touchEventHandlerFunc=e=>{var t,touches={},et=e.touches;for(var i=0;i>3]=e.timeStamp;var idx=touchEvent>>2;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;idx+=7;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){t=touches[i];HEAP32[idx+0]=t.identifier;HEAP32[idx+1]=t.screenX;HEAP32[idx+2]=t.screenY;HEAP32[idx+3]=t.clientX;HEAP32[idx+4]=t.clientY;HEAP32[idx+5]=t.pageX;HEAP32[idx+6]=t.pageY;HEAP32[idx+7]=t.isChanged;HEAP32[idx+8]=t.onTarget;HEAP32[idx+9]=t.clientX-(targetRect.left|0);HEAP32[idx+10]=t.clientY-(targetRect.top|0);idx+=13;if(++numTouches>31){break}}HEAP32[touchEvent+8>>2]=numTouches;if(getWasmTableEntry(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};Module["registerTouchEventCallback"]=registerTouchEventCallback;var _emscripten_set_touchstart_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);Module["_emscripten_set_touchstart_callback_on_thread"]=_emscripten_set_touchstart_callback_on_thread;_emscripten_set_touchstart_callback_on_thread.sig="ippipp";var _emscripten_set_touchend_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);Module["_emscripten_set_touchend_callback_on_thread"]=_emscripten_set_touchend_callback_on_thread;_emscripten_set_touchend_callback_on_thread.sig="ippipp";var _emscripten_set_touchmove_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);Module["_emscripten_set_touchmove_callback_on_thread"]=_emscripten_set_touchmove_callback_on_thread;_emscripten_set_touchmove_callback_on_thread.sig="ippipp";var _emscripten_set_touchcancel_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);Module["_emscripten_set_touchcancel_callback_on_thread"]=_emscripten_set_touchcancel_callback_on_thread;_emscripten_set_touchcancel_callback_on_thread.sig="ippipp";var fillGamepadEventData=(eventStruct,e)=>{HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)};Module["fillGamepadEventData"]=fillGamepadEventData;var registerGamepadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=(e=event)=>{var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(getWasmTableEntry(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};Module["registerGamepadEventCallback"]=registerGamepadEventCallback;var _emscripten_sample_gamepad_data=()=>{try{if(navigator.getGamepads)return(JSEvents.lastGamepadState=navigator.getGamepads())?0:-1}catch(e){navigator.getGamepads=null}return-1};Module["_emscripten_sample_gamepad_data"]=_emscripten_sample_gamepad_data;_emscripten_sample_gamepad_data.sig="i";var _emscripten_set_gamepadconnected_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread)};Module["_emscripten_set_gamepadconnected_callback_on_thread"]=_emscripten_set_gamepadconnected_callback_on_thread;_emscripten_set_gamepadconnected_callback_on_thread.sig="ipipp";var _emscripten_set_gamepaddisconnected_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread)};Module["_emscripten_set_gamepaddisconnected_callback_on_thread"]=_emscripten_set_gamepaddisconnected_callback_on_thread;_emscripten_set_gamepaddisconnected_callback_on_thread.sig="ipipp";var _emscripten_get_num_gamepads=()=>JSEvents.lastGamepadState.length;Module["_emscripten_get_num_gamepads"]=_emscripten_get_num_gamepads;_emscripten_get_num_gamepads.sig="i";var _emscripten_get_gamepad_status=(index,gamepadState)=>{if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0};Module["_emscripten_get_gamepad_status"]=_emscripten_get_gamepad_status;_emscripten_get_gamepad_status.sig="iip";var registerBeforeUnloadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString)=>{var beforeUnloadEventHandlerFunc=(e=event)=>{var confirmationMessage=getWasmTableEntry(callbackfunc)(eventTypeId,0,userData);if(confirmationMessage){confirmationMessage=UTF8ToString(confirmationMessage)}if(confirmationMessage){e.preventDefault();e.returnValue=confirmationMessage;return confirmationMessage}};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:beforeUnloadEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};Module["registerBeforeUnloadEventCallback"]=registerBeforeUnloadEventCallback;var _emscripten_set_beforeunload_callback_on_thread=(userData,callbackfunc,targetThread)=>{if(typeof onbeforeunload=="undefined")return-1;if(targetThread!==1)return-5;return registerBeforeUnloadEventCallback(2,userData,true,callbackfunc,28,"beforeunload")};Module["_emscripten_set_beforeunload_callback_on_thread"]=_emscripten_set_beforeunload_callback_on_thread;_emscripten_set_beforeunload_callback_on_thread.sig="ippp";var fillBatteryEventData=(eventStruct,e)=>{HEAPF64[eventStruct>>3]=e.chargingTime;HEAPF64[eventStruct+8>>3]=e.dischargingTime;HEAPF64[eventStruct+16>>3]=e.level;HEAP32[eventStruct+24>>2]=e.charging};Module["fillBatteryEventData"]=fillBatteryEventData;var battery=()=>navigator.battery||navigator.mozBattery||navigator.webkitBattery;Module["battery"]=battery;var registerBatteryEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.batteryEvent)JSEvents.batteryEvent=_malloc(32);var batteryEventHandlerFunc=(e=event)=>{var batteryEvent=JSEvents.batteryEvent;fillBatteryEventData(batteryEvent,battery());if(getWasmTableEntry(callbackfunc)(eventTypeId,batteryEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:batteryEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};Module["registerBatteryEventCallback"]=registerBatteryEventCallback;var _emscripten_set_batterychargingchange_callback_on_thread=(userData,callbackfunc,targetThread)=>{if(!battery())return-1;return registerBatteryEventCallback(battery(),userData,true,callbackfunc,29,"chargingchange",targetThread)};Module["_emscripten_set_batterychargingchange_callback_on_thread"]=_emscripten_set_batterychargingchange_callback_on_thread;_emscripten_set_batterychargingchange_callback_on_thread.sig="ippp";var _emscripten_set_batterylevelchange_callback_on_thread=(userData,callbackfunc,targetThread)=>{if(!battery())return-1;return registerBatteryEventCallback(battery(),userData,true,callbackfunc,30,"levelchange",targetThread)};Module["_emscripten_set_batterylevelchange_callback_on_thread"]=_emscripten_set_batterylevelchange_callback_on_thread;_emscripten_set_batterylevelchange_callback_on_thread.sig="ippp";var _emscripten_get_battery_status=batteryState=>{if(!battery())return-1;fillBatteryEventData(batteryState,battery());return 0};Module["_emscripten_get_battery_status"]=_emscripten_get_battery_status;_emscripten_get_battery_status.sig="ip";var __emscripten_set_offscreencanvas_size=(target,width,height)=>-1;Module["__emscripten_set_offscreencanvas_size"]=__emscripten_set_offscreencanvas_size;__emscripten_set_offscreencanvas_size.sig="ipii";var _emscripten_set_element_css_size=(target,width,height)=>{target=findEventTarget(target);if(!target)return-4;target.style.width=width+"px";target.style.height=height+"px";return 0};Module["_emscripten_set_element_css_size"]=_emscripten_set_element_css_size;_emscripten_set_element_css_size.sig="ipdd";var _emscripten_get_element_css_size=(target,width,height)=>{target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0};Module["_emscripten_get_element_css_size"]=_emscripten_get_element_css_size;_emscripten_get_element_css_size.sig="ippp";var _emscripten_html5_remove_all_event_listeners=()=>JSEvents.removeAllEventListeners();Module["_emscripten_html5_remove_all_event_listeners"]=_emscripten_html5_remove_all_event_listeners;_emscripten_html5_remove_all_event_listeners.sig="v";var _emscripten_request_animation_frame=(cb,userData)=>requestAnimationFrame(timeStamp=>getWasmTableEntry(cb)(timeStamp,userData));Module["_emscripten_request_animation_frame"]=_emscripten_request_animation_frame;_emscripten_request_animation_frame.sig="ipp";var _emscripten_cancel_animation_frame=id=>cancelAnimationFrame(id);Module["_emscripten_cancel_animation_frame"]=_emscripten_cancel_animation_frame;_emscripten_cancel_animation_frame.sig="vi";var _emscripten_request_animation_frame_loop=(cb,userData)=>{function tick(timeStamp){if(getWasmTableEntry(cb)(timeStamp,userData)){requestAnimationFrame(tick)}}return requestAnimationFrame(tick)};Module["_emscripten_request_animation_frame_loop"]=_emscripten_request_animation_frame_loop;_emscripten_request_animation_frame_loop.sig="vpp";var _emscripten_performance_now=()=>performance.now();Module["_emscripten_performance_now"]=_emscripten_performance_now;_emscripten_performance_now.sig="d";var _emscripten_get_device_pixel_ratio=()=>typeof devicePixelRatio=="number"&&devicePixelRatio||1;Module["_emscripten_get_device_pixel_ratio"]=_emscripten_get_device_pixel_ratio;_emscripten_get_device_pixel_ratio.sig="d";function _emscripten_get_callstack(flags,str,maxbytes){var callstack=getCallstack(flags);if(!str||maxbytes<=0){return lengthBytesUTF8(callstack)+1}var bytesWrittenExcludingNull=stringToUTF8(callstack,str,maxbytes);return bytesWrittenExcludingNull+1}Module["_emscripten_get_callstack"]=_emscripten_get_callstack;_emscripten_get_callstack.sig="iipi";var convertFrameToPC=frame=>{abort("Cannot use convertFrameToPC (needed by __builtin_return_address) without -sUSE_OFFSET_CONVERTER");return 0};Module["convertFrameToPC"]=convertFrameToPC;var _emscripten_return_address=level=>{var callstack=jsStackTrace().split("\n");if(callstack[0]=="Error"){callstack.shift()}var caller=callstack[level+3];return convertFrameToPC(caller)};Module["_emscripten_return_address"]=_emscripten_return_address;_emscripten_return_address.sig="pi";var UNWIND_CACHE={};Module["UNWIND_CACHE"]=UNWIND_CACHE;var saveInUnwindCache=callstack=>{callstack.forEach(frame=>{var pc=convertFrameToPC(frame);if(pc){UNWIND_CACHE[pc]=frame}})};Module["saveInUnwindCache"]=saveInUnwindCache;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}Module["_emscripten_stack_snapshot"]=_emscripten_stack_snapshot;_emscripten_stack_snapshot.sig="p";var _emscripten_stack_unwind_buffer=(addr,buffer,count)=>{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]=convertFrameToPC(stack[i+offset])}return i};Module["_emscripten_stack_unwind_buffer"]=_emscripten_stack_unwind_buffer;_emscripten_stack_unwind_buffer.sig="ippi";var _emscripten_pc_get_function=pc=>{abort("Cannot use emscripten_pc_get_function without -sUSE_OFFSET_CONVERTER");return 0};Module["_emscripten_pc_get_function"]=_emscripten_pc_get_function;_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};Module["convertPCtoSourceLocation"]=convertPCtoSourceLocation;var _emscripten_pc_get_file=pc=>{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};Module["_emscripten_pc_get_file"]=_emscripten_pc_get_file;_emscripten_pc_get_file.sig="pp";var _emscripten_pc_get_line=pc=>{var result=convertPCtoSourceLocation(pc);return result?result.line:0};Module["_emscripten_pc_get_line"]=_emscripten_pc_get_line;_emscripten_pc_get_line.sig="ip";var _emscripten_pc_get_column=pc=>{var result=convertPCtoSourceLocation(pc);return result?result.column||0:0};Module["_emscripten_pc_get_column"]=_emscripten_pc_get_column;_emscripten_pc_get_column.sig="ip";function _random_get(buf,buf_len){try{_getentropy(buf,buf_len);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}Module["_random_get"]=_random_get;_random_get.sig="ipp";var checkWasiClock=clock_id=>clock_id==0||clock_id==1||clock_id==2||clock_id==3;Module["checkWasiClock"]=checkWasiClock;function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);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]=nsec>>>0;HEAP32[ptime+4>>2]=nsec/Math.pow(2,32)>>>0;return 0}Module["_clock_time_get"]=_clock_time_get;_clock_time_get.sig="iijp";var _clock_res_get=(clk_id,pres)=>{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]=nsec>>>0;HEAP32[pres+4>>2]=nsec/Math.pow(2,32)>>>0;return 0};Module["_clock_res_get"]=_clock_res_get;_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)};Module["wasiRightsToMuslOFlags"]=wasiRightsToMuslOFlags;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};Module["wasiOFlagsToMuslOFlags"]=wasiOFlagsToMuslOFlags;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{throw"unwind"};Module["_emscripten_unwind_to_js_event_loop"]=_emscripten_unwind_to_js_event_loop;_emscripten_unwind_to_js_event_loop.sig="v";var safeSetTimeout=(func,timeout)=>setTimeout(()=>{callUserCallback(func)},timeout);Module["safeSetTimeout"]=safeSetTimeout;var setImmediateWrapped=func=>{setImmediateWrapped.mapping||=[];var id=setImmediateWrapped.mapping.length;setImmediateWrapped.mapping[id]=setImmediate(()=>{setImmediateWrapped.mapping[id]=undefined;func()});return id};Module["setImmediateWrapped"]=setImmediateWrapped;var clearImmediateWrapped=id=>{clearImmediate(setImmediateWrapped.mapping[id]);setImmediateWrapped.mapping[id]=undefined};Module["clearImmediateWrapped"]=clearImmediateWrapped;var polyfillSetImmediate=()=>{};Module["polyfillSetImmediate"]=polyfillSetImmediate;var _emscripten_set_immediate=(cb,userData)=>emSetImmediate(()=>{callUserCallback(()=>getWasmTableEntry(cb)(userData))});Module["_emscripten_set_immediate"]=_emscripten_set_immediate;_emscripten_set_immediate.sig="ipp";var _emscripten_clear_immediate=id=>{emClearImmediate(id)};Module["_emscripten_clear_immediate"]=_emscripten_clear_immediate;_emscripten_clear_immediate.sig="vi";var _emscripten_set_immediate_loop=(cb,userData)=>{function tick(){callUserCallback(()=>{if(getWasmTableEntry(cb)(userData)){emSetImmediate(tick)}else{}})}emSetImmediate(tick)};Module["_emscripten_set_immediate_loop"]=_emscripten_set_immediate_loop;_emscripten_set_immediate_loop.sig="vpp";var _emscripten_set_timeout=(cb,msecs,userData)=>safeSetTimeout(()=>getWasmTableEntry(cb)(userData),msecs);Module["_emscripten_set_timeout"]=_emscripten_set_timeout;_emscripten_set_timeout.sig="ipdp";var _emscripten_clear_timeout=clearTimeout;Module["_emscripten_clear_timeout"]=_emscripten_clear_timeout;_emscripten_clear_timeout.sig="vi";var _emscripten_set_timeout_loop=(cb,msecs,userData)=>{function tick(){var t=_emscripten_get_now();var n=t+msecs;callUserCallback(()=>{if(getWasmTableEntry(cb)(t,userData)){setTimeout(tick,n-_emscripten_get_now())}})}return setTimeout(tick,0)};Module["_emscripten_set_timeout_loop"]=_emscripten_set_timeout_loop;_emscripten_set_timeout_loop.sig="vpdp";var _emscripten_set_interval=(cb,msecs,userData)=>setInterval(()=>{callUserCallback(()=>getWasmTableEntry(cb)(userData))},msecs);Module["_emscripten_set_interval"]=_emscripten_set_interval;_emscripten_set_interval.sig="ipdp";var _emscripten_clear_interval=id=>{clearInterval(id)};Module["_emscripten_clear_interval"]=_emscripten_clear_interval;_emscripten_clear_interval.sig="vi";var idsToPromises=(idBuf,size)=>{var promises=[];for(var i=0;i>2];promises[i]=getPromise(id)}return promises};Module["idsToPromises"]=idsToPromises;var makePromiseCallback=(callback,userData)=>value=>{var stack=stackSave();var resultPtr=stackAlloc(POINTER_SIZE);HEAPU32[resultPtr>>2]=0;try{var result=getWasmTableEntry(callback)(resultPtr,userData,value);var resultVal=HEAPU32[resultPtr>>2]}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}};Module["makePromiseCallback"]=makePromiseCallback;var _emscripten_promise_then=(id,onFulfilled,onRejected,userData)=>{var promise=getPromise(id);var newId=promiseMap.allocate({promise:promise.then(makePromiseCallback(onFulfilled,userData),makePromiseCallback(onRejected,userData))});return newId};Module["_emscripten_promise_then"]=_emscripten_promise_then;_emscripten_promise_then.sig="ppppp";var _emscripten_promise_all=(idBuf,resultBuf,size)=>{var promises=idsToPromises(idBuf,size);var id=promiseMap.allocate({promise:Promise.all(promises).then(results=>{if(resultBuf){for(var i=0;i>2]=result}}return resultBuf})});return id};Module["_emscripten_promise_all"]=_emscripten_promise_all;_emscripten_promise_all.sig="pppp";var setPromiseResult=(ptr,fulfill,value)=>{var result=fulfill?0:3;HEAP32[ptr>>2]=result;HEAPU32[ptr+4>>2]=value};Module["setPromiseResult"]=setPromiseResult;var _emscripten_promise_all_settled=(idBuf,resultBuf,size)=>{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{var promises=idsToPromises(idBuf,size);var id=promiseMap.allocate({promise:Promise.any(promises).catch(err=>{if(errorBuf){for(var i=0;i>2]=err.errors[i]}}throw errorBuf})});return id};Module["_emscripten_promise_any"]=_emscripten_promise_any;_emscripten_promise_any.sig="pppp";var _emscripten_promise_race=(idBuf,size)=>{var promises=idsToPromises(idBuf,size);var id=promiseMap.allocate({promise:Promise.race(promises)});return id};Module["_emscripten_promise_race"]=_emscripten_promise_race;_emscripten_promise_race.sig="ppp";var _emscripten_promise_await=(returnValuePtr,id)=>{abort("emscripten_promise_await is only available with ASYNCIFY")};Module["_emscripten_promise_await"]=_emscripten_promise_await;_emscripten_promise_await.sig="vpp";var ___cxa_find_matching_catch_4=(arg0,arg1)=>findMatchingCatch([arg0,arg1]);Module["___cxa_find_matching_catch_4"]=___cxa_find_matching_catch_4;___cxa_find_matching_catch_4.sig="ppp";var _llvm_eh_typeid_for=type=>type;Module["_llvm_eh_typeid_for"]=_llvm_eh_typeid_for;_llvm_eh_typeid_for.sig="vp";var ___cxa_get_exception_ptr=ptr=>{var rtn=new ExceptionInfo(ptr).get_exception_ptr();return rtn};Module["___cxa_get_exception_ptr"]=___cxa_get_exception_ptr;___cxa_get_exception_ptr.sig="pp";var ___cxa_call_unexpected=exception=>abort("Unexpected exception thrown, this is not properly supported - aborting");Module["___cxa_call_unexpected"]=___cxa_call_unexpected;___cxa_call_unexpected.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){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=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)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};Module["_emscripten_set_main_loop_timing"]=_emscripten_set_main_loop_timing;_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"}};Module["setMainLoop"]=setMainLoop;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);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},destroyContext(canvas,useWebGL,setInModule){},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){return Browser.requestAnimationFrame(()=>{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:x,y: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];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=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{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,()=>{if(onload)getWasmTableEntry(onload)(file)},()=>{if(onerror)getWasmTableEntry(onerror)(file)},true);return 0};Module["_emscripten_run_preload_plugins"]=_emscripten_run_preload_plugins;_emscripten_run_preload_plugins.sig="ippp";var Browser_asyncPrepareDataCounter=0;Module["Browser_asyncPrepareDataCounter"]=Browser_asyncPrepareDataCounter;var _emscripten_run_preload_plugins_data=(data,size,suffix,arg,onload,onerror)=>{var _suffix=UTF8ToString(suffix);var name="prepare_data_"+Browser_asyncPrepareDataCounter+++"."+_suffix;var cname=stringToNewUTF8(name);FS.createPreloadedFile("/",name,HEAPU8.subarray(data,data+size),true,true,()=>{if(onload)getWasmTableEntry(onload)(arg,cname)},()=>{if(onerror)getWasmTableEntry(onerror)(arg)},true)};Module["_emscripten_run_preload_plugins_data"]=_emscripten_run_preload_plugins_data;_emscripten_run_preload_plugins_data.sig="vpipppp";var _emscripten_async_run_script=(script,millis)=>{safeSetTimeout(()=>_emscripten_run_script(script),millis)};Module["_emscripten_async_run_script"]=_emscripten_async_run_script;_emscripten_async_run_script.sig="vpi";var _emscripten_async_load_script=(url,onload,onerror)=>{url=UTF8ToString(url);onload=getWasmTableEntry(onload);onerror=getWasmTableEntry(onerror);var loadDone=()=>{if(onload){if(runDependencies>0){dependenciesFulfilled=onload}else{onload()}}};var loadError=()=>{onerror?.()};if(ENVIRONMENT_IS_NODE){readAsync(url,data=>{eval(data);loadDone()},loadError,false);return}var script=document.createElement("script");script.onload=loadDone;script.onerror=loadError;script.src=url;document.body.appendChild(script)};Module["_emscripten_async_load_script"]=_emscripten_async_load_script;_emscripten_async_load_script.sig="vppp";var _emscripten_get_main_loop_timing=(mode,value)=>{if(mode)HEAP32[mode>>2]=Browser.mainLoop.timingMode;if(value)HEAP32[value>>2]=Browser.mainLoop.timingValue};Module["_emscripten_get_main_loop_timing"]=_emscripten_get_main_loop_timing;_emscripten_get_main_loop_timing.sig="vpp";var _emscripten_set_main_loop=(func,fps,simulateInfiniteLoop)=>{var browserIterationFunc=getWasmTableEntry(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)};Module["_emscripten_set_main_loop"]=_emscripten_set_main_loop;_emscripten_set_main_loop.sig="vpii";var _emscripten_set_main_loop_arg=(func,arg,fps,simulateInfiniteLoop)=>{var browserIterationFunc=()=>getWasmTableEntry(func)(arg);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg)};Module["_emscripten_set_main_loop_arg"]=_emscripten_set_main_loop_arg;_emscripten_set_main_loop_arg.sig="vppii";var _emscripten_cancel_main_loop=()=>{Browser.mainLoop.pause();Browser.mainLoop.func=null};Module["_emscripten_cancel_main_loop"]=_emscripten_cancel_main_loop;_emscripten_cancel_main_loop.sig="v";var _emscripten_pause_main_loop=()=>{Browser.mainLoop.pause()};Module["_emscripten_pause_main_loop"]=_emscripten_pause_main_loop;_emscripten_pause_main_loop.sig="v";var _emscripten_resume_main_loop=()=>{Browser.mainLoop.resume()};Module["_emscripten_resume_main_loop"]=_emscripten_resume_main_loop;_emscripten_resume_main_loop.sig="v";var __emscripten_push_main_loop_blocker=(func,arg,name)=>{Browser.mainLoop.queue.push({func:()=>{getWasmTableEntry(func)(arg)},name:UTF8ToString(name),counted:true});Browser.mainLoop.updateStatus()};Module["__emscripten_push_main_loop_blocker"]=__emscripten_push_main_loop_blocker;__emscripten_push_main_loop_blocker.sig="vppp";var __emscripten_push_uncounted_main_loop_blocker=(func,arg,name)=>{Browser.mainLoop.queue.push({func:()=>{getWasmTableEntry(func)(arg)},name:UTF8ToString(name),counted:false});Browser.mainLoop.updateStatus()};Module["__emscripten_push_uncounted_main_loop_blocker"]=__emscripten_push_uncounted_main_loop_blocker;__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()};Module["_emscripten_set_main_loop_expected_blockers"]=_emscripten_set_main_loop_expected_blockers;_emscripten_set_main_loop_expected_blockers.sig="vi";var _emscripten_async_call=(func,arg,millis)=>{function wrapper(){getWasmTableEntry(func)(arg)}if(millis>=0||ENVIRONMENT_IS_NODE){safeSetTimeout(wrapper,millis)}else{Browser.safeRequestAnimationFrame(wrapper)}};Module["_emscripten_async_call"]=_emscripten_async_call;_emscripten_async_call.sig="vppi";var _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};Module["_emscripten_get_window_title"]=_emscripten_get_window_title;_emscripten_get_window_title.sig="p";var _emscripten_set_window_title=title=>document.title=UTF8ToString(title);Module["_emscripten_set_window_title"]=_emscripten_set_window_title;_emscripten_set_window_title.sig="vp";var _emscripten_get_screen_size=(width,height)=>{HEAP32[width>>2]=screen.width;HEAP32[height>>2]=screen.height};Module["_emscripten_get_screen_size"]=_emscripten_get_screen_size;_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)};Module["_emscripten_set_canvas_size"]=_emscripten_set_canvas_size;_emscripten_set_canvas_size.sig="vii";var _emscripten_get_canvas_size=(width,height,isFullscreen)=>{var canvas=Module["canvas"];HEAP32[width>>2]=canvas.width;HEAP32[height>>2]=canvas.height;HEAP32[isFullscreen>>2]=Browser.isFullscreen?1:0};Module["_emscripten_get_canvas_size"]=_emscripten_get_canvas_size;_emscripten_get_canvas_size.sig="vppp";var _emscripten_create_worker=url=>{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}var data=msg.data["data"];if(data){if(!data.byteLength)data=new Uint8Array(data);if(!info.buffer||info.bufferSize{var info=Browser.workers[id];info.worker.terminate();if(info.buffer)_free(info.buffer);Browser.workers[id]=null};Module["_emscripten_destroy_worker"]=_emscripten_destroy_worker;_emscripten_destroy_worker.sig="vi";var _emscripten_call_worker=(id,funcName,data,size,callback,arg)=>{funcName=UTF8ToString(funcName);var info=Browser.workers[id];var callbackId=-1;if(callback){callbackId=info.callbacks.length;info.callbacks.push({func:getWasmTableEntry(callback),arg:arg});info.awaited++}var transferObject={"funcName":funcName,"callbackId":callbackId,"data":data?new Uint8Array(HEAPU8.subarray(data,data+size)):0};if(data){info.worker.postMessage(transferObject,[transferObject.data.buffer])}else{info.worker.postMessage(transferObject)}};Module["_emscripten_call_worker"]=_emscripten_call_worker;_emscripten_call_worker.sig="vippipp";var _emscripten_get_worker_queue_size=id=>{var info=Browser.workers[id];if(!info)return-1;return info.awaited};Module["_emscripten_get_worker_queue_size"]=_emscripten_get_worker_queue_size;_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);HEAP32[w>>2]=canvas.width;HEAP32[h>>2]=canvas.height;return buf};Module["getPreloadedImageData"]=getPreloadedImageData;var _emscripten_get_preloaded_image_data=(path,w,h)=>getPreloadedImageData(UTF8ToString(path),w,h);Module["_emscripten_get_preloaded_image_data"]=_emscripten_get_preloaded_image_data;_emscripten_get_preloaded_image_data.sig="pppp";var getPreloadedImageData__data=["$PATH_FS","malloc"];Module["getPreloadedImageData__data"]=getPreloadedImageData__data;var _emscripten_get_preloaded_image_data_from_FILE=(file,w,h)=>{var fd=_fileno(file);var stream=FS.getStream(fd);if(stream){return getPreloadedImageData(stream.path,w,h)}return 0};Module["_emscripten_get_preloaded_image_data_from_FILE"]=_emscripten_get_preloaded_image_data_from_FILE;_emscripten_get_preloaded_image_data_from_FILE.sig="pppp";var wget={wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle(){var handle=wget.nextWgetRequestHandle;wget.nextWgetRequestHandle++;return handle}};Module["wget"]=wget;var FS_mkdirTree=(path,mode)=>FS.mkdirTree(path,mode);Module["FS_mkdirTree"]=FS_mkdirTree;var _emscripten_async_wget=(url,file,onload,onerror)=>{var _url=UTF8ToString(url);var _file=UTF8ToString(file);_file=PATH_FS.resolve(_file);function doCallback(callback){if(callback){callUserCallback(()=>{var sp=stackSave();getWasmTableEntry(callback)(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)})};Module["_emscripten_async_wget"]=_emscripten_async_wget;_emscripten_async_wget.sig="vpppp";var _emscripten_async_wget_data=(url,userdata,onload,onerror)=>{asyncLoad(UTF8ToString(url),byteArray=>{callUserCallback(()=>{var buffer=_malloc(byteArray.length);HEAPU8.set(byteArray,buffer);getWasmTableEntry(onload)(userdata,buffer,byteArray.length);_free(buffer)})},()=>{if(onerror){callUserCallback(()=>{getWasmTableEntry(onerror)(userdata)})}},true)};Module["_emscripten_async_wget_data"]=_emscripten_async_wget_data;_emscripten_async_wget_data.sig="vpppp";var _emscripten_async_wget2=(url,file,request,param,userdata,onload,onerror,onprogress)=>{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=>{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();getWasmTableEntry(onload)(handle,userdata,stringToUTF8OnStack(_file));stackRestore(sp)}}else{if(onerror)getWasmTableEntry(onerror)(handle,userdata,http.status)}delete wget.wgetRequests[handle]};http.onerror=e=>{if(onerror)getWasmTableEntry(onerror)(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)getWasmTableEntry(onprogress)(handle,userdata,percentComplete)}};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};Module["_emscripten_async_wget2"]=_emscripten_async_wget2;_emscripten_async_wget2.sig="ipppppppp";var _emscripten_async_wget2_data=(url,request,param,userdata,free,onload,onerror,onprogress)=>{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)}getWasmTableEntry(onerror)(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);if(onload)getWasmTableEntry(onload)(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)getWasmTableEntry(onprogress)(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};Module["_emscripten_async_wget2_data"]=_emscripten_async_wget2_data;_emscripten_async_wget2_data.sig="ippppippp";var _emscripten_async_wget2_abort=handle=>{var http=wget.wgetRequests[handle];http?.abort()};Module["_emscripten_async_wget2_abort"]=_emscripten_async_wget2_abort;_emscripten_async_wget2_abort.sig="vi";var __dlsym_catchup_js=(handle,symbolIndex)=>{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};Module["__dlsym_catchup_js"]=__dlsym_catchup_js;__dlsym_catchup_js.sig="ppi";var _setNetworkCallback=(event,userData,callback)=>{function _callback(data){try{if(event==="error"){var sp=stackSave();var msg=stringToUTF8OnStack(data[2]);getWasmTableEntry(callback)(data[0],data[1],msg,userData);stackRestore(sp)}else{getWasmTableEntry(callback)(data,userData)}}catch(e){if(!(e instanceof ExitStatus)){if(e&&typeof e=="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}}Module["websocket"]["on"](event,callback?_callback:null)};Module["_setNetworkCallback"]=_setNetworkCallback;var _emscripten_set_socket_error_callback=(userData,callback)=>{_setNetworkCallback("error",userData,callback)};Module["_emscripten_set_socket_error_callback"]=_emscripten_set_socket_error_callback;_emscripten_set_socket_error_callback.sig="vpp";var _emscripten_set_socket_open_callback=(userData,callback)=>{_setNetworkCallback("open",userData,callback)};Module["_emscripten_set_socket_open_callback"]=_emscripten_set_socket_open_callback;_emscripten_set_socket_open_callback.sig="vpp";var _emscripten_set_socket_listen_callback=(userData,callback)=>{_setNetworkCallback("listen",userData,callback)};Module["_emscripten_set_socket_listen_callback"]=_emscripten_set_socket_listen_callback;_emscripten_set_socket_listen_callback.sig="vpp";var _emscripten_set_socket_connection_callback=(userData,callback)=>{_setNetworkCallback("connection",userData,callback)};Module["_emscripten_set_socket_connection_callback"]=_emscripten_set_socket_connection_callback;_emscripten_set_socket_connection_callback.sig="vpp";var _emscripten_set_socket_message_callback=(userData,callback)=>{_setNetworkCallback("message",userData,callback)};Module["_emscripten_set_socket_message_callback"]=_emscripten_set_socket_message_callback;_emscripten_set_socket_message_callback.sig="vpp";var _emscripten_set_socket_close_callback=(userData,callback)=>{_setNetworkCallback("close",userData,callback)};Module["_emscripten_set_socket_close_callback"]=_emscripten_set_socket_close_callback;_emscripten_set_socket_close_callback.sig="vpp";var ALLOC_NORMAL=0;Module["ALLOC_NORMAL"]=ALLOC_NORMAL;var ALLOC_STACK=1;Module["ALLOC_STACK"]=ALLOC_STACK;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);return ret};Module["allocate"]=allocate;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]}stringToUTF8(string,buffer,Infinity);if(dontAddNull)HEAP8[end]=lastChar};Module["writeStringToMemory"]=writeStringToMemory;var writeAsciiToMemory=(str,buffer,dontAddNull)=>{for(var i=0;i{HEAP32[___errno_location()>>2]=value;return value};Module["setErrNo"]=setErrNo;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&&ret){return UTF8ToString(ret)}}catch(e){}finally{_free(ret);if(demangle.recursionGuard<2)--demangle.recursionGuard}return func})};Module["demangle"]=demangle;function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return js}Module["stackTrace"]=stackTrace;var _emscripten_is_main_browser_thread=()=>!ENVIRONMENT_IS_WORKER;Module["_emscripten_is_main_browser_thread"]=_emscripten_is_main_browser_thread;var webSockets=new HandleAllocator;Module["webSockets"]=webSockets;var WS={socketEvent:null,getSocket(socketId){if(!webSockets.has(socketId)){return 0}return webSockets.get(socketId)},getSocketEvent(socketId){this.socketEvent||=_malloc(524);HEAPU32[this.socketEvent>>2]=socketId;return this.socketEvent}};Module["WS"]=WS;var _emscripten_websocket_get_ready_state=(socketId,readyState)=>{var socket=WS.getSocket(socketId);if(!socket){return-3}HEAP16[readyState>>1]=socket.readyState;return 0};Module["_emscripten_websocket_get_ready_state"]=_emscripten_websocket_get_ready_state;_emscripten_websocket_get_ready_state.sig="iip";var _emscripten_websocket_get_buffered_amount=(socketId,bufferedAmount)=>{var socket=WS.getSocket(socketId);if(!socket){return-3}HEAPU32[bufferedAmount>>2]=socket.bufferedAmount;return 0};Module["_emscripten_websocket_get_buffered_amount"]=_emscripten_websocket_get_buffered_amount;_emscripten_websocket_get_buffered_amount.sig="iip";var _emscripten_websocket_get_extensions=(socketId,extensions,extensionsLength)=>{var socket=WS.getSocket(socketId);if(!socket){return-3}if(!extensions)return-5;stringToUTF8(socket.extensions,extensions,extensionsLength);return 0};Module["_emscripten_websocket_get_extensions"]=_emscripten_websocket_get_extensions;_emscripten_websocket_get_extensions.sig="iipi";var _emscripten_websocket_get_extensions_length=(socketId,extensionsLength)=>{var socket=WS.getSocket(socketId);if(!socket){return-3}if(!extensionsLength)return-5;HEAP32[extensionsLength>>2]=lengthBytesUTF8(socket.extensions)+1;return 0};Module["_emscripten_websocket_get_extensions_length"]=_emscripten_websocket_get_extensions_length;_emscripten_websocket_get_extensions_length.sig="iip";var _emscripten_websocket_get_protocol=(socketId,protocol,protocolLength)=>{var socket=WS.getSocket(socketId);if(!socket){return-3}if(!protocol)return-5;stringToUTF8(socket.protocol,protocol,protocolLength);return 0};Module["_emscripten_websocket_get_protocol"]=_emscripten_websocket_get_protocol;_emscripten_websocket_get_protocol.sig="iipi";var _emscripten_websocket_get_protocol_length=(socketId,protocolLength)=>{var socket=WS.getSocket(socketId);if(!socket){return-3}if(!protocolLength)return-5;HEAP32[protocolLength>>2]=lengthBytesUTF8(socket.protocol)+1;return 0};Module["_emscripten_websocket_get_protocol_length"]=_emscripten_websocket_get_protocol_length;_emscripten_websocket_get_protocol_length.sig="iip";var _emscripten_websocket_get_url=(socketId,url,urlLength)=>{var socket=WS.getSocket(socketId);if(!socket){return-3}if(!url)return-5;stringToUTF8(socket.url,url,urlLength);return 0};Module["_emscripten_websocket_get_url"]=_emscripten_websocket_get_url;_emscripten_websocket_get_url.sig="iipi";var _emscripten_websocket_get_url_length=(socketId,urlLength)=>{var socket=WS.getSocket(socketId);if(!socket){return-3}if(!urlLength)return-5;HEAP32[urlLength>>2]=lengthBytesUTF8(socket.url)+1;return 0};Module["_emscripten_websocket_get_url_length"]=_emscripten_websocket_get_url_length;_emscripten_websocket_get_url_length.sig="iip";var _emscripten_websocket_set_onopen_callback_on_thread=(socketId,userData,callbackFunc,thread)=>{var eventPtr=WS.getSocketEvent(socketId);var socket=WS.getSocket(socketId);if(!socket){return-3}socket.onopen=function(e){getWasmTableEntry(callbackFunc)(0,eventPtr,userData)};return 0};Module["_emscripten_websocket_set_onopen_callback_on_thread"]=_emscripten_websocket_set_onopen_callback_on_thread;_emscripten_websocket_set_onopen_callback_on_thread.sig="iippp";var _emscripten_websocket_set_onerror_callback_on_thread=(socketId,userData,callbackFunc,thread)=>{var eventPtr=WS.getSocketEvent(socketId);var socket=WS.getSocket(socketId);if(!socket){return-3}socket.onerror=function(e){getWasmTableEntry(callbackFunc)(0,eventPtr,userData)};return 0};Module["_emscripten_websocket_set_onerror_callback_on_thread"]=_emscripten_websocket_set_onerror_callback_on_thread;_emscripten_websocket_set_onerror_callback_on_thread.sig="iippp";var _emscripten_websocket_set_onclose_callback_on_thread=(socketId,userData,callbackFunc,thread)=>{var eventPtr=WS.getSocketEvent(socketId);var socket=WS.getSocket(socketId);if(!socket){return-3}socket.onclose=function(e){HEAP32[eventPtr+4>>2]=e.wasClean,HEAP16[eventPtr+4>>1]=e.code,stringToUTF8(e.reason,eventPtr+10,512);getWasmTableEntry(callbackFunc)(0,eventPtr,userData)};return 0};Module["_emscripten_websocket_set_onclose_callback_on_thread"]=_emscripten_websocket_set_onclose_callback_on_thread;_emscripten_websocket_set_onclose_callback_on_thread.sig="iippp";var _emscripten_websocket_set_onmessage_callback_on_thread=(socketId,userData,callbackFunc,thread)=>{var eventPtr=WS.getSocketEvent(socketId);var socket=WS.getSocket(socketId);if(!socket){return-3}socket.onmessage=function(e){var isText=typeof e.data=="string";if(isText){var buf=stringToNewUTF8(e.data);var len=lengthBytesUTF8(e.data)+1}else{var len=e.data.byteLength;var buf=_malloc(len);HEAP8.set(new Uint8Array(e.data),buf)}HEAPU32[eventPtr+4>>2]=buf,HEAP32[eventPtr+8>>2]=len,HEAP32[eventPtr+12>>2]=isText,getWasmTableEntry(callbackFunc)(0,eventPtr,userData);_free(buf)};return 0};Module["_emscripten_websocket_set_onmessage_callback_on_thread"]=_emscripten_websocket_set_onmessage_callback_on_thread;_emscripten_websocket_set_onmessage_callback_on_thread.sig="iippp";var _emscripten_websocket_new=createAttributes=>{if(typeof WebSocket=="undefined"){return-1}if(!createAttributes){return-5}var url=UTF8ToString(HEAPU32[createAttributes>>2]);var protocols=HEAPU32[createAttributes+4>>2];var socket=protocols?new WebSocket(url,UTF8ToString(protocols).split(",")):new WebSocket(url);socket.binaryType="arraybuffer";var socketId=webSockets.allocate(socket);return socketId};Module["_emscripten_websocket_new"]=_emscripten_websocket_new;_emscripten_websocket_new.sig="ip";var _emscripten_websocket_send_utf8_text=(socketId,textData)=>{var socket=WS.getSocket(socketId);if(!socket){return-3}var str=UTF8ToString(textData);socket.send(str);return 0};Module["_emscripten_websocket_send_utf8_text"]=_emscripten_websocket_send_utf8_text;_emscripten_websocket_send_utf8_text.sig="iip";var _emscripten_websocket_send_binary=(socketId,binaryData,dataLength)=>{var socket=WS.getSocket(socketId);if(!socket){return-3}socket.send(HEAPU8.subarray(binaryData,binaryData+dataLength));return 0};Module["_emscripten_websocket_send_binary"]=_emscripten_websocket_send_binary;_emscripten_websocket_send_binary.sig="iipi";var _emscripten_websocket_close=(socketId,code,reason)=>{var socket=WS.getSocket(socketId);if(!socket){return-3}var reasonStr=reason?UTF8ToString(reason):undefined;if(reason)socket.close(code||undefined,UTF8ToString(reason));else if(code)socket.close(code);else socket.close();return 0};Module["_emscripten_websocket_close"]=_emscripten_websocket_close;_emscripten_websocket_close.sig="iiip";var _emscripten_websocket_delete=socketId=>{var socket=WS.getSocket(socketId);if(!socket){return-3}socket.onopen=socket.onerror=socket.onclose=socket.onmessage=null;webSockets.free(socketId);return 0};Module["_emscripten_websocket_delete"]=_emscripten_websocket_delete;_emscripten_websocket_delete.sig="ii";var _emscripten_websocket_is_supported=()=>typeof WebSocket!="undefined";Module["_emscripten_websocket_is_supported"]=_emscripten_websocket_is_supported;_emscripten_websocket_is_supported.sig="i";var _emscripten_websocket_deinitialize=()=>{for(var i in WS.sockets){var socket=WS.sockets[i];if(socket){socket.close();_emscripten_websocket_delete(i)}}WS.sockets=[]};Module["_emscripten_websocket_deinitialize"]=_emscripten_websocket_deinitialize;_emscripten_websocket_deinitialize.sig="v";var _emscripten_webgl_enable_ANGLE_instanced_arrays=ctx=>webgl_enable_ANGLE_instanced_arrays(GL.contexts[ctx].GLctx);Module["_emscripten_webgl_enable_ANGLE_instanced_arrays"]=_emscripten_webgl_enable_ANGLE_instanced_arrays;_emscripten_webgl_enable_ANGLE_instanced_arrays.sig="ip";var _emscripten_webgl_enable_OES_vertex_array_object=ctx=>webgl_enable_OES_vertex_array_object(GL.contexts[ctx].GLctx);Module["_emscripten_webgl_enable_OES_vertex_array_object"]=_emscripten_webgl_enable_OES_vertex_array_object;_emscripten_webgl_enable_OES_vertex_array_object.sig="ip";var _emscripten_webgl_enable_WEBGL_draw_buffers=ctx=>webgl_enable_WEBGL_draw_buffers(GL.contexts[ctx].GLctx);Module["_emscripten_webgl_enable_WEBGL_draw_buffers"]=_emscripten_webgl_enable_WEBGL_draw_buffers;_emscripten_webgl_enable_WEBGL_draw_buffers.sig="ip";var _emscripten_webgl_enable_WEBGL_multi_draw=ctx=>webgl_enable_WEBGL_multi_draw(GL.contexts[ctx].GLctx);Module["_emscripten_webgl_enable_WEBGL_multi_draw"]=_emscripten_webgl_enable_WEBGL_multi_draw;_emscripten_webgl_enable_WEBGL_multi_draw.sig="ip";var _glVertexPointer=(size,type,stride,ptr)=>{throw"Legacy GL function (glVertexPointer) called. If you want legacy GL emulation, you need to compile with -sLEGACY_GL_EMULATION to enable legacy GL emulation."};Module["_glVertexPointer"]=_glVertexPointer;_glVertexPointer.sig="viiip";var _glMatrixMode=()=>{throw"Legacy GL function (glMatrixMode) called. If you want legacy GL emulation, you need to compile with -sLEGACY_GL_EMULATION to enable legacy GL emulation."};Module["_glMatrixMode"]=_glMatrixMode;_glMatrixMode.sig="vi";var _glBegin=()=>{throw"Legacy GL function (glBegin) called. If you want legacy GL emulation, you need to compile with -sLEGACY_GL_EMULATION to enable legacy GL emulation."};Module["_glBegin"]=_glBegin;_glBegin.sig="vi";var _glLoadIdentity=()=>{throw"Legacy GL function (glLoadIdentity) called. If you want legacy GL emulation, you need to compile with -sLEGACY_GL_EMULATION to enable legacy GL emulation."};Module["_glLoadIdentity"]=_glLoadIdentity;_glLoadIdentity.sig="v";var _glVertexAttribDivisorNV=_glVertexAttribDivisor;Module["_glVertexAttribDivisorNV"]=_glVertexAttribDivisorNV;var _glDrawArraysInstancedNV=_glDrawArraysInstanced;Module["_glDrawArraysInstancedNV"]=_glDrawArraysInstancedNV;var _glDrawElementsInstancedNV=_glDrawElementsInstanced;Module["_glDrawElementsInstancedNV"]=_glDrawElementsInstancedNV;var _glVertexAttribDivisorEXT=_glVertexAttribDivisor;Module["_glVertexAttribDivisorEXT"]=_glVertexAttribDivisorEXT;var _glDrawArraysInstancedEXT=_glDrawArraysInstanced;Module["_glDrawArraysInstancedEXT"]=_glDrawArraysInstancedEXT;var _glDrawElementsInstancedEXT=_glDrawElementsInstanced;Module["_glDrawElementsInstancedEXT"]=_glDrawElementsInstancedEXT;var _glVertexAttribDivisorARB=_glVertexAttribDivisor;Module["_glVertexAttribDivisorARB"]=_glVertexAttribDivisorARB;var _glDrawArraysInstancedARB=_glDrawArraysInstanced;Module["_glDrawArraysInstancedARB"]=_glDrawArraysInstancedARB;var _glDrawElementsInstancedARB=_glDrawElementsInstanced;Module["_glDrawElementsInstancedARB"]=_glDrawElementsInstancedARB;var _glDrawBuffersEXT=_glDrawBuffers;Module["_glDrawBuffersEXT"]=_glDrawBuffersEXT;var _glMultiDrawArraysWEBGL=(mode,firsts,counts,drawcount)=>{GLctx.multiDrawWebgl["multiDrawArraysWEBGL"](mode,HEAP32,firsts>>2,HEAP32,counts>>2,drawcount)};Module["_glMultiDrawArraysWEBGL"]=_glMultiDrawArraysWEBGL;_glMultiDrawArraysWEBGL.sig="vippi";var _glMultiDrawArrays=_glMultiDrawArraysWEBGL;Module["_glMultiDrawArrays"]=_glMultiDrawArrays;_glMultiDrawArrays.sig="vippi";var _glMultiDrawArraysANGLE=_glMultiDrawArraysWEBGL;Module["_glMultiDrawArraysANGLE"]=_glMultiDrawArraysANGLE;var _glMultiDrawArraysInstancedWEBGL=(mode,firsts,counts,instanceCounts,drawcount)=>{GLctx.multiDrawWebgl["multiDrawArraysInstancedWEBGL"](mode,HEAP32,firsts>>2,HEAP32,counts>>2,HEAP32,instanceCounts>>2,drawcount)};Module["_glMultiDrawArraysInstancedWEBGL"]=_glMultiDrawArraysInstancedWEBGL;_glMultiDrawArraysInstancedWEBGL.sig="vipppi";var _glMultiDrawArraysInstancedANGLE=_glMultiDrawArraysInstancedWEBGL;Module["_glMultiDrawArraysInstancedANGLE"]=_glMultiDrawArraysInstancedANGLE;var _glMultiDrawElementsWEBGL=(mode,counts,type,offsets,drawcount)=>{GLctx.multiDrawWebgl["multiDrawElementsWEBGL"](mode,HEAP32,counts>>2,type,HEAP32,offsets>>2,drawcount)};Module["_glMultiDrawElementsWEBGL"]=_glMultiDrawElementsWEBGL;_glMultiDrawElementsWEBGL.sig="vipipi";var _glMultiDrawElements=_glMultiDrawElementsWEBGL;Module["_glMultiDrawElements"]=_glMultiDrawElements;_glMultiDrawElements.sig="vipipi";var _glMultiDrawElementsANGLE=_glMultiDrawElementsWEBGL;Module["_glMultiDrawElementsANGLE"]=_glMultiDrawElementsANGLE;var _glMultiDrawElementsInstancedWEBGL=(mode,counts,type,offsets,instanceCounts,drawcount)=>{GLctx.multiDrawWebgl["multiDrawElementsInstancedWEBGL"](mode,HEAP32,counts>>2,type,HEAP32,offsets>>2,HEAP32,instanceCounts>>2,drawcount)};Module["_glMultiDrawElementsInstancedWEBGL"]=_glMultiDrawElementsInstancedWEBGL;_glMultiDrawElementsInstancedWEBGL.sig="vipippi";var _glMultiDrawElementsInstancedANGLE=_glMultiDrawElementsInstancedWEBGL;Module["_glMultiDrawElementsInstancedANGLE"]=_glMultiDrawElementsInstancedANGLE;var _glClearDepth=x0=>GLctx.clearDepth(x0);Module["_glClearDepth"]=_glClearDepth;_glClearDepth.sig="vd";var _glDepthRange=(x0,x1)=>GLctx.depthRange(x0,x1);Module["_glDepthRange"]=_glDepthRange;_glDepthRange.sig="vdd";var _emscripten_glGenVertexArrays=_glGenVertexArrays;Module["_emscripten_glGenVertexArrays"]=_emscripten_glGenVertexArrays;_emscripten_glGenVertexArrays.sig="vip";var _emscripten_glDeleteVertexArrays=_glDeleteVertexArrays;Module["_emscripten_glDeleteVertexArrays"]=_emscripten_glDeleteVertexArrays;_emscripten_glDeleteVertexArrays.sig="vip";var _emscripten_glBindVertexArray=_glBindVertexArray;Module["_emscripten_glBindVertexArray"]=_emscripten_glBindVertexArray;_emscripten_glBindVertexArray.sig="vi";var _emscripten_glIsVertexArray=_glIsVertexArray;Module["_emscripten_glIsVertexArray"]=_emscripten_glIsVertexArray;_emscripten_glIsVertexArray.sig="ii";var _emscripten_glVertexPointer=_glVertexPointer;Module["_emscripten_glVertexPointer"]=_emscripten_glVertexPointer;_emscripten_glVertexPointer.sig="viiip";var _emscripten_glMatrixMode=_glMatrixMode;Module["_emscripten_glMatrixMode"]=_emscripten_glMatrixMode;_emscripten_glMatrixMode.sig="vi";var _emscripten_glBegin=_glBegin;Module["_emscripten_glBegin"]=_emscripten_glBegin;_emscripten_glBegin.sig="vi";var _emscripten_glLoadIdentity=_glLoadIdentity;Module["_emscripten_glLoadIdentity"]=_emscripten_glLoadIdentity;_emscripten_glLoadIdentity.sig="v";var _emscripten_glVertexAttribDivisor=_glVertexAttribDivisor;Module["_emscripten_glVertexAttribDivisor"]=_emscripten_glVertexAttribDivisor;_emscripten_glVertexAttribDivisor.sig="vii";var _emscripten_glDrawArraysInstanced=_glDrawArraysInstanced;Module["_emscripten_glDrawArraysInstanced"]=_emscripten_glDrawArraysInstanced;_emscripten_glDrawArraysInstanced.sig="viiii";var _emscripten_glDrawElementsInstanced=_glDrawElementsInstanced;Module["_emscripten_glDrawElementsInstanced"]=_emscripten_glDrawElementsInstanced;_emscripten_glDrawElementsInstanced.sig="viiipi";var _emscripten_glVertexAttribDivisorNV=_glVertexAttribDivisorNV;Module["_emscripten_glVertexAttribDivisorNV"]=_emscripten_glVertexAttribDivisorNV;var _emscripten_glDrawArraysInstancedNV=_glDrawArraysInstancedNV;Module["_emscripten_glDrawArraysInstancedNV"]=_emscripten_glDrawArraysInstancedNV;var _emscripten_glDrawElementsInstancedNV=_glDrawElementsInstancedNV;Module["_emscripten_glDrawElementsInstancedNV"]=_emscripten_glDrawElementsInstancedNV;var _emscripten_glVertexAttribDivisorEXT=_glVertexAttribDivisorEXT;Module["_emscripten_glVertexAttribDivisorEXT"]=_emscripten_glVertexAttribDivisorEXT;var _emscripten_glDrawArraysInstancedEXT=_glDrawArraysInstancedEXT;Module["_emscripten_glDrawArraysInstancedEXT"]=_emscripten_glDrawArraysInstancedEXT;var _emscripten_glDrawElementsInstancedEXT=_glDrawElementsInstancedEXT;Module["_emscripten_glDrawElementsInstancedEXT"]=_emscripten_glDrawElementsInstancedEXT;var _emscripten_glVertexAttribDivisorARB=_glVertexAttribDivisorARB;Module["_emscripten_glVertexAttribDivisorARB"]=_emscripten_glVertexAttribDivisorARB;var _emscripten_glDrawArraysInstancedARB=_glDrawArraysInstancedARB;Module["_emscripten_glDrawArraysInstancedARB"]=_emscripten_glDrawArraysInstancedARB;var _emscripten_glDrawElementsInstancedARB=_glDrawElementsInstancedARB;Module["_emscripten_glDrawElementsInstancedARB"]=_emscripten_glDrawElementsInstancedARB;var _emscripten_glDrawBuffers=_glDrawBuffers;Module["_emscripten_glDrawBuffers"]=_emscripten_glDrawBuffers;_emscripten_glDrawBuffers.sig="vip";var _emscripten_glDrawBuffersEXT=_glDrawBuffersEXT;Module["_emscripten_glDrawBuffersEXT"]=_emscripten_glDrawBuffersEXT;var _emscripten_glMultiDrawArrays=_glMultiDrawArrays;Module["_emscripten_glMultiDrawArrays"]=_emscripten_glMultiDrawArrays;_emscripten_glMultiDrawArrays.sig="vippi";var _emscripten_glMultiDrawArraysANGLE=_glMultiDrawArraysANGLE;Module["_emscripten_glMultiDrawArraysANGLE"]=_emscripten_glMultiDrawArraysANGLE;var _emscripten_glMultiDrawArraysWEBGL=_glMultiDrawArraysWEBGL;Module["_emscripten_glMultiDrawArraysWEBGL"]=_emscripten_glMultiDrawArraysWEBGL;var _emscripten_glMultiDrawArraysInstancedANGLE=_glMultiDrawArraysInstancedANGLE;Module["_emscripten_glMultiDrawArraysInstancedANGLE"]=_emscripten_glMultiDrawArraysInstancedANGLE;var _emscripten_glMultiDrawArraysInstancedWEBGL=_glMultiDrawArraysInstancedWEBGL;Module["_emscripten_glMultiDrawArraysInstancedWEBGL"]=_emscripten_glMultiDrawArraysInstancedWEBGL;var _emscripten_glMultiDrawElements=_glMultiDrawElements;Module["_emscripten_glMultiDrawElements"]=_emscripten_glMultiDrawElements;_emscripten_glMultiDrawElements.sig="vipipi";var _emscripten_glMultiDrawElementsANGLE=_glMultiDrawElementsANGLE;Module["_emscripten_glMultiDrawElementsANGLE"]=_emscripten_glMultiDrawElementsANGLE;var _emscripten_glMultiDrawElementsWEBGL=_glMultiDrawElementsWEBGL;Module["_emscripten_glMultiDrawElementsWEBGL"]=_emscripten_glMultiDrawElementsWEBGL;var _emscripten_glMultiDrawElementsInstancedANGLE=_glMultiDrawElementsInstancedANGLE;Module["_emscripten_glMultiDrawElementsInstancedANGLE"]=_emscripten_glMultiDrawElementsInstancedANGLE;var _emscripten_glMultiDrawElementsInstancedWEBGL=_glMultiDrawElementsInstancedWEBGL;Module["_emscripten_glMultiDrawElementsInstancedWEBGL"]=_emscripten_glMultiDrawElementsInstancedWEBGL;var _emscripten_glClearDepth=_glClearDepth;Module["_emscripten_glClearDepth"]=_emscripten_glClearDepth;_emscripten_glClearDepth.sig="vd";var _emscripten_glDepthRange=_glDepthRange;Module["_emscripten_glDepthRange"]=_emscripten_glDepthRange;_emscripten_glDepthRange.sig="vdd";var writeGLArray=(arr,dst,dstLength,heapType)=>{var len=arr.length;var writeLength=dstLength>2;for(var i=0;i{var a=attributes>>2;var powerPreference=HEAP32[a+(24>>2)];var contextAttributes={"alpha":!!HEAP32[a+(0>>2)],"depth":!!HEAP32[a+(4>>2)],"stencil":!!HEAP32[a+(8>>2)],"antialias":!!HEAP32[a+(12>>2)],"premultipliedAlpha":!!HEAP32[a+(16>>2)],"preserveDrawingBuffer":!!HEAP32[a+(20>>2)],"powerPreference":webglPowerPreferences[powerPreference],"failIfMajorPerformanceCaveat":!!HEAP32[a+(28>>2)],majorVersion:HEAP32[a+(32>>2)],minorVersion:HEAP32[a+(36>>2)],enableExtensionsByDefault:HEAP32[a+(40>>2)],explicitSwapControl:HEAP32[a+(44>>2)],proxyContextToMainThread:HEAP32[a+(48>>2)],renderViaOffscreenBackBuffer:HEAP32[a+(52>>2)]};var canvas=findCanvasEventTarget(target);if(!canvas){return 0}if(contextAttributes.explicitSwapControl){return 0}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle};Module["_emscripten_webgl_do_create_context"]=_emscripten_webgl_do_create_context;_emscripten_webgl_do_create_context.sig="ppp";var _emscripten_webgl_create_context=_emscripten_webgl_do_create_context;Module["_emscripten_webgl_create_context"]=_emscripten_webgl_create_context;_emscripten_webgl_create_context.sig="ppp";var _emscripten_webgl_do_get_current_context=()=>GL.currentContext?GL.currentContext.handle:0;Module["_emscripten_webgl_do_get_current_context"]=_emscripten_webgl_do_get_current_context;_emscripten_webgl_do_get_current_context.sig="p";var _emscripten_webgl_get_current_context=_emscripten_webgl_do_get_current_context;Module["_emscripten_webgl_get_current_context"]=_emscripten_webgl_get_current_context;_emscripten_webgl_get_current_context.sig="p";var _emscripten_webgl_do_commit_frame=()=>{if(!GL.currentContext||!GL.currentContext.GLctx){return-3}if(!GL.currentContext.attributes.explicitSwapControl){return-3}return 0};Module["_emscripten_webgl_do_commit_frame"]=_emscripten_webgl_do_commit_frame;_emscripten_webgl_do_commit_frame.sig="i";var _emscripten_webgl_commit_frame=_emscripten_webgl_do_commit_frame;Module["_emscripten_webgl_commit_frame"]=_emscripten_webgl_commit_frame;_emscripten_webgl_commit_frame.sig="i";var _emscripten_webgl_make_context_current=contextHandle=>{var success=GL.makeContextCurrent(contextHandle);return success?0:-5};Module["_emscripten_webgl_make_context_current"]=_emscripten_webgl_make_context_current;_emscripten_webgl_make_context_current.sig="ip";var _emscripten_webgl_get_drawing_buffer_size=(contextHandle,width,height)=>{var GLContext=GL.getContext(contextHandle);if(!GLContext||!GLContext.GLctx||!width||!height){return-5}HEAP32[width>>2]=GLContext.GLctx.drawingBufferWidth;HEAP32[height>>2]=GLContext.GLctx.drawingBufferHeight;return 0};Module["_emscripten_webgl_get_drawing_buffer_size"]=_emscripten_webgl_get_drawing_buffer_size;_emscripten_webgl_get_drawing_buffer_size.sig="ippp";var _emscripten_webgl_get_context_attributes=(c,a)=>{if(!a)return-5;c=GL.contexts[c];if(!c)return-3;var t=c.GLctx;if(!t)return-3;t=t.getContextAttributes();HEAP32[a>>2]=t.alpha;HEAP32[a+4>>2]=t.depth;HEAP32[a+8>>2]=t.stencil;HEAP32[a+12>>2]=t.antialias;HEAP32[a+16>>2]=t.premultipliedAlpha;HEAP32[a+20>>2]=t.preserveDrawingBuffer;var power=t["powerPreference"]&&webglPowerPreferences.indexOf(t["powerPreference"]);HEAP32[a+24>>2]=power;HEAP32[a+28>>2]=t.failIfMajorPerformanceCaveat;HEAP32[a+32>>2]=c.version;HEAP32[a+36>>2]=0;HEAP32[a+40>>2]=c.attributes.enableExtensionsByDefault;return 0};Module["_emscripten_webgl_get_context_attributes"]=_emscripten_webgl_get_context_attributes;_emscripten_webgl_get_context_attributes.sig="ipp";var _emscripten_webgl_destroy_context=contextHandle=>{if(GL.currentContext==contextHandle)GL.currentContext=0;GL.deleteContext(contextHandle)};Module["_emscripten_webgl_destroy_context"]=_emscripten_webgl_destroy_context;_emscripten_webgl_destroy_context.sig="ip";var _emscripten_webgl_enable_extension=(contextHandle,extension)=>{var context=GL.getContext(contextHandle);var extString=UTF8ToString(extension);if(extString.startsWith("GL_"))extString=extString.substr(3);if(extString=="ANGLE_instanced_arrays")webgl_enable_ANGLE_instanced_arrays(GLctx);if(extString=="OES_vertex_array_object")webgl_enable_OES_vertex_array_object(GLctx);if(extString=="WEBGL_draw_buffers")webgl_enable_WEBGL_draw_buffers(GLctx);if(extString=="WEBGL_multi_draw")webgl_enable_WEBGL_multi_draw(GLctx);var ext=context.GLctx.getExtension(extString);return!!ext};Module["_emscripten_webgl_enable_extension"]=_emscripten_webgl_enable_extension;_emscripten_webgl_enable_extension.sig="ipp";var _emscripten_supports_offscreencanvas=()=>0;Module["_emscripten_supports_offscreencanvas"]=_emscripten_supports_offscreencanvas;_emscripten_supports_offscreencanvas.sig="i";var registerWebGlEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var webGlEventHandlerFunc=(e=event)=>{if(getWasmTableEntry(callbackfunc)(eventTypeId,0,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:webGlEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)};Module["registerWebGlEventCallback"]=registerWebGlEventCallback;var _emscripten_set_webglcontextlost_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{registerWebGlEventCallback(target,userData,useCapture,callbackfunc,31,"webglcontextlost",targetThread);return 0};Module["_emscripten_set_webglcontextlost_callback_on_thread"]=_emscripten_set_webglcontextlost_callback_on_thread;_emscripten_set_webglcontextlost_callback_on_thread.sig="ippipp";var _emscripten_set_webglcontextrestored_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{registerWebGlEventCallback(target,userData,useCapture,callbackfunc,32,"webglcontextrestored",targetThread);return 0};Module["_emscripten_set_webglcontextrestored_callback_on_thread"]=_emscripten_set_webglcontextrestored_callback_on_thread;_emscripten_set_webglcontextrestored_callback_on_thread.sig="ippipp";var _emscripten_is_webgl_context_lost=contextHandle=>!GL.contexts[contextHandle]||GL.contexts[contextHandle].GLctx.isContextLost();Module["_emscripten_is_webgl_context_lost"]=_emscripten_is_webgl_context_lost;_emscripten_is_webgl_context_lost.sig="ip";var _emscripten_webgl_get_supported_extensions=()=>stringToNewUTF8(GLctx.getSupportedExtensions().join(" "));Module["_emscripten_webgl_get_supported_extensions"]=_emscripten_webgl_get_supported_extensions;_emscripten_webgl_get_supported_extensions.sig="p";var _emscripten_webgl_get_program_parameter_d=(program,param)=>GLctx.getProgramParameter(GL.programs[program],param);Module["_emscripten_webgl_get_program_parameter_d"]=_emscripten_webgl_get_program_parameter_d;_emscripten_webgl_get_program_parameter_d.sig="dii";var _emscripten_webgl_get_program_info_log_utf8=program=>stringToNewUTF8(GLctx.getProgramInfoLog(GL.programs[program]));Module["_emscripten_webgl_get_program_info_log_utf8"]=_emscripten_webgl_get_program_info_log_utf8;_emscripten_webgl_get_program_info_log_utf8.sig="pi";var _emscripten_webgl_get_shader_parameter_d=(shader,param)=>GLctx.getShaderParameter(GL.shaders[shader],param);Module["_emscripten_webgl_get_shader_parameter_d"]=_emscripten_webgl_get_shader_parameter_d;_emscripten_webgl_get_shader_parameter_d.sig="dii";var _emscripten_webgl_get_shader_info_log_utf8=shader=>stringToNewUTF8(GLctx.getShaderInfoLog(GL.shaders[shader]));Module["_emscripten_webgl_get_shader_info_log_utf8"]=_emscripten_webgl_get_shader_info_log_utf8;_emscripten_webgl_get_shader_info_log_utf8.sig="pi";var _emscripten_webgl_get_shader_source_utf8=shader=>stringToNewUTF8(GLctx.getShaderSource(GL.shaders[shader]));Module["_emscripten_webgl_get_shader_source_utf8"]=_emscripten_webgl_get_shader_source_utf8;_emscripten_webgl_get_shader_source_utf8.sig="pi";var _emscripten_webgl_get_vertex_attrib_d=(index,param)=>GLctx.getVertexAttrib(index,param);Module["_emscripten_webgl_get_vertex_attrib_d"]=_emscripten_webgl_get_vertex_attrib_d;_emscripten_webgl_get_vertex_attrib_d.sig="dii";var _emscripten_webgl_get_vertex_attrib_o=(index,param)=>{var obj=GLctx.getVertexAttrib(index,param);return obj?.name};Module["_emscripten_webgl_get_vertex_attrib_o"]=_emscripten_webgl_get_vertex_attrib_o;_emscripten_webgl_get_vertex_attrib_o.sig="iii";var _emscripten_webgl_get_vertex_attrib_v=(index,param,dst,dstLength,dstType)=>writeGLArray(GLctx.getVertexAttrib(index,param),dst,dstLength,dstType);Module["_emscripten_webgl_get_vertex_attrib_v"]=_emscripten_webgl_get_vertex_attrib_v;_emscripten_webgl_get_vertex_attrib_v.sig="iiipii";var _emscripten_webgl_get_uniform_d=(program,location)=>GLctx.getUniform(GL.programs[program],webglGetUniformLocation(location));Module["_emscripten_webgl_get_uniform_d"]=_emscripten_webgl_get_uniform_d;_emscripten_webgl_get_uniform_d.sig="dii";var _emscripten_webgl_get_uniform_v=(program,location,dst,dstLength,dstType)=>writeGLArray(GLctx.getUniform(GL.programs[program],webglGetUniformLocation(location)),dst,dstLength,dstType);Module["_emscripten_webgl_get_uniform_v"]=_emscripten_webgl_get_uniform_v;_emscripten_webgl_get_uniform_v.sig="iiipii";var _emscripten_webgl_get_parameter_v=(param,dst,dstLength,dstType)=>writeGLArray(GLctx.getParameter(param),dst,dstLength,dstType);Module["_emscripten_webgl_get_parameter_v"]=_emscripten_webgl_get_parameter_v;_emscripten_webgl_get_parameter_v.sig="iipii";var _emscripten_webgl_get_parameter_d=param=>GLctx.getParameter(param);Module["_emscripten_webgl_get_parameter_d"]=_emscripten_webgl_get_parameter_d;_emscripten_webgl_get_parameter_d.sig="di";var _emscripten_webgl_get_parameter_o=param=>{var obj=GLctx.getParameter(param);return obj?.name};Module["_emscripten_webgl_get_parameter_o"]=_emscripten_webgl_get_parameter_o;_emscripten_webgl_get_parameter_o.sig="ii";var _emscripten_webgl_get_parameter_utf8=param=>stringToNewUTF8(GLctx.getParameter(param));Module["_emscripten_webgl_get_parameter_utf8"]=_emscripten_webgl_get_parameter_utf8;_emscripten_webgl_get_parameter_utf8.sig="pi";var _emscripten_webgl_get_parameter_i64v=(param,dst)=>writeI53ToI64(dst,GLctx.getParameter(param));Module["_emscripten_webgl_get_parameter_i64v"]=_emscripten_webgl_get_parameter_i64v;_emscripten_webgl_get_parameter_i64v.sig="vip";var EGL={errorCode:12288,defaultDisplayInitialized:false,currentContext:0,currentReadSurface:0,currentDrawSurface:0,contextAttributes:{alpha:false,depth:false,stencil:false,antialias:false},stringCache:{},setErrorCode(code){EGL.errorCode=code},chooseConfig(display,attribList,config,config_size,numConfigs){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(attribList){for(;;){var param=HEAP32[attribList>>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAPU32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};Module["EGL"]=EGL;var _eglGetDisplay=nativeDisplayType=>{EGL.setErrorCode(12288);if(nativeDisplayType!=0&&nativeDisplayType!=1){return 0}return 62e3};Module["_eglGetDisplay"]=_eglGetDisplay;_eglGetDisplay.sig="pp";var _eglInitialize=(display,majorVersion,minorVersion)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(majorVersion){HEAP32[majorVersion>>2]=1}if(minorVersion){HEAP32[minorVersion>>2]=4}EGL.defaultDisplayInitialized=true;EGL.setErrorCode(12288);return 1};Module["_eglInitialize"]=_eglInitialize;_eglInitialize.sig="ippp";var _eglTerminate=display=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.defaultDisplayInitialized=false;EGL.setErrorCode(12288);return 1};Module["_eglTerminate"]=_eglTerminate;_eglTerminate.sig="ip";var _eglGetConfigs=(display,configs,config_size,numConfigs)=>EGL.chooseConfig(display,0,configs,config_size,numConfigs);Module["_eglGetConfigs"]=_eglGetConfigs;_eglGetConfigs.sig="ippip";var _eglChooseConfig=(display,attrib_list,configs,config_size,numConfigs)=>EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs);Module["_eglChooseConfig"]=_eglChooseConfig;_eglChooseConfig.sig="ipppip";var _eglGetConfigAttrib=(display,config,attribute,value)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}if(!value){EGL.setErrorCode(12300);return 0}EGL.setErrorCode(12288);switch(attribute){case 12320:HEAP32[value>>2]=EGL.contextAttributes.alpha?32:24;return 1;case 12321:HEAP32[value>>2]=EGL.contextAttributes.alpha?8:0;return 1;case 12322:HEAP32[value>>2]=8;return 1;case 12323:HEAP32[value>>2]=8;return 1;case 12324:HEAP32[value>>2]=8;return 1;case 12325:HEAP32[value>>2]=EGL.contextAttributes.depth?24:0;return 1;case 12326:HEAP32[value>>2]=EGL.contextAttributes.stencil?8:0;return 1;case 12327:HEAP32[value>>2]=12344;return 1;case 12328:HEAP32[value>>2]=62002;return 1;case 12329:HEAP32[value>>2]=0;return 1;case 12330:HEAP32[value>>2]=4096;return 1;case 12331:HEAP32[value>>2]=16777216;return 1;case 12332:HEAP32[value>>2]=4096;return 1;case 12333:HEAP32[value>>2]=0;return 1;case 12334:HEAP32[value>>2]=0;return 1;case 12335:HEAP32[value>>2]=12344;return 1;case 12337:HEAP32[value>>2]=EGL.contextAttributes.antialias?4:0;return 1;case 12338:HEAP32[value>>2]=EGL.contextAttributes.antialias?1:0;return 1;case 12339:HEAP32[value>>2]=4;return 1;case 12340:HEAP32[value>>2]=12344;return 1;case 12341:case 12342:case 12343:HEAP32[value>>2]=-1;return 1;case 12345:case 12346:HEAP32[value>>2]=0;return 1;case 12347:HEAP32[value>>2]=0;return 1;case 12348:HEAP32[value>>2]=1;return 1;case 12349:case 12350:HEAP32[value>>2]=0;return 1;case 12351:HEAP32[value>>2]=12430;return 1;case 12352:HEAP32[value>>2]=4;return 1;case 12354:HEAP32[value>>2]=0;return 1;default:EGL.setErrorCode(12292);return 0}};Module["_eglGetConfigAttrib"]=_eglGetConfigAttrib;_eglGetConfigAttrib.sig="ippip";var _eglCreateWindowSurface=(display,config,win,attrib_list)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}EGL.setErrorCode(12288);return 62006};Module["_eglCreateWindowSurface"]=_eglCreateWindowSurface;_eglCreateWindowSurface.sig="pppip";var _eglDestroySurface=(display,surface)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 1}if(EGL.currentReadSurface==surface){EGL.currentReadSurface=0}if(EGL.currentDrawSurface==surface){EGL.currentDrawSurface=0}EGL.setErrorCode(12288);return 1};Module["_eglDestroySurface"]=_eglDestroySurface;_eglDestroySurface.sig="ipp";var _eglCreateContext=(display,config,hmm,contextAttribs)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}var glesContextVersion=1;for(;;){var param=HEAP32[contextAttribs>>2];if(param==12440){glesContextVersion=HEAP32[contextAttribs+4>>2]}else if(param==12344){break}else{EGL.setErrorCode(12292);return 0}contextAttribs+=8}if(glesContextVersion!=2){EGL.setErrorCode(12293);return 0}EGL.contextAttributes.majorVersion=glesContextVersion-1;EGL.contextAttributes.minorVersion=0;EGL.context=GL.createContext(Module["canvas"],EGL.contextAttributes);if(EGL.context!=0){EGL.setErrorCode(12288);GL.makeContextCurrent(EGL.context);Module.useWebGL=true;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});GL.makeContextCurrent(null);return 62004}else{EGL.setErrorCode(12297);return 0}};Module["_eglCreateContext"]=_eglCreateContext;_eglCreateContext.sig="ppppp";var _eglDestroyContext=(display,context)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}GL.deleteContext(EGL.context);EGL.setErrorCode(12288);if(EGL.currentContext==context){EGL.currentContext=0}return 1};Module["_eglDestroyContext"]=_eglDestroyContext;_eglDestroyContext.sig="ipp";var _eglQuerySurface=(display,surface,attribute,value)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 0}if(!value){EGL.setErrorCode(12300);return 0}EGL.setErrorCode(12288);switch(attribute){case 12328:HEAP32[value>>2]=62002;return 1;case 12376:return 1;case 12375:HEAP32[value>>2]=Module["canvas"].width;return 1;case 12374:HEAP32[value>>2]=Module["canvas"].height;return 1;case 12432:HEAP32[value>>2]=-1;return 1;case 12433:HEAP32[value>>2]=-1;return 1;case 12434:HEAP32[value>>2]=-1;return 1;case 12422:HEAP32[value>>2]=12420;return 1;case 12441:HEAP32[value>>2]=12442;return 1;case 12435:HEAP32[value>>2]=12437;return 1;case 12416:case 12417:case 12418:case 12419:return 1;default:EGL.setErrorCode(12292);return 0}};Module["_eglQuerySurface"]=_eglQuerySurface;_eglQuerySurface.sig="ippip";var _eglQueryContext=(display,context,attribute,value)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}if(!value){EGL.setErrorCode(12300);return 0}EGL.setErrorCode(12288);switch(attribute){case 12328:HEAP32[value>>2]=62002;return 1;case 12439:HEAP32[value>>2]=12448;return 1;case 12440:HEAP32[value>>2]=EGL.contextAttributes.majorVersion+1;return 1;case 12422:HEAP32[value>>2]=12420;return 1;default:EGL.setErrorCode(12292);return 0}};Module["_eglQueryContext"]=_eglQueryContext;_eglQueryContext.sig="ippip";var _eglGetError=()=>EGL.errorCode;Module["_eglGetError"]=_eglGetError;_eglGetError.sig="i";var _eglQueryString=(display,name)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.setErrorCode(12288);if(EGL.stringCache[name])return EGL.stringCache[name];var ret;switch(name){case 12371:ret=stringToNewUTF8("Emscripten");break;case 12372:ret=stringToNewUTF8("1.4 Emscripten EGL");break;case 12373:ret=stringToNewUTF8("");break;case 12429:ret=stringToNewUTF8("OpenGL_ES");break;default:EGL.setErrorCode(12300);return 0}EGL.stringCache[name]=ret;return ret};Module["_eglQueryString"]=_eglQueryString;_eglQueryString.sig="ppi";var _eglBindAPI=api=>{if(api==12448){EGL.setErrorCode(12288);return 1}EGL.setErrorCode(12300);return 0};Module["_eglBindAPI"]=_eglBindAPI;_eglBindAPI.sig="ii";var _eglQueryAPI=()=>{EGL.setErrorCode(12288);return 12448};Module["_eglQueryAPI"]=_eglQueryAPI;_eglQueryAPI.sig="i";var _eglWaitClient=()=>{EGL.setErrorCode(12288);return 1};Module["_eglWaitClient"]=_eglWaitClient;_eglWaitClient.sig="i";var _eglWaitNative=nativeEngineId=>{EGL.setErrorCode(12288);return 1};Module["_eglWaitNative"]=_eglWaitNative;_eglWaitNative.sig="ii";var _eglWaitGL=_eglWaitClient;Module["_eglWaitGL"]=_eglWaitGL;_eglWaitGL.sig="i";var _eglSwapInterval=(display,interval)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval);EGL.setErrorCode(12288);return 1};Module["_eglSwapInterval"]=_eglSwapInterval;_eglSwapInterval.sig="ipi";var _eglMakeCurrent=(display,draw,read,context)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=0&&context!=62004){EGL.setErrorCode(12294);return 0}if(read!=0&&read!=62006||draw!=0&&draw!=62006){EGL.setErrorCode(12301);return 0}GL.makeContextCurrent(context?EGL.context:null);EGL.currentContext=context;EGL.currentDrawSurface=draw;EGL.currentReadSurface=read;EGL.setErrorCode(12288);return 1};Module["_eglMakeCurrent"]=_eglMakeCurrent;_eglMakeCurrent.sig="ipppp";var _eglGetCurrentContext=()=>EGL.currentContext;Module["_eglGetCurrentContext"]=_eglGetCurrentContext;_eglGetCurrentContext.sig="p";var _eglGetCurrentSurface=readdraw=>{if(readdraw==12378){return EGL.currentReadSurface}else if(readdraw==12377){return EGL.currentDrawSurface}else{EGL.setErrorCode(12300);return 0}};Module["_eglGetCurrentSurface"]=_eglGetCurrentSurface;_eglGetCurrentSurface.sig="pi";var _eglGetCurrentDisplay=()=>EGL.currentContext?62e3:0;Module["_eglGetCurrentDisplay"]=_eglGetCurrentDisplay;_eglGetCurrentDisplay.sig="p";var _eglSwapBuffers=(dpy,surface)=>{if(!EGL.defaultDisplayInitialized){EGL.setErrorCode(12289)}else if(!Module.ctx){EGL.setErrorCode(12290)}else if(Module.ctx.isContextLost()){EGL.setErrorCode(12302)}else{EGL.setErrorCode(12288);return 1}return 0};Module["_eglSwapBuffers"]=_eglSwapBuffers;_eglSwapBuffers.sig="ipp";var _eglReleaseThread=()=>{EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.setErrorCode(12288);return 1};Module["_eglReleaseThread"]=_eglReleaseThread;_eglReleaseThread.sig="i";var _SDL_GetTicks=()=>Date.now()-SDL.startTime|0;Module["_SDL_GetTicks"]=_SDL_GetTicks;_SDL_GetTicks.sig="i";var _SDL_LockSurface=surf=>{var surfData=SDL.surfaces[surf];surfData.locked++;if(surfData.locked>1)return 0;if(!surfData.buffer){surfData.buffer=_malloc(surfData.width*surfData.height*4);HEAPU32[surf+20>>2]=surfData.buffer}HEAPU32[surf+20>>2]=surfData.buffer;if(surf==SDL.screen&&Module.screenIsReadOnly&&surfData.image)return 0;if(SDL.defaults.discardOnLock){if(!surfData.image){surfData.image=surfData.ctx.createImageData(surfData.width,surfData.height)}if(!SDL.defaults.opaqueFrontBuffer)return}else{surfData.image=surfData.ctx.getImageData(0,0,surfData.width,surfData.height)}if(surf==SDL.screen&&SDL.defaults.opaqueFrontBuffer){var data=surfData.image.data;var num=data.length;for(var i=0;i>2],y:HEAP32[rect+4>>2],w:HEAP32[rect+8>>2],h:HEAP32[rect+12>>2]}},updateRect(rect,r){HEAP32[rect>>2]=r.x;HEAP32[rect+4>>2]=r.y;HEAP32[rect+8>>2]=r.w;HEAP32[rect+12>>2]=r.h},intersectionOfRects(first,second){var leftX=Math.max(first.x,second.x);var leftY=Math.max(first.y,second.y);var rightX=Math.min(first.x+first.w,second.x+second.w);var rightY=Math.min(first.y+first.h,second.y+second.h);return{x:leftX,y:leftY,w:Math.max(leftX,rightX)-leftX,h:Math.max(leftY,rightY)-leftY}},checkPixelFormat(fmt){},loadColorToCSSRGB(color){var rgba=HEAP32[color>>2];return"rgb("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+")"},loadColorToCSSRGBA(color){var rgba=HEAP32[color>>2];return"rgba("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+","+(rgba>>24&255)/255+")"},translateColorToCSSRGBA:rgba=>"rgba("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+","+(rgba>>>24)/255+")",translateRGBAToCSSRGBA:(r,g,b,a)=>"rgba("+(r&255)+","+(g&255)+","+(b&255)+","+(a&255)/255+")",translateRGBAToColor:(r,g,b,a)=>r|g<<8|b<<16|a<<24,makeSurface(width,height,flags,usePageCanvas,source,rmask,gmask,bmask,amask){var is_SDL_HWSURFACE=flags&1;var is_SDL_HWPALETTE=flags&2097152;var is_SDL_OPENGL=flags&67108864;var surf=_malloc(60);var pixelFormat=_malloc(44);var bpp=is_SDL_HWPALETTE?1:4;var buffer=0;if(!is_SDL_HWSURFACE&&!is_SDL_OPENGL){buffer=_malloc(width*height*4)}HEAP32[surf>>2]=flags;HEAPU32[surf+4>>2]=pixelFormat;HEAP32[surf+8>>2]=width;HEAP32[surf+12>>2]=height;HEAP32[surf+16>>2]=width*bpp;HEAPU32[surf+20>>2]=buffer;HEAP32[surf+36>>2]=0;HEAP32[surf+40>>2]=0;HEAP32[surf+44>>2]=Module["canvas"].width;HEAP32[surf+48>>2]=Module["canvas"].height;HEAP32[surf+56>>2]=1;HEAP32[pixelFormat>>2]=-2042224636;HEAP32[pixelFormat+4>>2]=0;HEAP8[pixelFormat+8]=bpp*8;HEAP8[pixelFormat+9]=bpp;HEAP32[pixelFormat+12>>2]=rmask||255;HEAP32[pixelFormat+16>>2]=gmask||65280;HEAP32[pixelFormat+20>>2]=bmask||16711680;HEAP32[pixelFormat+24>>2]=amask||4278190080;SDL.GL=SDL.GL||is_SDL_OPENGL;var canvas;if(!usePageCanvas){if(SDL.canvasPool.length>0){canvas=SDL.canvasPool.pop()}else{canvas=document.createElement("canvas")}canvas.width=width;canvas.height=height}else{canvas=Module["canvas"]}var webGLContextAttributes={antialias:SDL.glAttributes[13]!=0&&SDL.glAttributes[14]>1,depth:SDL.glAttributes[6]>0,stencil:SDL.glAttributes[7]>0,alpha:SDL.glAttributes[3]>0};var ctx=Browser.createContext(canvas,is_SDL_OPENGL,usePageCanvas,webGLContextAttributes);SDL.surfaces[surf]={width:width,height:height,canvas:canvas,ctx:ctx,surf:surf,buffer:buffer,pixelFormat:pixelFormat,alpha:255,flags:flags,locked:0,usePageCanvas:usePageCanvas,source:source,isFlagSet:flag=>flags&flag};return surf},copyIndexedColorData(surfData,rX,rY,rW,rH){if(!surfData.colors){return}var fullWidth=Module["canvas"].width;var fullHeight=Module["canvas"].height;var startX=rX||0;var startY=rY||0;var endX=(rW||fullWidth-startX)+startX;var endY=(rH||fullHeight-startY)+startY;var buffer=surfData.buffer;if(!surfData.image.data32){surfData.image.data32=new Uint32Array(surfData.image.data.buffer)}var data32=surfData.image.data32;var colors32=surfData.colors32;for(var y=startY;y>2];if(refcount>1){HEAP32[refcountPointer>>2]=refcount-1;return}var info=SDL.surfaces[surf];if(!info.usePageCanvas&&info.canvas)SDL.canvasPool.push(info.canvas);if(info.buffer)_free(info.buffer);_free(info.pixelFormat);_free(surf);SDL.surfaces[surf]=null;if(surf===SDL.screen){SDL.screen=null}},blitSurface(src,srcrect,dst,dstrect,scale){var srcData=SDL.surfaces[src];var dstData=SDL.surfaces[dst];var sr,dr;if(srcrect){sr=SDL.loadRect(srcrect)}else{sr={x:0,y:0,w:srcData.width,h:srcData.height}}if(dstrect){dr=SDL.loadRect(dstrect)}else{dr={x:0,y:0,w:srcData.width,h:srcData.height}}if(dstData.clipRect){var widthScale=!scale||sr.w===0?1:sr.w/dr.w;var heightScale=!scale||sr.h===0?1:sr.h/dr.h;dr=SDL.intersectionOfRects(dstData.clipRect,dr);sr.w=dr.w*widthScale;sr.h=dr.h*heightScale;if(dstrect){SDL.updateRect(dstrect,dr)}}var blitw,blith;if(scale){blitw=dr.w;blith=dr.h}else{blitw=sr.w;blith=sr.h}if(sr.w===0||sr.h===0||blitw===0||blith===0){return 0}var oldAlpha=dstData.ctx.globalAlpha;dstData.ctx.globalAlpha=srcData.alpha/255;dstData.ctx.drawImage(srcData.canvas,sr.x,sr.y,sr.w,sr.h,dr.x,dr.y,blitw,blith);dstData.ctx.globalAlpha=oldAlpha;if(dst!=SDL.screen){warnOnce("WARNING: copying canvas data to memory for compatibility");_SDL_LockSurface(dst);dstData.locked--}return 0},downFingers:{},savedKeydown:null,receiveEvent(event){function unpressAllPressedKeys(){for(var code in SDL.keyboardMap){SDL.events.push({type:"keyup",keyCode:SDL.keyboardMap[code]})}}switch(event.type){case"touchstart":case"touchmove":{event.preventDefault();var touches=[];if(event.type==="touchstart"){for(var i=0;i0?Math.max(delta,1):Math.min(delta,-1);var button=delta>0?3:4;SDL.events.push({type:"mousedown",button:button,pageX:event.pageX,pageY:event.pageY});SDL.events.push({type:"mouseup",button:button,pageX:event.pageX,pageY:event.pageY});SDL.events.push({type:"wheel",deltaX:0,deltaY:delta});event.preventDefault();break;case"mousemove":if(SDL.DOMButtons[0]===1){SDL.events.push({type:"touchmove",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}})}if(Browser.pointerLock){if("mozMovementX"in event){event["movementX"]=event["mozMovementX"];event["movementY"]=event["mozMovementY"]}if(event["movementX"]==0&&event["movementY"]==0){event.preventDefault();return}}case"keydown":case"keyup":case"keypress":case"mousedown":case"mouseup":if(event.type!=="keydown"||!SDL.unicode&&!SDL.textInput||(event.keyCode===8||event.keyCode===9)){event.preventDefault()}if(event.type=="mousedown"){SDL.DOMButtons[event.button]=1;SDL.events.push({type:"touchstart",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}})}else if(event.type=="mouseup"){if(!SDL.DOMButtons[event.button]){return}SDL.events.push({type:"touchend",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}});SDL.DOMButtons[event.button]=0}if(event.type==="keydown"||event.type==="mousedown"){SDL.canRequestFullscreen=true}else if(event.type==="keyup"||event.type==="mouseup"){if(SDL.isRequestingFullscreen){Module["requestFullscreen"](true,true);SDL.isRequestingFullscreen=false}SDL.canRequestFullscreen=false}if(event.type==="keypress"&&SDL.savedKeydown){SDL.savedKeydown.keypressCharCode=event.charCode;SDL.savedKeydown=null}else if(event.type==="keydown"){SDL.savedKeydown=event}if(event.type!=="keypress"||SDL.textInput){SDL.events.push(event)}break;case"mouseout":for(var i=0;i<3;i++){if(SDL.DOMButtons[i]){SDL.events.push({type:"mouseup",button:i,pageX:event.pageX,pageY:event.pageY});SDL.DOMButtons[i]=0}}event.preventDefault();break;case"focus":SDL.events.push(event);event.preventDefault();break;case"blur":SDL.events.push(event);unpressAllPressedKeys();event.preventDefault();break;case"visibilitychange":SDL.events.push({type:"visibilitychange",visible:!document.hidden});unpressAllPressedKeys();event.preventDefault();break;case"unload":if(Browser.mainLoop.runner){SDL.events.push(event);Browser.mainLoop.runner()}return;case"resize":SDL.events.push(event);if(event.preventDefault){event.preventDefault()}break}if(SDL.events.length>=1e4){err("SDL event queue full, dropping events");SDL.events=SDL.events.slice(0,1e4)}SDL.flushEventsToHandler();return},lookupKeyCodeForEvent(event){var code=event.keyCode;if(code>=65&&code<=90){code+=32}else{code=SDL.keyCodes[event.keyCode]||event.keyCode;if(event.location===2&&code>=(224|1<<10)&&code<=(227|1<<10)){code+=4}}return code},handleEvent(event){if(event.handled)return;event.handled=true;switch(event.type){case"touchstart":case"touchend":case"touchmove":{Browser.calculateMouseEvent(event);break}case"keydown":case"keyup":{var down=event.type==="keydown";var code=SDL.lookupKeyCodeForEvent(event);HEAP8[SDL.keyboardState+code]=down;SDL.modState=(HEAP8[SDL.keyboardState+1248]?64:0)|(HEAP8[SDL.keyboardState+1249]?1:0)|(HEAP8[SDL.keyboardState+1250]?256:0)|(HEAP8[SDL.keyboardState+1252]?128:0)|(HEAP8[SDL.keyboardState+1253]?2:0)|(HEAP8[SDL.keyboardState+1254]?512:0);if(down){SDL.keyboardMap[code]=event.keyCode}else{delete SDL.keyboardMap[code]}break}case"mousedown":case"mouseup":if(event.type=="mousedown"){SDL.buttonState|=1<0){if(SDL.makeCEvent(SDL.events.shift(),ptr)!==false)return 1}return 0}return SDL.events.length>0},makeCEvent(event,ptr){if(typeof event=="number"){_memcpy(ptr,event,28);_free(event);return}SDL.handleEvent(event);switch(event.type){case"keydown":case"keyup":{var down=event.type==="keydown";var key=SDL.lookupKeyCodeForEvent(event);var scan;if(key>=1024){scan=key-1024}else{scan=SDL.scanCodes[key]||key}HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+8]=down?1:0;HEAP8[ptr+9]=0;HEAP32[ptr+12>>2]=scan;HEAP32[ptr+16>>2]=key;HEAP16[ptr+20>>1]=SDL.modState;HEAP32[ptr+24>>2]=event.keypressCharCode||key;break}case"keypress":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];var cStr=intArrayFromString(String.fromCharCode(event.charCode));for(var i=0;i>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP32[ptr+8>>2]=0;HEAP32[ptr+12>>2]=0;HEAP8[ptr+16]=event.button+1;HEAP8[ptr+17]=down?1:0;HEAP32[ptr+20>>2]=Browser.mouseX;HEAP32[ptr+24>>2]=Browser.mouseY}else{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP32[ptr+8>>2]=0;HEAP32[ptr+12>>2]=0;HEAP32[ptr+16>>2]=SDL.buttonState;HEAP32[ptr+20>>2]=Browser.mouseX;HEAP32[ptr+24>>2]=Browser.mouseY;HEAP32[ptr+28>>2]=Browser.mouseMovementX;HEAP32[ptr+32>>2]=Browser.mouseMovementY}break}case"wheel":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+16>>2]=event.deltaX;HEAP32[ptr+20>>2]=event.deltaY;break}case"touchstart":case"touchend":case"touchmove":{var touch=event.touch;if(!Browser.touches[touch.identifier])break;var w=Module["canvas"].width;var h=Module["canvas"].height;var x=Browser.touches[touch.identifier].x/w;var y=Browser.touches[touch.identifier].y/h;var lx=Browser.lastTouches[touch.identifier].x/w;var ly=Browser.lastTouches[touch.identifier].y/h;var dx=x-lx;var dy=y-ly;if(touch["deviceID"]===undefined)touch.deviceID=SDL.TOUCH_DEFAULT_ID;if(dx===0&&dy===0&&event.type==="touchmove")return false;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=_SDL_GetTicks();HEAP64[ptr+8>>3]=BigInt(touch.deviceID);HEAP64[ptr+16>>3]=BigInt(touch.identifier);HEAPF32[ptr+24>>2]=x;HEAPF32[ptr+28>>2]=y;HEAPF32[ptr+32>>2]=dx;HEAPF32[ptr+36>>2]=dy;if(touch.force!==undefined){HEAPF32[ptr+40>>2]=touch.force}else{HEAPF32[ptr+40>>2]=event.type=="touchend"?0:1}break}case"unload":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];break}case"resize":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=event.w;HEAP32[ptr+8>>2]=event.h;break}case"joystick_button_up":case"joystick_button_down":{var state=event.type==="joystick_button_up"?0:1;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+4]=event.index;HEAP8[ptr+5]=event.button;HEAP8[ptr+6]=state;break}case"joystick_axis_motion":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+4]=event.index;HEAP8[ptr+5]=event.axis;HEAP32[ptr+8>>2]=SDL.joystickAxisValueConversion(event.value);break}case"focus":{var SDL_WINDOWEVENT_FOCUS_GAINED=12;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP8[ptr+8]=SDL_WINDOWEVENT_FOCUS_GAINED;break}case"blur":{var SDL_WINDOWEVENT_FOCUS_LOST=13;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP8[ptr+8]=SDL_WINDOWEVENT_FOCUS_LOST;break}case"visibilitychange":{var SDL_WINDOWEVENT_SHOWN=1;var SDL_WINDOWEVENT_HIDDEN=2;var visibilityEventID=event.visible?SDL_WINDOWEVENT_SHOWN:SDL_WINDOWEVENT_HIDDEN;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP8[ptr+8]=visibilityEventID;break}default:throw"Unhandled SDL event: "+event.type}},makeFontString(height,fontName){if(fontName.charAt(0)!="'"&&fontName.charAt(0)!='"'){fontName='"'+fontName+'"'}return height+"px "+fontName+", serif"},estimateTextWidth(fontData,text){var h=fontData.size;var fontString=SDL.makeFontString(h,fontData.name);var tempCtx=SDL.ttfContext;tempCtx.font=fontString;var ret=tempCtx.measureText(text).width|0;return ret},allocateChannels(num){if(SDL.numChannels&&SDL.numChannels>=num&&num!=0)return;SDL.numChannels=num;SDL.channels=[];for(var i=0;i{if(!audio.paused)SDL.playWebAudio(audio)});return}audio.webAudioNode=SDL.audioContext["createBufferSource"]();audio.webAudioNode["buffer"]=webAudio.decodedBuffer;audio.webAudioNode["loop"]=audio.loop;audio.webAudioNode["onended"]=audio["onended"];audio.webAudioPannerNode=SDL.audioContext["createPanner"]();audio.webAudioPannerNode["setPosition"](0,0,-.5);audio.webAudioPannerNode["panningModel"]="equalpower";audio.webAudioGainNode=SDL.audioContext["createGain"]();audio.webAudioGainNode["gain"]["value"]=audio.volume;audio.webAudioNode["connect"](audio.webAudioPannerNode);audio.webAudioPannerNode["connect"](audio.webAudioGainNode);audio.webAudioGainNode["connect"](SDL.audioContext["destination"]);audio.webAudioNode["start"](0,audio.currentPosition);audio.startTime=SDL.audioContext["currentTime"]-audio.currentPosition}catch(e){err(`playWebAudio failed: ${e}`)}},pauseWebAudio(audio){if(!audio)return;if(audio.webAudioNode){try{audio.currentPosition=(SDL.audioContext["currentTime"]-audio.startTime)%audio.resource.webAudio.decodedBuffer.duration;audio.webAudioNode["onended"]=undefined;audio.webAudioNode.stop(0);audio.webAudioNode=undefined}catch(e){err(`pauseWebAudio failed: ${e}`)}}audio.paused=true},openAudioContext(){if(!SDL.audioContext){if(typeof AudioContext!="undefined")SDL.audioContext=new AudioContext;else if(typeof webkitAudioContext!="undefined")SDL.audioContext=new webkitAudioContext}},webAudioAvailable:()=>!!SDL.audioContext,fillWebAudioBufferFromHeap(heapPtr,sizeSamplesPerChannel,dstAudioBuffer){var audio=SDL.audio;var numChannels=audio.channels;for(var c=0;c>1]/32768}}else if(audio.format==8){for(var j=0;j=0?v-128:v+128)/128}}else if(audio.format==33056){for(var j=0;j>2]}}else{throw"Invalid SDL audio format "+audio.format+"!"}}},joystickEventState:1,lastJoystickState:{},joystickNamePool:{},recordJoystickState(joystick,state){var buttons=new Array(state.buttons.length);for(var i=0;i0},queryJoysticks(){for(var joystick in SDL.lastJoystickState){var state=SDL.getGamepad(joystick-1);var prevState=SDL.lastJoystickState[joystick];if(typeof state=="undefined")return;if(state===null)return;if(typeof state.timestamp!="number"||state.timestamp!=prevState.timestamp||!state.timestamp){var i;for(i=0;ideviceIndex&&deviceIndex>=0){return gamepads[deviceIndex]}return null}};Module["SDL"]=SDL;var _SDL_Linked_Version=()=>{if(SDL.version===null){SDL.version=_malloc(3);HEAP8[SDL.version+0]=1;HEAP8[SDL.version+1]=3;HEAP8[SDL.version+2]=0}return SDL.version};Module["_SDL_Linked_Version"]=_SDL_Linked_Version;_SDL_Linked_Version.sig="p";var _SDL_Init=initFlags=>{SDL.startTime=Date.now();SDL.initFlags=initFlags;if(!Module["doNotCaptureKeyboard"]){var keyboardListeningElement=Module["keyboardListeningElement"]||document;keyboardListeningElement.addEventListener("keydown",SDL.receiveEvent);keyboardListeningElement.addEventListener("keyup",SDL.receiveEvent);keyboardListeningElement.addEventListener("keypress",SDL.receiveEvent);window.addEventListener("focus",SDL.receiveEvent);window.addEventListener("blur",SDL.receiveEvent);document.addEventListener("visibilitychange",SDL.receiveEvent)}window.addEventListener("unload",SDL.receiveEvent);SDL.keyboardState=_malloc(65536);zeroMemory(SDL.keyboardState,65536);SDL.DOMEventToSDLEvent["keydown"]=768;SDL.DOMEventToSDLEvent["keyup"]=769;SDL.DOMEventToSDLEvent["keypress"]=771;SDL.DOMEventToSDLEvent["mousedown"]=1025;SDL.DOMEventToSDLEvent["mouseup"]=1026;SDL.DOMEventToSDLEvent["mousemove"]=1024;SDL.DOMEventToSDLEvent["wheel"]=1027;SDL.DOMEventToSDLEvent["touchstart"]=1792;SDL.DOMEventToSDLEvent["touchend"]=1793;SDL.DOMEventToSDLEvent["touchmove"]=1794;SDL.DOMEventToSDLEvent["unload"]=256;SDL.DOMEventToSDLEvent["resize"]=28673;SDL.DOMEventToSDLEvent["visibilitychange"]=512;SDL.DOMEventToSDLEvent["focus"]=512;SDL.DOMEventToSDLEvent["blur"]=512;SDL.DOMEventToSDLEvent["joystick_axis_motion"]=1536;SDL.DOMEventToSDLEvent["joystick_button_down"]=1539;SDL.DOMEventToSDLEvent["joystick_button_up"]=1540;return 0};Module["_SDL_Init"]=_SDL_Init;_SDL_Init.sig="ii";var _SDL_WasInit=flags=>{if(SDL.startTime===null){_SDL_Init(0)}return 1};Module["_SDL_WasInit"]=_SDL_WasInit;_SDL_WasInit.sig="ii";var _SDL_GetVideoInfo=()=>{var ret=_malloc(20);zeroMemory(ret,3);HEAP32[ret+12>>2]=Module["canvas"].width;HEAP32[ret+16>>2]=Module["canvas"].height;return ret};Module["_SDL_GetVideoInfo"]=_SDL_GetVideoInfo;_SDL_GetVideoInfo.sig="p";var _SDL_ListModes=(format,flags)=>-1;Module["_SDL_ListModes"]=_SDL_ListModes;_SDL_ListModes.sig="ppi";var _SDL_VideoModeOK=(width,height,depth,flags)=>depth;Module["_SDL_VideoModeOK"]=_SDL_VideoModeOK;_SDL_VideoModeOK.sig="iiiii";var _SDL_VideoDriverName=(buf,max_size)=>{if(SDL.startTime===null){return 0}var driverName=[101,109,115,99,114,105,112,116,101,110,95,115,100,108,95,100,114,105,118,101,114];var index=0;var size=driverName.length;if(max_size<=size){size=max_size-1}while(index{["touchstart","touchend","touchmove","mousedown","mouseup","mousemove","mousewheel","wheel","mouseout","DOMMouseScroll"].forEach(e=>Module["canvas"].addEventListener(e,SDL.receiveEvent,true));var canvas=Module["canvas"];if(width==0&&height==0){width=canvas.width;height=canvas.height}if(!SDL.addedResizeListener){SDL.addedResizeListener=true;Browser.resizeListeners.push((w,h)=>{if(!SDL.settingVideoMode){SDL.receiveEvent({type:"resize",w:w,h:h})}})}SDL.settingVideoMode=true;Browser.setCanvasSize(width,height);SDL.settingVideoMode=false;if(SDL.screen){SDL.freeSurface(SDL.screen);assert(!SDL.screen)}if(SDL.GL)flags=flags|67108864;SDL.screen=SDL.makeSurface(width,height,flags,true,"screen");return SDL.screen};Module["_SDL_SetVideoMode"]=_SDL_SetVideoMode;_SDL_SetVideoMode.sig="piiii";var _SDL_GetVideoSurface=()=>SDL.screen;Module["_SDL_GetVideoSurface"]=_SDL_GetVideoSurface;_SDL_GetVideoSurface.sig="p";var _SDL_AudioQuit=()=>{for(var i=0;iout("SDL_VideoQuit called (and ignored)");Module["_SDL_VideoQuit"]=_SDL_VideoQuit;_SDL_VideoQuit.sig="v";var _SDL_QuitSubSystem=flags=>out("SDL_QuitSubSystem called (and ignored)");Module["_SDL_QuitSubSystem"]=_SDL_QuitSubSystem;_SDL_QuitSubSystem.sig="vi";var _SDL_Quit=()=>{_SDL_AudioQuit();out("SDL_Quit called (and ignored)")};Module["_SDL_Quit"]=_SDL_Quit;_SDL_Quit.sig="v";var _SDL_UnlockSurface=surf=>{assert(!SDL.GL);var surfData=SDL.surfaces[surf];if(!surfData.locked||--surfData.locked>0){return}if(surfData.isFlagSet(2097152)){SDL.copyIndexedColorData(surfData)}else if(!surfData.colors){var data=surfData.image.data;var buffer=surfData.buffer;assert(buffer%4==0,"Invalid buffer offset: "+buffer);var src=buffer>>2;var dst=0;var isScreen=surf==SDL.screen;var num;if(typeof CanvasPixelArray!="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&255;data[dst+2]=val>>16&255;data[dst+3]=isScreen?255:val>>24&255;src++;dst+=4}}else{var data32=new Uint32Array(data.buffer);if(isScreen&&SDL.defaults.opaqueFrontBuffer){num=data32.length;data32.set(HEAP32.subarray(src,src+num));var data8=new Uint8Array(data.buffer);var i=3;var j=i+4*num;if(num%8==0){while(i{};Module["_SDL_Flip"]=_SDL_Flip;_SDL_Flip.sig="ip";var _SDL_UpdateRect=(surf,x,y,w,h)=>{};Module["_SDL_UpdateRect"]=_SDL_UpdateRect;_SDL_UpdateRect.sig="vpiiii";var _SDL_UpdateRects=(surf,numrects,rects)=>{};Module["_SDL_UpdateRects"]=_SDL_UpdateRects;_SDL_UpdateRects.sig="vpip";var _SDL_Delay=delay=>{if(!ENVIRONMENT_IS_WORKER)abort("SDL_Delay called on the main thread! Potential infinite loop, quitting. (consider building with async support like ASYNCIFY)");var now=Date.now();while(Date.now()-now{if(title){_emscripten_set_window_title(title)}icon&&=UTF8ToString(icon)};Module["_SDL_WM_SetCaption"]=_SDL_WM_SetCaption;_SDL_WM_SetCaption.sig="vpp";var _SDL_EnableKeyRepeat=(delay,interval)=>{};Module["_SDL_EnableKeyRepeat"]=_SDL_EnableKeyRepeat;_SDL_EnableKeyRepeat.sig="iii";var _SDL_GetKeyboardState=numKeys=>{if(numKeys){HEAP32[numKeys>>2]=65536}return SDL.keyboardState};Module["_SDL_GetKeyboardState"]=_SDL_GetKeyboardState;_SDL_GetKeyboardState.sig="pp";var _SDL_GetKeyState=()=>_SDL_GetKeyboardState(0);Module["_SDL_GetKeyState"]=_SDL_GetKeyState;var _SDL_GetKeyName=key=>{SDL.keyName||=stringToNewUTF8("unknown key");return SDL.keyName};Module["_SDL_GetKeyName"]=_SDL_GetKeyName;_SDL_GetKeyName.sig="pi";var _SDL_GetModState=()=>SDL.modState;Module["_SDL_GetModState"]=_SDL_GetModState;_SDL_GetModState.sig="i";var _SDL_GetMouseState=(x,y)=>{if(x)HEAP32[x>>2]=Browser.mouseX;if(y)HEAP32[y>>2]=Browser.mouseY;return SDL.buttonState};Module["_SDL_GetMouseState"]=_SDL_GetMouseState;_SDL_GetMouseState.sig="ipp";var _SDL_WarpMouse=(x,y)=>{};Module["_SDL_WarpMouse"]=_SDL_WarpMouse;_SDL_WarpMouse.sig="vii";var _SDL_ShowCursor=toggle=>{switch(toggle){case 0:if(Browser.isFullscreen){Module["canvas"].requestPointerLock();return 0}return 1;case 1:Module["canvas"].exitPointerLock();return 1;case-1:return!Browser.pointerLock;default:err(`SDL_ShowCursor called with unknown toggle parameter value: ${toggle}`);break}};Module["_SDL_ShowCursor"]=_SDL_ShowCursor;_SDL_ShowCursor.sig="ii";var _SDL_GetError=()=>{SDL.errorMessage||=stringToNewUTF8("unknown SDL-emscripten error");return SDL.errorMessage};Module["_SDL_GetError"]=_SDL_GetError;_SDL_GetError.sig="p";var _SDL_SetError=(fmt,varargs)=>{};Module["_SDL_SetError"]=_SDL_SetError;_SDL_SetError.sig="vpp";var _SDL_CreateRGBSurface=(flags,width,height,depth,rmask,gmask,bmask,amask)=>SDL.makeSurface(width,height,flags,false,"CreateRGBSurface",rmask,gmask,bmask,amask);Module["_SDL_CreateRGBSurface"]=_SDL_CreateRGBSurface;_SDL_CreateRGBSurface.sig="piiiiiiii";var _SDL_CreateRGBSurfaceFrom=(pixels,width,height,depth,pitch,rmask,gmask,bmask,amask)=>{var surf=SDL.makeSurface(width,height,0,false,"CreateRGBSurfaceFrom",rmask,gmask,bmask,amask);if(depth!==32){err("TODO: Partially unimplemented SDL_CreateRGBSurfaceFrom called!");return surf}var data=SDL.surfaces[surf];var image=data.ctx.createImageData(width,height);var pitchOfDst=width*4;for(var row=0;row{if(format){SDL.checkPixelFormat(format)}var oldData=SDL.surfaces[surf];var ret=SDL.makeSurface(oldData.width,oldData.height,oldData.flags,false,"copy:"+oldData.source);var newData=SDL.surfaces[ret];newData.ctx.globalCompositeOperation="copy";newData.ctx.drawImage(oldData.canvas,0,0);newData.ctx.globalCompositeOperation=oldData.ctx.globalCompositeOperation;return ret};Module["_SDL_ConvertSurface"]=_SDL_ConvertSurface;_SDL_ConvertSurface.sig="pppi";var _SDL_DisplayFormatAlpha=surf=>_SDL_ConvertSurface(surf,0,0);Module["_SDL_DisplayFormatAlpha"]=_SDL_DisplayFormatAlpha;_SDL_DisplayFormatAlpha.sig="pp";var _SDL_FreeSurface=surf=>{if(surf)SDL.freeSurface(surf)};Module["_SDL_FreeSurface"]=_SDL_FreeSurface;_SDL_FreeSurface.sig="vp";var _SDL_UpperBlit=(src,srcrect,dst,dstrect)=>SDL.blitSurface(src,srcrect,dst,dstrect,false);Module["_SDL_UpperBlit"]=_SDL_UpperBlit;_SDL_UpperBlit.sig="ipppp";var _SDL_UpperBlitScaled=(src,srcrect,dst,dstrect)=>SDL.blitSurface(src,srcrect,dst,dstrect,true);Module["_SDL_UpperBlitScaled"]=_SDL_UpperBlitScaled;_SDL_UpperBlitScaled.sig="ipppp";var _SDL_LowerBlit=_SDL_UpperBlit;Module["_SDL_LowerBlit"]=_SDL_LowerBlit;_SDL_LowerBlit.sig="ipppp";var _SDL_LowerBlitScaled=_SDL_UpperBlitScaled;Module["_SDL_LowerBlitScaled"]=_SDL_LowerBlitScaled;_SDL_LowerBlitScaled.sig="ipppp";var _SDL_GetClipRect=(surf,rect)=>{assert(rect);var surfData=SDL.surfaces[surf];var r=surfData.clipRect||{x:0,y:0,w:surfData.width,h:surfData.height};SDL.updateRect(rect,r)};Module["_SDL_GetClipRect"]=_SDL_GetClipRect;_SDL_GetClipRect.sig="vpp";var _SDL_SetClipRect=(surf,rect)=>{var surfData=SDL.surfaces[surf];if(rect){surfData.clipRect=SDL.intersectionOfRects({x:0,y:0,w:surfData.width,h:surfData.height},SDL.loadRect(rect))}else{delete surfData.clipRect}};Module["_SDL_SetClipRect"]=_SDL_SetClipRect;_SDL_SetClipRect.sig="ipp";var _SDL_FillRect=(surf,rect,color)=>{var surfData=SDL.surfaces[surf];assert(!surfData.locked);if(surfData.isFlagSet(2097152)){color=surfData.colors32[color]}var r=rect?SDL.loadRect(rect):{x:0,y:0,w:surfData.width,h:surfData.height};if(surfData.clipRect){r=SDL.intersectionOfRects(surfData.clipRect,r);if(rect){SDL.updateRect(rect,r)}}surfData.ctx.save();surfData.ctx.fillStyle=SDL.translateColorToCSSRGBA(color);surfData.ctx.fillRect(r.x,r.y,r.w,r.h);surfData.ctx.restore();return 0};Module["_SDL_FillRect"]=_SDL_FillRect;_SDL_FillRect.sig="ippi";var _zoomSurface=(src,x,y,smooth)=>{var srcData=SDL.surfaces[src];var w=srcData.width*x;var h=srcData.height*y;var ret=SDL.makeSurface(Math.abs(w),Math.abs(h),srcData.flags,false,"zoomSurface");var dstData=SDL.surfaces[ret];if(x>=0&&y>=0)dstData.ctx.drawImage(srcData.canvas,0,0,w,h);else{dstData.ctx.save();dstData.ctx.scale(x<0?-1:1,y<0?-1:1);dstData.ctx.drawImage(srcData.canvas,w<0?w:0,h<0?h:0,Math.abs(w),Math.abs(h));dstData.ctx.restore()}return ret};Module["_zoomSurface"]=_zoomSurface;_zoomSurface.sig="ppddi";var _rotozoomSurface=(src,angle,zoom,smooth)=>{if(angle%360===0){return _zoomSurface(src,zoom,zoom,smooth)}var srcData=SDL.surfaces[src];var w=srcData.width*zoom;var h=srcData.height*zoom;var diagonal=Math.ceil(Math.sqrt(Math.pow(w,2)+Math.pow(h,2)));var ret=SDL.makeSurface(diagonal,diagonal,srcData.flags,false,"rotozoomSurface");var dstData=SDL.surfaces[ret];dstData.ctx.translate(diagonal/2,diagonal/2);dstData.ctx.rotate(-angle*Math.PI/180);dstData.ctx.drawImage(srcData.canvas,-w/2,-h/2,w,h);return ret};Module["_rotozoomSurface"]=_rotozoomSurface;_rotozoomSurface.sig="ppddi";var _SDL_SetAlpha=(surf,flag,alpha)=>{var surfData=SDL.surfaces[surf];surfData.alpha=alpha;if(!(flag&65536)){surfData.alpha=255}};Module["_SDL_SetAlpha"]=_SDL_SetAlpha;_SDL_SetAlpha.sig="ipii";var _SDL_SetColorKey=(surf,flag,key)=>{warnOnce("SDL_SetColorKey is a no-op for performance reasons");return 0};Module["_SDL_SetColorKey"]=_SDL_SetColorKey;_SDL_SetColorKey.sig="ipii";var _SDL_PollEvent=ptr=>SDL.pollEvent(ptr);Module["_SDL_PollEvent"]=_SDL_PollEvent;_SDL_PollEvent.sig="ip";var _SDL_PushEvent=ptr=>{var copy=_malloc(28);_memcpy(copy,ptr,28);SDL.events.push(copy);return 0};Module["_SDL_PushEvent"]=_SDL_PushEvent;_SDL_PushEvent.sig="ip";var _SDL_PeepEvents=(events,requestedEventCount,action,from,to)=>{switch(action){case 2:{assert(requestedEventCount==1);var index=0;var retrievedEventCount=0;while(indexSDL.events.forEach(SDL.handleEvent);Module["_SDL_PumpEvents"]=_SDL_PumpEvents;_SDL_PumpEvents.sig="v";var _emscripten_SDL_SetEventHandler=(handler,userdata)=>{SDL.eventHandler=handler;SDL.eventHandlerContext=userdata;if(!SDL.eventHandlerTemp)SDL.eventHandlerTemp=_malloc(28)};Module["_emscripten_SDL_SetEventHandler"]=_emscripten_SDL_SetEventHandler;_emscripten_SDL_SetEventHandler.sig="vpp";var _SDL_SetColors=(surf,colors,firstColor,nColors)=>{var surfData=SDL.surfaces[surf];if(!surfData.colors){var buffer=new ArrayBuffer(256*4);surfData.colors=new Uint8Array(buffer);surfData.colors32=new Uint32Array(buffer)}for(var i=0;i_SDL_SetColors(surf,colors,firstColor,nColors);Module["_SDL_SetPalette"]=_SDL_SetPalette;_SDL_SetPalette.sig="ipipii";var _SDL_MapRGB=(fmt,r,g,b)=>{SDL.checkPixelFormat(fmt);return r&255|(g&255)<<8|(b&255)<<16|4278190080};Module["_SDL_MapRGB"]=_SDL_MapRGB;_SDL_MapRGB.sig="ipiii";var _SDL_MapRGBA=(fmt,r,g,b,a)=>{SDL.checkPixelFormat(fmt);return r&255|(g&255)<<8|(b&255)<<16|(a&255)<<24};Module["_SDL_MapRGBA"]=_SDL_MapRGBA;_SDL_MapRGBA.sig="ipiiii";var _SDL_GetRGB=(pixel,fmt,r,g,b)=>{SDL.checkPixelFormat(fmt);if(r){HEAP8[r]=pixel&255}if(g){HEAP8[g]=pixel>>8&255}if(b){HEAP8[b]=pixel>>16&255}};Module["_SDL_GetRGB"]=_SDL_GetRGB;_SDL_GetRGB.sig="vipppp";var _SDL_GetRGBA=(pixel,fmt,r,g,b,a)=>{SDL.checkPixelFormat(fmt);if(r){HEAP8[r]=pixel&255}if(g){HEAP8[g]=pixel>>8&255}if(b){HEAP8[b]=pixel>>16&255}if(a){HEAP8[a]=pixel>>24&255}};Module["_SDL_GetRGBA"]=_SDL_GetRGBA;_SDL_GetRGBA.sig="vippppp";var _SDL_GetAppState=()=>{var state=0;if(Browser.pointerLock){state|=1}if(document.hasFocus()){state|=2}state|=4;return state};Module["_SDL_GetAppState"]=_SDL_GetAppState;_SDL_GetAppState.sig="i";var _SDL_WM_GrabInput=()=>{};Module["_SDL_WM_GrabInput"]=_SDL_WM_GrabInput;_SDL_WM_GrabInput.sig="ii";var _SDL_WM_ToggleFullScreen=surf=>{if(Browser.exitFullscreen()){return 1}if(!SDL.canRequestFullscreen){return 0}SDL.isRequestingFullscreen=true;return 1};Module["_SDL_WM_ToggleFullScreen"]=_SDL_WM_ToggleFullScreen;_SDL_WM_ToggleFullScreen.sig="ip";var _IMG_Init=flags=>flags;Module["_IMG_Init"]=_IMG_Init;_IMG_Init.sig="ii";var _SDL_FreeRW=rwopsID=>{SDL.rwops[rwopsID]=null;while(SDL.rwops.length>0&&SDL.rwops[SDL.rwops.length-1]===null){SDL.rwops.pop()}};Module["_SDL_FreeRW"]=_SDL_FreeRW;_SDL_FreeRW.sig="vp";var _IMG_Load_RW=(rwopsID,freeSrc)=>{var sp=stackSave();try{var cleanup=()=>{stackRestore(sp);if(rwops&&freeSrc)_SDL_FreeRW(rwopsID)};var addCleanup=func=>{var old=cleanup;cleanup=()=>{old();func()}};var callStbImage=(func,params)=>{var x=stackAlloc(4);var y=stackAlloc(4);var comp=stackAlloc(4);var data=Module["_"+func](...params,x,y,comp,0);if(!data)return null;addCleanup(()=>Module["_stbi_image_free"](data));return{rawData:true,data:data,width:HEAP32[x>>2],height:HEAP32[y>>2],size:HEAP32[x>>2]*HEAP32[y>>2]*HEAP32[comp>>2],bpp:HEAP32[comp>>2]}};var rwops=SDL.rwops[rwopsID];if(rwops===undefined){return 0}var raw;var filename=rwops.filename;if(filename===undefined){warnOnce("Only file names that have been preloaded are supported for IMG_Load_RW. Consider using STB_IMAGE=1 if you want synchronous image decoding (see settings.js), or package files with --use-preload-plugins");return 0}if(!raw){filename=PATH_FS.resolve(filename);raw=preloadedImages[filename];if(!raw){if(raw===null)err("Trying to reuse preloaded image, but freePreloadedMediaOnUse is set!");warnOnce("Cannot find preloaded image "+filename);warnOnce("Cannot find preloaded image "+filename+". Consider using STB_IMAGE=1 if you want synchronous image decoding (see settings.js), or package files with --use-preload-plugins");return 0}else if(Module["freePreloadedMediaOnUse"]){preloadedImages[filename]=null}}var surf=SDL.makeSurface(raw.width,raw.height,0,false,"load:"+filename);var surfData=SDL.surfaces[surf];surfData.ctx.globalCompositeOperation="copy";if(!raw.rawData){surfData.ctx.drawImage(raw,0,0,raw.width,raw.height,0,0,raw.width,raw.height)}else{var imageData=surfData.ctx.getImageData(0,0,surfData.width,surfData.height);if(raw.bpp==4){imageData.data.set(HEAPU8.subarray(raw.data,raw.data+raw.size))}else if(raw.bpp==3){var pixels=raw.size/3;var data=imageData.data;var sourcePtr=raw.data;var destPtr=0;for(var i=0;i{var id=SDL.rwops.length;var filename=UTF8ToString(_name);SDL.rwops.push({filename:filename,mimetype:Browser.getMimetype(filename)});return id};Module["_SDL_RWFromFile"]=_SDL_RWFromFile;_SDL_RWFromFile.sig="ppp";var _IMG_Load=filename=>{var rwops=_SDL_RWFromFile(filename,0);var result=_IMG_Load_RW(rwops,1);return result};Module["_IMG_Load"]=_IMG_Load;_IMG_Load.sig="pp";var _IMG_Quit=()=>out("IMG_Quit called (and ignored)");Module["_IMG_Quit"]=_IMG_Quit;_IMG_Quit.sig="v";var _SDL_OpenAudio=(desired,obtained)=>{try{SDL.audio={freq:HEAPU32[desired>>2],format:HEAPU16[desired+4>>1],channels:HEAPU8[desired+6],samples:HEAPU16[desired+8>>1],callback:HEAPU32[desired+16>>2],userdata:HEAPU32[desired+20>>2],paused:true,timer:null};if(SDL.audio.format==8){SDL.audio.silence=128}else if(SDL.audio.format==32784){SDL.audio.silence=0}else if(SDL.audio.format==33056){SDL.audio.silence=0}else{throw"Invalid SDL audio format "+SDL.audio.format+"!"}if(SDL.audio.freq<=0){throw"Unsupported sound frequency "+SDL.audio.freq+"!"}else if(SDL.audio.freq<=22050){SDL.audio.freq=22050}else if(SDL.audio.freq<=32e3){SDL.audio.freq=32e3}else if(SDL.audio.freq<=44100){SDL.audio.freq=44100}else if(SDL.audio.freq<=48e3){SDL.audio.freq=48e3}else if(SDL.audio.freq<=96e3){SDL.audio.freq=96e3}else{throw`Unsupported sound frequency ${SDL.audio.freq}!`}if(SDL.audio.channels==0){SDL.audio.channels=1}else if(SDL.audio.channels<0||SDL.audio.channels>32){throw`Unsupported number of audio channels for SDL audio: ${SDL.audio.channels}!`}else if(SDL.audio.channels!=1&&SDL.audio.channels!=2){out(`Warning: Using untested number of audio channels ${SDL.audio.channels}`)}if(SDL.audio.samples<128||SDL.audio.samples>524288){throw`Unsupported audio callback buffer size ${SDL.audio.samples}!`}else if((SDL.audio.samples&SDL.audio.samples-1)!=0){throw`Audio callback buffer size ${SDL.audio.samples} must be a power-of-two!`}var totalSamples=SDL.audio.samples*SDL.audio.channels;if(SDL.audio.format==8){SDL.audio.bytesPerSample=1}else if(SDL.audio.format==32784){SDL.audio.bytesPerSample=2}else if(SDL.audio.format==33056){SDL.audio.bytesPerSample=4}else{throw`Invalid SDL audio format ${SDL.audio.format}!`}SDL.audio.bufferSize=totalSamples*SDL.audio.bytesPerSample;SDL.audio.bufferDurationSecs=SDL.audio.bufferSize/SDL.audio.bytesPerSample/SDL.audio.channels/SDL.audio.freq;SDL.audio.bufferingDelay=50/1e3;SDL.audio.buffer=_malloc(SDL.audio.bufferSize);SDL.audio.numSimultaneouslyQueuedBuffers=Module["SDL_numSimultaneouslyQueuedBuffers"]||5;SDL.audio.queueNewAudioData=()=>{if(!SDL.audio)return;for(var i=0;i=SDL.audio.bufferingDelay+SDL.audio.bufferDurationSecs*SDL.audio.numSimultaneouslyQueuedBuffers)return;getWasmTableEntry(SDL.audio.callback)(SDL.audio.userdata,SDL.audio.buffer,SDL.audio.bufferSize);SDL.audio.pushAudio(SDL.audio.buffer,SDL.audio.bufferSize)}};SDL.audio.caller=()=>{if(!SDL.audio)return;--SDL.audio.numAudioTimersPending;SDL.audio.queueNewAudioData();var secsUntilNextPlayStart=SDL.audio.nextPlayTime-SDL.audioContext["currentTime"];var preemptBufferFeedSecs=SDL.audio.bufferDurationSecs/2;if(SDL.audio.numAudioTimersPending{try{if(SDL.audio.paused)return;var sizeSamples=sizeBytes/SDL.audio.bytesPerSample;var sizeSamplesPerChannel=sizeSamples/SDL.audio.channels;if(sizeSamplesPerChannel!=SDL.audio.samples){throw"Received mismatching audio buffer size!"}var source=SDL.audioContext["createBufferSource"]();var soundBuffer=SDL.audioContext["createBuffer"](SDL.audio.channels,sizeSamplesPerChannel,SDL.audio.freq);source["connect"](SDL.audioContext["destination"]);SDL.fillWebAudioBufferFromHeap(ptr,sizeSamplesPerChannel,soundBuffer);source["buffer"]=soundBuffer;var curtime=SDL.audioContext["currentTime"];var playtime=Math.max(curtime+SDL.audio.bufferingDelay,SDL.audio.nextPlayTime);if(typeof source["start"]!="undefined"){source["start"](playtime)}else if(typeof source["noteOn"]!="undefined"){source["noteOn"](playtime)}SDL.audio.nextPlayTime=playtime+SDL.audio.bufferDurationSecs}catch(e){err(`Web Audio API error playing back audio: ${e.toString()}`)}};if(obtained){HEAP32[obtained>>2]=SDL.audio.freq;HEAP16[obtained+4>>1]=SDL.audio.format;HEAP8[obtained+6]=SDL.audio.channels;HEAP8[obtained+7]=SDL.audio.silence;HEAP16[obtained+8>>1]=SDL.audio.samples;HEAPU32[obtained+16>>2]=SDL.audio.callback;HEAPU32[obtained+20>>2]=SDL.audio.userdata}SDL.allocateChannels(32)}catch(e){err(`Initializing SDL audio threw an exception: "${e.toString()}"! Continuing without audio`);SDL.audio=null;SDL.allocateChannels(0);if(obtained){HEAP32[obtained>>2]=0;HEAP16[obtained+4>>1]=0;HEAP8[obtained+6]=0;HEAP8[obtained+7]=0;HEAP16[obtained+8>>1]=0;HEAPU32[obtained+16>>2]=0;HEAPU32[obtained+20>>2]=0}}if(!SDL.audio){return-1}return 0};Module["_SDL_OpenAudio"]=_SDL_OpenAudio;_SDL_OpenAudio.sig="ipp";var _SDL_PauseAudio=pauseOn=>{if(!SDL.audio){return}if(pauseOn){if(SDL.audio.timer!==undefined){clearTimeout(SDL.audio.timer);SDL.audio.numAudioTimersPending=0;SDL.audio.timer=undefined}}else if(!SDL.audio.timer){SDL.audio.numAudioTimersPending=1;SDL.audio.timer=safeSetTimeout(SDL.audio.caller,1)}SDL.audio.paused=pauseOn};Module["_SDL_PauseAudio"]=_SDL_PauseAudio;_SDL_PauseAudio.sig="vi";var _SDL_CloseAudio=()=>{if(SDL.audio){if(SDL.audio.callbackRemover){SDL.audio.callbackRemover();SDL.audio.callbackRemover=null}_SDL_PauseAudio(1);_free(SDL.audio.buffer);SDL.audio=null;SDL.allocateChannels(0)}};Module["_SDL_CloseAudio"]=_SDL_CloseAudio;_SDL_CloseAudio.sig="v";var _SDL_LockAudio=()=>{};Module["_SDL_LockAudio"]=_SDL_LockAudio;_SDL_LockAudio.sig="v";var _SDL_UnlockAudio=()=>{};Module["_SDL_UnlockAudio"]=_SDL_UnlockAudio;_SDL_UnlockAudio.sig="v";var _SDL_CreateMutex=()=>0;Module["_SDL_CreateMutex"]=_SDL_CreateMutex;_SDL_CreateMutex.sig="p";var _SDL_mutexP=mutex=>0;Module["_SDL_mutexP"]=_SDL_mutexP;_SDL_mutexP.sig="ip";var _SDL_mutexV=mutex=>0;Module["_SDL_mutexV"]=_SDL_mutexV;_SDL_mutexV.sig="ip";var _SDL_DestroyMutex=mutex=>{};Module["_SDL_DestroyMutex"]=_SDL_DestroyMutex;_SDL_DestroyMutex.sig="vp";var _SDL_CreateCond=()=>0;Module["_SDL_CreateCond"]=_SDL_CreateCond;_SDL_CreateCond.sig="p";var _SDL_CondSignal=cond=>{};Module["_SDL_CondSignal"]=_SDL_CondSignal;_SDL_CondSignal.sig="ip";var _SDL_CondWait=(cond,mutex)=>{};Module["_SDL_CondWait"]=_SDL_CondWait;_SDL_CondWait.sig="ipp";var _SDL_DestroyCond=cond=>{};Module["_SDL_DestroyCond"]=_SDL_DestroyCond;_SDL_DestroyCond.sig="vp";var _SDL_StartTextInput=()=>{SDL.textInput=true};Module["_SDL_StartTextInput"]=_SDL_StartTextInput;_SDL_StartTextInput.sig="v";var _SDL_StopTextInput=()=>{SDL.textInput=false};Module["_SDL_StopTextInput"]=_SDL_StopTextInput;_SDL_StopTextInput.sig="v";var _Mix_Init=flags=>{if(!flags)return 0;return 8};Module["_Mix_Init"]=_Mix_Init;_Mix_Init.sig="ii";var _Mix_Quit=()=>{};Module["_Mix_Quit"]=_Mix_Quit;_Mix_Quit.sig="v";var _Mix_OpenAudio=(frequency,format,channels,chunksize)=>{SDL.openAudioContext();autoResumeAudioContext(SDL.audioContext);SDL.allocateChannels(32);SDL.mixerFrequency=frequency;SDL.mixerFormat=format;SDL.mixerNumChannels=channels;SDL.mixerChunkSize=chunksize;return 0};Module["_Mix_OpenAudio"]=_Mix_OpenAudio;_Mix_OpenAudio.sig="iiiii";var _Mix_CloseAudio=_SDL_CloseAudio;Module["_Mix_CloseAudio"]=_Mix_CloseAudio;_Mix_CloseAudio.sig="v";var _Mix_AllocateChannels=num=>{SDL.allocateChannels(num);return num};Module["_Mix_AllocateChannels"]=_Mix_AllocateChannels;_Mix_AllocateChannels.sig="ii";var _Mix_ChannelFinished=func=>{SDL.channelFinished=func};Module["_Mix_ChannelFinished"]=_Mix_ChannelFinished;_Mix_ChannelFinished.sig="vp";var _Mix_Volume=(channel,volume)=>{if(channel==-1){for(var i=0;i{left/=255;right/=255;SDL.setPannerPosition(SDL.channels[channel],right-left,0,.1);return 1};Module["_Mix_SetPanning"]=_Mix_SetPanning;_Mix_SetPanning.sig="iiii";var _Mix_LoadWAV_RW=(rwopsID,freesrc)=>{var rwops=SDL.rwops[rwopsID];if(rwops===undefined)return 0;var filename="";var audio;var webAudio;var bytes;if(rwops.filename!==undefined){filename=PATH_FS.resolve(rwops.filename);var raw=preloadedAudios[filename];if(!raw){if(raw===null)err("Trying to reuse preloaded audio, but freePreloadedMediaOnUse is set!");if(!Module.noAudioDecoding)warnOnce("Cannot find preloaded audio "+filename);try{bytes=FS.readFile(filename)}catch(e){err(`Couldn't find file for: ${filename}`);return 0}}if(Module["freePreloadedMediaOnUse"]){preloadedAudios[filename]=null}audio=raw}else if(rwops.bytes!==undefined){if(SDL.webAudioAvailable())bytes=HEAPU8.buffer.slice(rwops.bytes,rwops.bytes+rwops.count);else bytes=HEAPU8.subarray(rwops.bytes,rwops.bytes+rwops.count)}else{return 0}var arrayBuffer=bytes?bytes.buffer||bytes:bytes;var canPlayWithWebAudio=Module["SDL_canPlayWithWebAudio"]===undefined||Module["SDL_canPlayWithWebAudio"](filename,arrayBuffer);if(bytes!==undefined&&SDL.webAudioAvailable()&&canPlayWithWebAudio){audio=undefined;webAudio={};webAudio.onDecodeComplete=[];var onDecodeComplete=data=>{webAudio.decodedBuffer=data;webAudio.onDecodeComplete.forEach(e=>e());webAudio.onDecodeComplete=undefined};SDL.audioContext["decodeAudioData"](arrayBuffer,onDecodeComplete)}else if(audio===undefined&&bytes){var blob=new Blob([bytes],{type:rwops.mimetype});var url=URL.createObjectURL(blob);audio=new Audio;audio.src=url;audio.mozAudioChannelType="content"}var id=SDL.audios.length;SDL.audios.push({source:filename,audio:audio,webAudio:webAudio});return id};Module["_Mix_LoadWAV_RW"]=_Mix_LoadWAV_RW;_Mix_LoadWAV_RW.sig="ppi";var _Mix_LoadWAV=filename=>{var rwops=_SDL_RWFromFile(filename,0);var result=_Mix_LoadWAV_RW(rwops,0);_SDL_FreeRW(rwops);return result};Module["_Mix_LoadWAV"]=_Mix_LoadWAV;_Mix_LoadWAV.sig="pp";var _Mix_QuickLoad_RAW=(mem,len)=>{var audio;var webAudio;var numSamples=len>>1;var buffer=new Float32Array(numSamples);for(var i=0;i>1]/32768}if(SDL.webAudioAvailable()){webAudio={};webAudio.decodedBuffer=buffer}else{audio=new Audio;audio.mozAudioChannelType="content";audio.numChannels=SDL.mixerNumChannels;audio.frequency=SDL.mixerFrequency}var id=SDL.audios.length;SDL.audios.push({source:"",audio:audio,webAudio:webAudio,buffer:buffer});return id};Module["_Mix_QuickLoad_RAW"]=_Mix_QuickLoad_RAW;_Mix_QuickLoad_RAW.sig="ppi";var _Mix_FreeChunk=id=>{SDL.audios[id]=null};Module["_Mix_FreeChunk"]=_Mix_FreeChunk;_Mix_FreeChunk.sig="vp";var _Mix_ReserveChannels=num=>{SDL.channelMinimumNumber=num};Module["_Mix_ReserveChannels"]=_Mix_ReserveChannels;_Mix_ReserveChannels.sig="ii";var _Mix_PlayChannelTimed=(channel,id,loops,ticks)=>{assert(ticks==-1);var info=SDL.audios[id];if(!info)return-1;if(!info.audio&&!info.webAudio)return-1;if(channel==-1){for(var i=SDL.channelMinimumNumber;i0;Module["_Mix_FadingChannel"]=_Mix_FadingChannel;_Mix_FadingChannel.sig="ii";var _Mix_HaltChannel=channel=>{function halt(channel){var info=SDL.channels[channel];if(info.audio){info.audio.pause();info.audio=null}if(SDL.channelFinished){getWasmTableEntry(SDL.channelFinished)(channel)}}if(channel!=-1){halt(channel)}else{for(var i=0;i{var audio=SDL.music.audio;if(audio){audio.src=audio.src;audio.currentPosition=0;audio.pause()}SDL.music.audio=null;if(SDL.hookMusicFinished){getWasmTableEntry(SDL.hookMusicFinished)()}return 0};Module["_Mix_HaltMusic"]=_Mix_HaltMusic;_Mix_HaltMusic.sig="i";var _Mix_HookMusicFinished=func=>{SDL.hookMusicFinished=func;if(SDL.music.audio){SDL.music.audio["onended"]=_Mix_HaltMusic}};Module["_Mix_HookMusicFinished"]=_Mix_HookMusicFinished;_Mix_HookMusicFinished.sig="vp";var _Mix_VolumeMusic=volume=>SDL.setGetVolume(SDL.music,volume);Module["_Mix_VolumeMusic"]=_Mix_VolumeMusic;_Mix_VolumeMusic.sig="ii";var _Mix_LoadMUS_RW=filename=>_Mix_LoadWAV_RW(filename,0);Module["_Mix_LoadMUS_RW"]=_Mix_LoadMUS_RW;_Mix_LoadMUS_RW.sig="pp";var _Mix_LoadMUS=filename=>{var rwops=_SDL_RWFromFile(filename,0);var result=_Mix_LoadMUS_RW(rwops);_SDL_FreeRW(rwops);return result};Module["_Mix_LoadMUS"]=_Mix_LoadMUS;_Mix_LoadMUS.sig="pp";var _Mix_FreeMusic=_Mix_FreeChunk;Module["_Mix_FreeMusic"]=_Mix_FreeMusic;_Mix_FreeMusic.sig="vp";var _Mix_PlayMusic=(id,loops)=>{if(SDL.music.audio){if(!SDL.music.audio.paused)err(`Music is already playing. ${SDL.music.source}`);SDL.music.audio.pause()}var info=SDL.audios[id];var audio;if(info.webAudio){audio={};audio.resource=info;audio.paused=false;audio.currentPosition=0;audio.play=function(){SDL.playWebAudio(this)};audio.pause=function(){SDL.pauseWebAudio(this)}}else if(info.audio){audio=info.audio}audio["onended"]=function(){if(SDL.music.audio==this)_Mix_HaltMusic()};audio.loop=loops!=0&&loops!=1;audio.volume=SDL.music.volume;SDL.music.audio=audio;audio.play();return 0};Module["_Mix_PlayMusic"]=_Mix_PlayMusic;_Mix_PlayMusic.sig="ipi";var _Mix_PauseMusic=()=>{var audio=SDL.music.audio;audio?.pause()};Module["_Mix_PauseMusic"]=_Mix_PauseMusic;_Mix_PauseMusic.sig="v";var _Mix_ResumeMusic=()=>{var audio=SDL.music.audio;audio?.play()};Module["_Mix_ResumeMusic"]=_Mix_ResumeMusic;_Mix_ResumeMusic.sig="v";var _Mix_FadeInMusicPos=_Mix_PlayMusic;Module["_Mix_FadeInMusicPos"]=_Mix_FadeInMusicPos;_Mix_FadeInMusicPos.sig="ipiid";var _Mix_FadeOutMusic=_Mix_HaltMusic;Module["_Mix_FadeOutMusic"]=_Mix_FadeOutMusic;_Mix_FadeOutMusic.sig="ii";var _Mix_PlayingMusic=()=>SDL.music.audio&&!SDL.music.audio.paused?1:0;Module["_Mix_PlayingMusic"]=_Mix_PlayingMusic;_Mix_PlayingMusic.sig="i";var _Mix_Playing=channel=>{if(channel===-1){var count=0;for(var i=0;i{if(channel===-1){for(var i=0;i{if(channel===-1){var pausedCount=0;for(var i=0;iSDL.music.audio?.paused?1:0;Module["_Mix_PausedMusic"]=_Mix_PausedMusic;_Mix_PausedMusic.sig="i";var _Mix_Resume=channel=>{if(channel===-1){for(var i=0;i{try{var offscreenCanvas=new OffscreenCanvas(0,0);SDL.ttfContext=offscreenCanvas.getContext("2d");if(typeof SDL.ttfContext.measureText!="function"){throw"bad context"}}catch(ex){var canvas=document.createElement("canvas");SDL.ttfContext=canvas.getContext("2d")}return 0};Module["_TTF_Init"]=_TTF_Init;_TTF_Init.sig="i";var _TTF_OpenFont=(name,size)=>{name=PATH.normalize(UTF8ToString(name));var id=SDL.fonts.length;SDL.fonts.push({name:name,size:size});return id};Module["_TTF_OpenFont"]=_TTF_OpenFont;_TTF_OpenFont.sig="ppi";var _TTF_CloseFont=font=>{SDL.fonts[font]=null};Module["_TTF_CloseFont"]=_TTF_CloseFont;_TTF_CloseFont.sig="vp";var _TTF_RenderText_Solid=(font,text,color)=>{text=UTF8ToString(text)||" ";var fontData=SDL.fonts[font];var w=SDL.estimateTextWidth(fontData,text);var h=fontData.size;color=SDL.loadColorToCSSRGB(color);var fontString=SDL.makeFontString(h,fontData.name);var surf=SDL.makeSurface(w,h,0,false,"text:"+text);var surfData=SDL.surfaces[surf];surfData.ctx.save();surfData.ctx.fillStyle=color;surfData.ctx.font=fontString;surfData.ctx.textBaseline="bottom";surfData.ctx.fillText(text,0,h|0);surfData.ctx.restore();return surf};Module["_TTF_RenderText_Solid"]=_TTF_RenderText_Solid;_TTF_RenderText_Solid.sig="pppp";var _TTF_RenderText_Blended=_TTF_RenderText_Solid;Module["_TTF_RenderText_Blended"]=_TTF_RenderText_Blended;_TTF_RenderText_Blended.sig="pppp";var _TTF_RenderText_Shaded=_TTF_RenderText_Solid;Module["_TTF_RenderText_Shaded"]=_TTF_RenderText_Shaded;_TTF_RenderText_Shaded.sig="ppppp";var _TTF_RenderUTF8_Solid=_TTF_RenderText_Solid;Module["_TTF_RenderUTF8_Solid"]=_TTF_RenderUTF8_Solid;_TTF_RenderUTF8_Solid.sig="pppp";var _TTF_SizeText=(font,text,w,h)=>{var fontData=SDL.fonts[font];if(w){HEAP32[w>>2]=SDL.estimateTextWidth(fontData,UTF8ToString(text))}if(h){HEAP32[h>>2]=fontData.size}return 0};Module["_TTF_SizeText"]=_TTF_SizeText;_TTF_SizeText.sig="ipppp";var _TTF_SizeUTF8=_TTF_SizeText;Module["_TTF_SizeUTF8"]=_TTF_SizeUTF8;_TTF_SizeUTF8.sig="ipppp";var _TTF_GlyphMetrics=(font,ch,minx,maxx,miny,maxy,advance)=>{var fontData=SDL.fonts[font];var width=SDL.estimateTextWidth(fontData,String.fromCharCode(ch));if(advance){HEAP32[advance>>2]=width}if(minx){HEAP32[minx>>2]=0}if(maxx){HEAP32[maxx>>2]=width}if(miny){HEAP32[miny>>2]=0}if(maxy){HEAP32[maxy>>2]=fontData.size}};Module["_TTF_GlyphMetrics"]=_TTF_GlyphMetrics;_TTF_GlyphMetrics.sig="ipippppp";var _TTF_FontAscent=font=>{var fontData=SDL.fonts[font];return fontData.size*.98|0};Module["_TTF_FontAscent"]=_TTF_FontAscent;_TTF_FontAscent.sig="ip";var _TTF_FontDescent=font=>{var fontData=SDL.fonts[font];return fontData.size*.02|0};Module["_TTF_FontDescent"]=_TTF_FontDescent;_TTF_FontDescent.sig="ip";var _TTF_FontHeight=font=>{var fontData=SDL.fonts[font];return fontData.size};Module["_TTF_FontHeight"]=_TTF_FontHeight;_TTF_FontHeight.sig="ip";var _TTF_FontLineSkip=_TTF_FontHeight;Module["_TTF_FontLineSkip"]=_TTF_FontLineSkip;_TTF_FontLineSkip.sig="ip";var _TTF_Quit=()=>out("TTF_Quit called (and ignored)");Module["_TTF_Quit"]=_TTF_Quit;_TTF_Quit.sig="v";var SDL_gfx={drawRectangle:(surf,x1,y1,x2,y2,action,cssColor)=>{x1=x1<<16>>16;y1=y1<<16>>16;x2=x2<<16>>16;y2=y2<<16>>16;var surfData=SDL.surfaces[surf];assert(!surfData.locked);var x=x1{x1=x1<<16>>16;y1=y1<<16>>16;x2=x2<<16>>16;y2=y2<<16>>16;var surfData=SDL.surfaces[surf];assert(!surfData.locked);surfData.ctx.save();surfData.ctx.strokeStyle=cssColor;surfData.ctx.beginPath();surfData.ctx.moveTo(x1,y1);surfData.ctx.lineTo(x2,y2);surfData.ctx.stroke();surfData.ctx.restore()},drawEllipse:(surf,x,y,rx,ry,action,cssColor)=>{x=x<<16>>16;y=y<<16>>16;rx=rx<<16>>16;ry=ry<<16>>16;var surfData=SDL.surfaces[surf];assert(!surfData.locked);surfData.ctx.save();surfData.ctx.beginPath();surfData.ctx.translate(x,y);surfData.ctx.scale(rx,ry);surfData.ctx.arc(0,0,1,0,2*Math.PI);surfData.ctx.restore();surfData.ctx.save();surfData.ctx[action+"Style"]=cssColor;surfData.ctx[action]();surfData.ctx.restore()},translateColorToCSSRGBA:rgba=>`rgba(${rgba>>>24},${rgba>>16&255},${rgba>>8&255},${rgba&255})`};Module["SDL_gfx"]=SDL_gfx;var _boxColor=(surf,x1,y1,x2,y2,color)=>SDL_gfx.drawRectangle(surf,x1,y1,x2,y2,"fill",SDL_gfx.translateColorToCSSRGBA(color));Module["_boxColor"]=_boxColor;_boxColor.sig="ipiiiii";var _boxRGBA=(surf,x1,y1,x2,y2,r,g,b,a)=>SDL_gfx.drawRectangle(surf,x1,y1,x2,y2,"fill",SDL.translateRGBAToCSSRGBA(r,g,b,a));Module["_boxRGBA"]=_boxRGBA;_boxRGBA.sig="ipiiiiiiii";var _rectangleColor=(surf,x1,y1,x2,y2,color)=>SDL_gfx.drawRectangle(surf,x1,y1,x2,y2,"stroke",SDL_gfx.translateColorToCSSRGBA(color));Module["_rectangleColor"]=_rectangleColor;_rectangleColor.sig="ipiiiii";var _rectangleRGBA=(surf,x1,y1,x2,y2,r,g,b,a)=>SDL_gfx.drawRectangle(surf,x1,y1,x2,y2,"stroke",SDL.translateRGBAToCSSRGBA(r,g,b,a));Module["_rectangleRGBA"]=_rectangleRGBA;_rectangleRGBA.sig="ipiiiiiiii";var _ellipseColor=(surf,x,y,rx,ry,color)=>SDL_gfx.drawEllipse(surf,x,y,rx,ry,"stroke",SDL_gfx.translateColorToCSSRGBA(color));Module["_ellipseColor"]=_ellipseColor;_ellipseColor.sig="ipiiiii";var _ellipseRGBA=(surf,x,y,rx,ry,r,g,b,a)=>SDL_gfx.drawEllipse(surf,x,y,rx,ry,"stroke",SDL.translateRGBAToCSSRGBA(r,g,b,a));Module["_ellipseRGBA"]=_ellipseRGBA;_ellipseRGBA.sig="ipiiiiiiii";var _filledEllipseColor=(surf,x,y,rx,ry,color)=>SDL_gfx.drawEllipse(surf,x,y,rx,ry,"fill",SDL_gfx.translateColorToCSSRGBA(color));Module["_filledEllipseColor"]=_filledEllipseColor;_filledEllipseColor.sig="ipiiiii";var _filledEllipseRGBA=(surf,x,y,rx,ry,r,g,b,a)=>SDL_gfx.drawEllipse(surf,x,y,rx,ry,"fill",SDL.translateRGBAToCSSRGBA(r,g,b,a));Module["_filledEllipseRGBA"]=_filledEllipseRGBA;_filledEllipseRGBA.sig="ipiiiiiiii";var _lineColor=(surf,x1,y1,x2,y2,color)=>SDL_gfx.drawLine(surf,x1,y1,x2,y2,SDL_gfx.translateColorToCSSRGBA(color));Module["_lineColor"]=_lineColor;_lineColor.sig="ipiiiii";var _lineRGBA=(surf,x1,y1,x2,y2,r,g,b,a)=>SDL_gfx.drawLine(surf,x1,y1,x2,y2,SDL.translateRGBAToCSSRGBA(r,g,b,a));Module["_lineRGBA"]=_lineRGBA;_lineRGBA.sig="ipiiiiiiii";var _pixelRGBA=(surf,x1,y1,r,g,b,a)=>_boxRGBA(surf,x1,y1,x1,y1,r,g,b,a);Module["_pixelRGBA"]=_pixelRGBA;_pixelRGBA.sig="ipiiiiii";var _SDL_GL_SetAttribute=(attr,value)=>{if(!(attr in SDL.glAttributes)){abort("Unknown SDL GL attribute ("+attr+"). Please check if your SDL version is supported.")}SDL.glAttributes[attr]=value};Module["_SDL_GL_SetAttribute"]=_SDL_GL_SetAttribute;_SDL_GL_SetAttribute.sig="iii";var _SDL_GL_GetAttribute=(attr,value)=>{if(!(attr in SDL.glAttributes)){abort("Unknown SDL GL attribute ("+attr+"). Please check if your SDL version is supported.")}if(value)HEAP32[value>>2]=SDL.glAttributes[attr];return 0};Module["_SDL_GL_GetAttribute"]=_SDL_GL_GetAttribute;_SDL_GL_GetAttribute.sig="iip";var _SDL_GL_SwapBuffers=()=>{Browser.doSwapBuffers?.()};Module["_SDL_GL_SwapBuffers"]=_SDL_GL_SwapBuffers;_SDL_GL_SwapBuffers.sig="v";var _SDL_GL_ExtensionSupported=extension=>Module.ctx.getExtension(extension)|0;Module["_SDL_GL_ExtensionSupported"]=_SDL_GL_ExtensionSupported;_SDL_GL_ExtensionSupported.sig="ip";var _SDL_DestroyWindow=window=>{};Module["_SDL_DestroyWindow"]=_SDL_DestroyWindow;_SDL_DestroyWindow.sig="vp";var _SDL_DestroyRenderer=renderer=>{};Module["_SDL_DestroyRenderer"]=_SDL_DestroyRenderer;_SDL_DestroyRenderer.sig="vp";var _SDL_GetWindowFlags=window=>{if(Browser.isFullscreen){return 1}return 0};Module["_SDL_GetWindowFlags"]=_SDL_GetWindowFlags;_SDL_GetWindowFlags.sig="ip";var _SDL_GL_SwapWindow=window=>{};Module["_SDL_GL_SwapWindow"]=_SDL_GL_SwapWindow;_SDL_GL_SwapWindow.sig="vp";var _SDL_GL_MakeCurrent=(window,context)=>{};Module["_SDL_GL_MakeCurrent"]=_SDL_GL_MakeCurrent;_SDL_GL_MakeCurrent.sig="ipp";var _SDL_GL_DeleteContext=context=>{};Module["_SDL_GL_DeleteContext"]=_SDL_GL_DeleteContext;_SDL_GL_DeleteContext.sig="vp";var _SDL_GL_GetSwapInterval=()=>{if(Browser.mainLoop.timingMode==1)return Browser.mainLoop.timingValue;else return 0};Module["_SDL_GL_GetSwapInterval"]=_SDL_GL_GetSwapInterval;_SDL_GL_GetSwapInterval.sig="i";var _SDL_GL_SetSwapInterval=state=>{_emscripten_set_main_loop_timing(1,state)};Module["_SDL_GL_SetSwapInterval"]=_SDL_GL_SetSwapInterval;_SDL_GL_SetSwapInterval.sig="ii";var _SDL_SetWindowTitle=(window,title)=>{if(title)document.title=UTF8ToString(title)};Module["_SDL_SetWindowTitle"]=_SDL_SetWindowTitle;_SDL_SetWindowTitle.sig="vpp";var _SDL_GetWindowSize=(window,width,height)=>{var w=Module["canvas"].width;var h=Module["canvas"].height;if(width)HEAP32[width>>2]=w;if(height)HEAP32[height>>2]=h};Module["_SDL_GetWindowSize"]=_SDL_GetWindowSize;_SDL_GetWindowSize.sig="vppp";var _SDL_LogSetOutputFunction=(callback,userdata)=>{};Module["_SDL_LogSetOutputFunction"]=_SDL_LogSetOutputFunction;_SDL_LogSetOutputFunction.sig="vpp";var _SDL_SetWindowFullscreen=(window,fullscreen)=>{if(Browser.isFullscreen){Module["canvas"].exitFullscreen();return 1}return 0};Module["_SDL_SetWindowFullscreen"]=_SDL_SetWindowFullscreen;_SDL_SetWindowFullscreen.sig="ipi";var _SDL_ClearError=()=>{};Module["_SDL_ClearError"]=_SDL_ClearError;_SDL_ClearError.sig="v";var _SDL_SetGamma=(r,g,b)=>-1;Module["_SDL_SetGamma"]=_SDL_SetGamma;_SDL_SetGamma.sig="ifff";var _SDL_SetGammaRamp=(redTable,greenTable,blueTable)=>-1;Module["_SDL_SetGammaRamp"]=_SDL_SetGammaRamp;_SDL_SetGammaRamp.sig="ippp";var _SDL_NumJoysticks=()=>{var count=0;var gamepads=SDL.getGamepads();for(var i=0;i{var gamepad=SDL.getGamepad(deviceIndex);if(gamepad){var name=gamepad.id;if(SDL.joystickNamePool.hasOwnProperty(name)){return SDL.joystickNamePool[name]}return SDL.joystickNamePool[name]=stringToNewUTF8(name)}return 0};Module["_SDL_JoystickName"]=_SDL_JoystickName;_SDL_JoystickName.sig="pi";var _SDL_JoystickOpen=deviceIndex=>{var gamepad=SDL.getGamepad(deviceIndex);if(gamepad){var joystick=deviceIndex+1;SDL.recordJoystickState(joystick,gamepad);return joystick}return 0};Module["_SDL_JoystickOpen"]=_SDL_JoystickOpen;_SDL_JoystickOpen.sig="pi";var _SDL_JoystickOpened=deviceIndex=>SDL.lastJoystickState.hasOwnProperty(deviceIndex+1)?1:0;Module["_SDL_JoystickOpened"]=_SDL_JoystickOpened;_SDL_JoystickOpened.sig="ii";var _SDL_JoystickIndex=joystick=>joystick-1;Module["_SDL_JoystickIndex"]=_SDL_JoystickIndex;_SDL_JoystickIndex.sig="ip";var _SDL_JoystickNumAxes=joystick=>{var gamepad=SDL.getGamepad(joystick-1);if(gamepad){return gamepad.axes.length}return 0};Module["_SDL_JoystickNumAxes"]=_SDL_JoystickNumAxes;_SDL_JoystickNumAxes.sig="ip";var _SDL_JoystickNumBalls=joystick=>0;Module["_SDL_JoystickNumBalls"]=_SDL_JoystickNumBalls;_SDL_JoystickNumBalls.sig="ip";var _SDL_JoystickNumHats=joystick=>0;Module["_SDL_JoystickNumHats"]=_SDL_JoystickNumHats;_SDL_JoystickNumHats.sig="ip";var _SDL_JoystickNumButtons=joystick=>{var gamepad=SDL.getGamepad(joystick-1);if(gamepad){return gamepad.buttons.length}return 0};Module["_SDL_JoystickNumButtons"]=_SDL_JoystickNumButtons;_SDL_JoystickNumButtons.sig="ip";var _SDL_JoystickUpdate=()=>SDL.queryJoysticks();Module["_SDL_JoystickUpdate"]=_SDL_JoystickUpdate;_SDL_JoystickUpdate.sig="v";var _SDL_JoystickEventState=state=>{if(state<0){return SDL.joystickEventState}return SDL.joystickEventState=state};Module["_SDL_JoystickEventState"]=_SDL_JoystickEventState;_SDL_JoystickEventState.sig="ii";var _SDL_JoystickGetAxis=(joystick,axis)=>{var gamepad=SDL.getGamepad(joystick-1);if(gamepad&&gamepad.axes.length>axis){return SDL.joystickAxisValueConversion(gamepad.axes[axis])}return 0};Module["_SDL_JoystickGetAxis"]=_SDL_JoystickGetAxis;_SDL_JoystickGetAxis.sig="ipi";var _SDL_JoystickGetHat=(joystick,hat)=>0;Module["_SDL_JoystickGetHat"]=_SDL_JoystickGetHat;_SDL_JoystickGetHat.sig="ipi";var _SDL_JoystickGetBall=(joystick,ball,dxptr,dyptr)=>-1;Module["_SDL_JoystickGetBall"]=_SDL_JoystickGetBall;_SDL_JoystickGetBall.sig="ipipp";var _SDL_JoystickGetButton=(joystick,button)=>{var gamepad=SDL.getGamepad(joystick-1);if(gamepad&&gamepad.buttons.length>button){return SDL.getJoystickButtonState(gamepad.buttons[button])?1:0}return 0};Module["_SDL_JoystickGetButton"]=_SDL_JoystickGetButton;_SDL_JoystickGetButton.sig="ipi";var _SDL_JoystickClose=joystick=>{delete SDL.lastJoystickState[joystick]};Module["_SDL_JoystickClose"]=_SDL_JoystickClose;_SDL_JoystickClose.sig="vp";var _SDL_InitSubSystem=flags=>0;Module["_SDL_InitSubSystem"]=_SDL_InitSubSystem;_SDL_InitSubSystem.sig="ii";var _SDL_RWFromConstMem=(mem,size)=>{var id=SDL.rwops.length;SDL.rwops.push({bytes:mem,count:size});return id};Module["_SDL_RWFromConstMem"]=_SDL_RWFromConstMem;_SDL_RWFromConstMem.sig="ppi";var _SDL_RWFromMem=_SDL_RWFromConstMem;Module["_SDL_RWFromMem"]=_SDL_RWFromMem;_SDL_RWFromMem.sig="ppi";var _SDL_GetNumAudioDrivers=()=>1;Module["_SDL_GetNumAudioDrivers"]=_SDL_GetNumAudioDrivers;_SDL_GetNumAudioDrivers.sig="i";var _SDL_GetCurrentAudioDriver=()=>stringToNewUTF8("Emscripten Audio");Module["_SDL_GetCurrentAudioDriver"]=_SDL_GetCurrentAudioDriver;_SDL_GetCurrentAudioDriver.sig="p";var _SDL_GetScancodeFromKey=key=>SDL.scanCodes[key];Module["_SDL_GetScancodeFromKey"]=_SDL_GetScancodeFromKey;_SDL_GetScancodeFromKey.sig="ii";var _SDL_GetAudioDriver=index=>_SDL_GetCurrentAudioDriver();Module["_SDL_GetAudioDriver"]=_SDL_GetAudioDriver;_SDL_GetAudioDriver.sig="pi";var _SDL_EnableUNICODE=on=>{var ret=SDL.unicode||0;SDL.unicode=on;return ret};Module["_SDL_EnableUNICODE"]=_SDL_EnableUNICODE;_SDL_EnableUNICODE.sig="ii";var _SDL_AddTimer=(interval,callback,param)=>safeSetTimeout(()=>getWasmTableEntry(callback)(interval,param),interval);Module["_SDL_AddTimer"]=_SDL_AddTimer;_SDL_AddTimer.sig="iipp";var _SDL_RemoveTimer=id=>{clearTimeout(id);return true};Module["_SDL_RemoveTimer"]=_SDL_RemoveTimer;_SDL_RemoveTimer.sig="ii";var _SDL_CreateThread=(fs,data,pfnBeginThread,pfnEndThread)=>{throw"SDL threads cannot be supported in the web platform because they assume shared state. See emscripten_create_worker etc. for a message-passing concurrency model that does let you run code in another thread."};Module["_SDL_CreateThread"]=_SDL_CreateThread;_SDL_CreateThread.sig="ppp";var _SDL_WaitThread=(thread,status)=>{throw"SDL_WaitThread"};Module["_SDL_WaitThread"]=_SDL_WaitThread;_SDL_WaitThread.sig="vpp";var _SDL_GetThreadID=thread=>{throw"SDL_GetThreadID"};Module["_SDL_GetThreadID"]=_SDL_GetThreadID;_SDL_GetThreadID.sig="pp";var _SDL_ThreadID=()=>0;Module["_SDL_ThreadID"]=_SDL_ThreadID;_SDL_ThreadID.sig="p";var _SDL_AllocRW=()=>{throw"SDL_AllocRW: TODO"};Module["_SDL_AllocRW"]=_SDL_AllocRW;_SDL_AllocRW.sig="p";var _SDL_CondBroadcast=cond=>{throw"SDL_CondBroadcast: TODO"};Module["_SDL_CondBroadcast"]=_SDL_CondBroadcast;_SDL_CondBroadcast.sig="ip";var _SDL_CondWaitTimeout=(cond,mutex,ms)=>{throw"SDL_CondWaitTimeout: TODO"};Module["_SDL_CondWaitTimeout"]=_SDL_CondWaitTimeout;_SDL_CondWaitTimeout.sig="ippi";var _SDL_WM_IconifyWindow=()=>{throw"SDL_WM_IconifyWindow TODO"};Module["_SDL_WM_IconifyWindow"]=_SDL_WM_IconifyWindow;_SDL_WM_IconifyWindow.sig="i";var _Mix_SetPostMix=(func,arg)=>warnOnce("Mix_SetPostMix: TODO");Module["_Mix_SetPostMix"]=_Mix_SetPostMix;_Mix_SetPostMix.sig="vpp";var _Mix_VolumeChunk=(chunk,volume)=>{throw"Mix_VolumeChunk: TODO"};Module["_Mix_VolumeChunk"]=_Mix_VolumeChunk;_Mix_VolumeChunk.sig="ipi";var _Mix_SetPosition=(channel,angle,distance)=>{throw"Mix_SetPosition: TODO"};Module["_Mix_SetPosition"]=_Mix_SetPosition;_Mix_SetPosition.sig="iiii";var _Mix_QuerySpec=(frequency,format,channels)=>{throw"Mix_QuerySpec: TODO"};Module["_Mix_QuerySpec"]=_Mix_QuerySpec;_Mix_QuerySpec.sig="ippp";var _Mix_FadeInChannelTimed=(channel,chunk,loop,ms,ticks)=>{throw"Mix_FadeInChannelTimed"};Module["_Mix_FadeInChannelTimed"]=_Mix_FadeInChannelTimed;_Mix_FadeInChannelTimed.sig="iipiii";var _Mix_FadeOutChannel=()=>{throw"Mix_FadeOutChannel"};Module["_Mix_FadeOutChannel"]=_Mix_FadeOutChannel;_Mix_FadeOutChannel.sig="iii";var _Mix_Linked_Version=()=>{throw"Mix_Linked_Version: TODO"};Module["_Mix_Linked_Version"]=_Mix_Linked_Version;_Mix_Linked_Version.sig="p";var _SDL_SaveBMP_RW=(surface,dst,freedst)=>{throw"SDL_SaveBMP_RW: TODO"};Module["_SDL_SaveBMP_RW"]=_SDL_SaveBMP_RW;_SDL_SaveBMP_RW.sig="ippi";var _SDL_WM_SetIcon=(icon,mask)=>{};Module["_SDL_WM_SetIcon"]=_SDL_WM_SetIcon;_SDL_WM_SetIcon.sig="vpp";var _SDL_HasRDTSC=()=>0;Module["_SDL_HasRDTSC"]=_SDL_HasRDTSC;_SDL_HasRDTSC.sig="i";var _SDL_HasMMX=()=>0;Module["_SDL_HasMMX"]=_SDL_HasMMX;_SDL_HasMMX.sig="i";var _SDL_HasMMXExt=()=>0;Module["_SDL_HasMMXExt"]=_SDL_HasMMXExt;_SDL_HasMMXExt.sig="i";var _SDL_Has3DNow=()=>0;Module["_SDL_Has3DNow"]=_SDL_Has3DNow;_SDL_Has3DNow.sig="i";var _SDL_Has3DNowExt=()=>0;Module["_SDL_Has3DNowExt"]=_SDL_Has3DNowExt;_SDL_Has3DNowExt.sig="i";var _SDL_HasSSE=()=>0;Module["_SDL_HasSSE"]=_SDL_HasSSE;_SDL_HasSSE.sig="i";var _SDL_HasSSE2=()=>0;Module["_SDL_HasSSE2"]=_SDL_HasSSE2;_SDL_HasSSE2.sig="i";var _SDL_HasAltiVec=()=>0;Module["_SDL_HasAltiVec"]=_SDL_HasAltiVec;_SDL_HasAltiVec.sig="i";if(!Module.createInvoke){Module.createInvoke=Module.createInvokeFunction}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;if(ENVIRONMENT_IS_NODE){NODEFS.staticInit()}var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i)}var miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){miniTempWebGLIntBuffers[i]=miniTempWebGLIntBuffersStorage.subarray(0,i)}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={IMG_Init:_IMG_Init,IMG_Load:_IMG_Load,IMG_Load_RW:_IMG_Load_RW,IMG_Quit:_IMG_Quit,JsArray_count_js:JsArray_count_js,JsArray_index_js:JsArray_index_js,JsArray_inplace_repeat_js:JsArray_inplace_repeat_js,JsArray_repeat_js:JsArray_repeat_js,JsArray_reverse_js:JsArray_reverse_js,JsArray_reversed_iterator:JsArray_reversed_iterator,JsBuffer_DecodeString_js:JsBuffer_DecodeString_js,JsBuffer_get_info:JsBuffer_get_info,JsDoubleProxy_unwrap_helper:JsDoubleProxy_unwrap_helper,JsException_new_helper:JsException_new_helper,JsMap_GetIter_js:JsMap_GetIter_js,JsMap_clear_js:JsMap_clear_js,JsObjMap_GetIter_js:JsObjMap_GetIter_js,JsObjMap_ass_subscript_js:JsObjMap_ass_subscript_js,JsObjMap_contains_js:JsObjMap_contains_js,JsObjMap_length_js:JsObjMap_length_js,JsObjMap_subscript_js:JsObjMap_subscript_js,JsProxy_Bool_js:JsProxy_Bool_js,JsProxy_DelAttr_js:JsProxy_DelAttr_js,JsProxy_Dir_js:JsProxy_Dir_js,JsProxy_GetAsyncIter_js:JsProxy_GetAsyncIter_js,JsProxy_GetAttr_js:JsProxy_GetAttr_js,JsProxy_GetIter_js:JsProxy_GetIter_js,JsProxy_SetAttr_js:JsProxy_SetAttr_js,JsProxy_compute_typeflags:JsProxy_compute_typeflags,JsProxy_subscript_js:JsProxy_subscript_js,JsvArray_Check:JsvArray_Check,JsvArray_Delete:JsvArray_Delete,JsvArray_Extend:JsvArray_Extend,JsvArray_Get:JsvArray_Get,JsvArray_Insert:JsvArray_Insert,JsvArray_New:JsvArray_New,JsvArray_Push:JsvArray_Push,JsvArray_Set:JsvArray_Set,JsvArray_ShallowCopy:JsvArray_ShallowCopy,JsvArray_slice:JsvArray_slice,JsvArray_slice_assign:JsvArray_slice_assign,JsvAsyncGenerator_Check:JsvAsyncGenerator_Check,JsvBuffer_assignFromPtr:JsvBuffer_assignFromPtr,JsvBuffer_assignToPtr:JsvBuffer_assignToPtr,JsvBuffer_intoFile:JsvBuffer_intoFile,JsvBuffer_readFromFile:JsvBuffer_readFromFile,JsvBuffer_writeToFile:JsvBuffer_writeToFile,JsvError_Throw:JsvError_Throw,JsvFunction_CallBound:JsvFunction_CallBound,JsvFunction_Call_OneArg:JsvFunction_Call_OneArg,JsvFunction_Check:JsvFunction_Check,JsvFunction_Construct:JsvFunction_Construct,JsvGenerator_Check:JsvGenerator_Check,JsvLiteralMap_New:JsvLiteralMap_New,JsvMap_New:JsvMap_New,JsvMap_Set:JsvMap_Set,JsvNoValue_Check:JsvNoValue_Check,JsvNum_fromDigits:JsvNum_fromDigits,JsvNum_fromDouble:JsvNum_fromDouble,JsvNum_fromInt:JsvNum_fromInt,JsvObject_CallMethod:JsvObject_CallMethod,JsvObject_CallMethod_NoArgs:JsvObject_CallMethod_NoArgs,JsvObject_CallMethod_OneArg:JsvObject_CallMethod_OneArg,JsvObject_CallMethod_TwoArgs:JsvObject_CallMethod_TwoArgs,JsvObject_Entries:JsvObject_Entries,JsvObject_Keys:JsvObject_Keys,JsvObject_New:JsvObject_New,JsvObject_SetAttr:JsvObject_SetAttr,JsvObject_Values:JsvObject_Values,JsvObject_toString:JsvObject_toString,JsvPromise_Check:JsvPromise_Check,JsvPromise_Resolve:JsvPromise_Resolve,JsvPromise_Syncify_handleError:JsvPromise_Syncify_handleError,JsvSet_Add:JsvSet_Add,JsvSet_New:JsvSet_New,JsvUTF8ToString:JsvUTF8ToString,Jsv_constructorName:Jsv_constructorName,Jsv_equal:Jsv_equal,Jsv_greater_than:Jsv_greater_than,Jsv_greater_than_equal:Jsv_greater_than_equal,Jsv_less_than:Jsv_less_than,Jsv_less_than_equal:Jsv_less_than_equal,Jsv_not_equal:Jsv_not_equal,Jsv_to_bool:Jsv_to_bool,Jsv_typeof:Jsv_typeof,Mix_AllocateChannels:_Mix_AllocateChannels,Mix_ChannelFinished:_Mix_ChannelFinished,Mix_CloseAudio:_Mix_CloseAudio,Mix_FadeInChannelTimed:_Mix_FadeInChannelTimed,Mix_FadeInMusicPos:_Mix_FadeInMusicPos,Mix_FadeOutChannel:_Mix_FadeOutChannel,Mix_FadeOutMusic:_Mix_FadeOutMusic,Mix_FadingChannel:_Mix_FadingChannel,Mix_FreeChunk:_Mix_FreeChunk,Mix_FreeMusic:_Mix_FreeMusic,Mix_HaltChannel:_Mix_HaltChannel,Mix_HaltMusic:_Mix_HaltMusic,Mix_HookMusicFinished:_Mix_HookMusicFinished,Mix_Init:_Mix_Init,Mix_Linked_Version:_Mix_Linked_Version,Mix_LoadMUS:_Mix_LoadMUS,Mix_LoadMUS_RW:_Mix_LoadMUS_RW,Mix_LoadWAV:_Mix_LoadWAV,Mix_LoadWAV_RW:_Mix_LoadWAV_RW,Mix_OpenAudio:_Mix_OpenAudio,Mix_Pause:_Mix_Pause,Mix_PauseMusic:_Mix_PauseMusic,Mix_Paused:_Mix_Paused,Mix_PausedMusic:_Mix_PausedMusic,Mix_PlayChannelTimed:_Mix_PlayChannelTimed,Mix_PlayMusic:_Mix_PlayMusic,Mix_Playing:_Mix_Playing,Mix_PlayingMusic:_Mix_PlayingMusic,Mix_QuerySpec:_Mix_QuerySpec,Mix_QuickLoad_RAW:_Mix_QuickLoad_RAW,Mix_Quit:_Mix_Quit,Mix_ReserveChannels:_Mix_ReserveChannels,Mix_Resume:_Mix_Resume,Mix_ResumeMusic:_Mix_ResumeMusic,Mix_SetPanning:_Mix_SetPanning,Mix_SetPosition:_Mix_SetPosition,Mix_SetPostMix:_Mix_SetPostMix,Mix_Volume:_Mix_Volume,Mix_VolumeChunk:_Mix_VolumeChunk,Mix_VolumeMusic:_Mix_VolumeMusic,SDL_AddTimer:_SDL_AddTimer,SDL_AllocRW:_SDL_AllocRW,SDL_AudioDriverName:_SDL_AudioDriverName,SDL_AudioQuit:_SDL_AudioQuit,SDL_ClearError:_SDL_ClearError,SDL_CloseAudio:_SDL_CloseAudio,SDL_CondBroadcast:_SDL_CondBroadcast,SDL_CondSignal:_SDL_CondSignal,SDL_CondWait:_SDL_CondWait,SDL_CondWaitTimeout:_SDL_CondWaitTimeout,SDL_ConvertSurface:_SDL_ConvertSurface,SDL_CreateCond:_SDL_CreateCond,SDL_CreateMutex:_SDL_CreateMutex,SDL_CreateRGBSurface:_SDL_CreateRGBSurface,SDL_CreateRGBSurfaceFrom:_SDL_CreateRGBSurfaceFrom,SDL_CreateThread:_SDL_CreateThread,SDL_Delay:_SDL_Delay,SDL_DestroyCond:_SDL_DestroyCond,SDL_DestroyMutex:_SDL_DestroyMutex,SDL_DestroyRenderer:_SDL_DestroyRenderer,SDL_DestroyWindow:_SDL_DestroyWindow,SDL_DisplayFormatAlpha:_SDL_DisplayFormatAlpha,SDL_EnableKeyRepeat:_SDL_EnableKeyRepeat,SDL_EnableUNICODE:_SDL_EnableUNICODE,SDL_FillRect:_SDL_FillRect,SDL_Flip:_SDL_Flip,SDL_FreeRW:_SDL_FreeRW,SDL_FreeSurface:_SDL_FreeSurface,SDL_GL_DeleteContext:_SDL_GL_DeleteContext,SDL_GL_ExtensionSupported:_SDL_GL_ExtensionSupported,SDL_GL_GetAttribute:_SDL_GL_GetAttribute,SDL_GL_GetSwapInterval:_SDL_GL_GetSwapInterval,SDL_GL_MakeCurrent:_SDL_GL_MakeCurrent,SDL_GL_SetAttribute:_SDL_GL_SetAttribute,SDL_GL_SetSwapInterval:_SDL_GL_SetSwapInterval,SDL_GL_SwapBuffers:_SDL_GL_SwapBuffers,SDL_GL_SwapWindow:_SDL_GL_SwapWindow,SDL_GetAppState:_SDL_GetAppState,SDL_GetAudioDriver:_SDL_GetAudioDriver,SDL_GetClipRect:_SDL_GetClipRect,SDL_GetCurrentAudioDriver:_SDL_GetCurrentAudioDriver,SDL_GetError:_SDL_GetError,SDL_GetKeyName:_SDL_GetKeyName,SDL_GetKeyState:_SDL_GetKeyState,SDL_GetKeyboardState:_SDL_GetKeyboardState,SDL_GetModState:_SDL_GetModState,SDL_GetMouseState:_SDL_GetMouseState,SDL_GetNumAudioDrivers:_SDL_GetNumAudioDrivers,SDL_GetRGB:_SDL_GetRGB,SDL_GetRGBA:_SDL_GetRGBA,SDL_GetScancodeFromKey:_SDL_GetScancodeFromKey,SDL_GetThreadID:_SDL_GetThreadID,SDL_GetTicks:_SDL_GetTicks,SDL_GetVideoInfo:_SDL_GetVideoInfo,SDL_GetVideoSurface:_SDL_GetVideoSurface,SDL_GetWindowFlags:_SDL_GetWindowFlags,SDL_GetWindowSize:_SDL_GetWindowSize,SDL_Has3DNow:_SDL_Has3DNow,SDL_Has3DNowExt:_SDL_Has3DNowExt,SDL_HasAltiVec:_SDL_HasAltiVec,SDL_HasMMX:_SDL_HasMMX,SDL_HasMMXExt:_SDL_HasMMXExt,SDL_HasRDTSC:_SDL_HasRDTSC,SDL_HasSSE:_SDL_HasSSE,SDL_HasSSE2:_SDL_HasSSE2,SDL_Init:_SDL_Init,SDL_InitSubSystem:_SDL_InitSubSystem,SDL_JoystickClose:_SDL_JoystickClose,SDL_JoystickEventState:_SDL_JoystickEventState,SDL_JoystickGetAxis:_SDL_JoystickGetAxis,SDL_JoystickGetBall:_SDL_JoystickGetBall,SDL_JoystickGetButton:_SDL_JoystickGetButton,SDL_JoystickGetHat:_SDL_JoystickGetHat,SDL_JoystickIndex:_SDL_JoystickIndex,SDL_JoystickName:_SDL_JoystickName,SDL_JoystickNumAxes:_SDL_JoystickNumAxes,SDL_JoystickNumBalls:_SDL_JoystickNumBalls,SDL_JoystickNumButtons:_SDL_JoystickNumButtons,SDL_JoystickNumHats:_SDL_JoystickNumHats,SDL_JoystickOpen:_SDL_JoystickOpen,SDL_JoystickOpened:_SDL_JoystickOpened,SDL_JoystickUpdate:_SDL_JoystickUpdate,SDL_Linked_Version:_SDL_Linked_Version,SDL_ListModes:_SDL_ListModes,SDL_LoadBMP_RW:_SDL_LoadBMP_RW,SDL_LockAudio:_SDL_LockAudio,SDL_LockSurface:_SDL_LockSurface,SDL_LogSetOutputFunction:_SDL_LogSetOutputFunction,SDL_LowerBlit:_SDL_LowerBlit,SDL_LowerBlitScaled:_SDL_LowerBlitScaled,SDL_MapRGB:_SDL_MapRGB,SDL_MapRGBA:_SDL_MapRGBA,SDL_NumJoysticks:_SDL_NumJoysticks,SDL_OpenAudio:_SDL_OpenAudio,SDL_PauseAudio:_SDL_PauseAudio,SDL_PeepEvents:_SDL_PeepEvents,SDL_PollEvent:_SDL_PollEvent,SDL_PumpEvents:_SDL_PumpEvents,SDL_PushEvent:_SDL_PushEvent,SDL_Quit:_SDL_Quit,SDL_QuitSubSystem:_SDL_QuitSubSystem,SDL_RWFromConstMem:_SDL_RWFromConstMem,SDL_RWFromFile:_SDL_RWFromFile,SDL_RWFromMem:_SDL_RWFromMem,SDL_RemoveTimer:_SDL_RemoveTimer,SDL_SaveBMP_RW:_SDL_SaveBMP_RW,SDL_SetAlpha:_SDL_SetAlpha,SDL_SetClipRect:_SDL_SetClipRect,SDL_SetColorKey:_SDL_SetColorKey,SDL_SetColors:_SDL_SetColors,SDL_SetError:_SDL_SetError,SDL_SetGamma:_SDL_SetGamma,SDL_SetGammaRamp:_SDL_SetGammaRamp,SDL_SetPalette:_SDL_SetPalette,SDL_SetVideoMode:_SDL_SetVideoMode,SDL_SetWindowFullscreen:_SDL_SetWindowFullscreen,SDL_SetWindowTitle:_SDL_SetWindowTitle,SDL_ShowCursor:_SDL_ShowCursor,SDL_StartTextInput:_SDL_StartTextInput,SDL_StopTextInput:_SDL_StopTextInput,SDL_ThreadID:_SDL_ThreadID,SDL_UnlockAudio:_SDL_UnlockAudio,SDL_UnlockSurface:_SDL_UnlockSurface,SDL_UpdateRect:_SDL_UpdateRect,SDL_UpdateRects:_SDL_UpdateRects,SDL_UpperBlit:_SDL_UpperBlit,SDL_UpperBlitScaled:_SDL_UpperBlitScaled,SDL_VideoDriverName:_SDL_VideoDriverName,SDL_VideoModeOK:_SDL_VideoModeOK,SDL_VideoQuit:_SDL_VideoQuit,SDL_WM_GrabInput:_SDL_WM_GrabInput,SDL_WM_IconifyWindow:_SDL_WM_IconifyWindow,SDL_WM_SetCaption:_SDL_WM_SetCaption,SDL_WM_SetIcon:_SDL_WM_SetIcon,SDL_WM_ToggleFullScreen:_SDL_WM_ToggleFullScreen,SDL_WaitThread:_SDL_WaitThread,SDL_WarpMouse:_SDL_WarpMouse,SDL_WasInit:_SDL_WasInit,SDL_mutexP:_SDL_mutexP,SDL_mutexV:_SDL_mutexV,TTF_CloseFont:_TTF_CloseFont,TTF_FontAscent:_TTF_FontAscent,TTF_FontDescent:_TTF_FontDescent,TTF_FontHeight:_TTF_FontHeight,TTF_FontLineSkip:_TTF_FontLineSkip,TTF_GlyphMetrics:_TTF_GlyphMetrics,TTF_Init:_TTF_Init,TTF_OpenFont:_TTF_OpenFont,TTF_Quit:_TTF_Quit,TTF_RenderText_Blended:_TTF_RenderText_Blended,TTF_RenderText_Shaded:_TTF_RenderText_Shaded,TTF_RenderText_Solid:_TTF_RenderText_Solid,TTF_RenderUTF8_Solid:_TTF_RenderUTF8_Solid,TTF_SizeText:_TTF_SizeText,TTF_SizeUTF8:_TTF_SizeUTF8,_JsArray_PostProcess_helper:_JsArray_PostProcess_helper,_JsArray_PushEntry_helper:_JsArray_PushEntry_helper,_PyEM_CountFuncParams:_PyEM_CountFuncParams,_PyEM_TrampolineCall_JS:_PyEM_TrampolineCall_JS,_PyEM_detect_type_reflection:_PyEM_detect_type_reflection,_PyImport_InitFunc_TrampolineCall:_PyImport_InitFunc_TrampolineCall,_Py_CheckEmscriptenSignals_Helper:_Py_CheckEmscriptenSignals_Helper,_Py_emscripten_runtime:_Py_emscripten_runtime,_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,__call_sighandler:___call_sighandler,__cxa_begin_catch:___cxa_begin_catch,__cxa_call_unexpected:___cxa_call_unexpected,__cxa_current_primary_exception:___cxa_current_primary_exception,__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_get_exception_ptr:___cxa_get_exception_ptr,__cxa_rethrow:___cxa_rethrow,__cxa_rethrow_primary_exception:___cxa_rethrow_primary_exception,__cxa_throw:___cxa_throw,__cxa_uncaught_exceptions:___cxa_uncaught_exceptions,__global_base:___global_base,__heap_base:___heap_base,__hiwire_deduplicate_delete:__hiwire_deduplicate_delete,__hiwire_deduplicate_get:__hiwire_deduplicate_get,__hiwire_deduplicate_new:__hiwire_deduplicate_new,__hiwire_deduplicate_set:__hiwire_deduplicate_set,__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,_agen_handle_result_js:_agen_handle_result_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_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,_glGetActiveAttribOrUniform:__glGetActiveAttribOrUniform,_gmtime_js:__gmtime_js,_localtime_js:__localtime_js,_mktime_js:__mktime_js,_mmap_js:__mmap_js,_msync_js:__msync_js,_munmap_js:__munmap_js,_pyproxyGen_make_result:_pyproxyGen_make_result,_pyproxy_get_buffer_result:_pyproxy_get_buffer_result,_python2js_add_to_cache:_python2js_add_to_cache,_python2js_addto_postprocess_list:_python2js_addto_postprocess_list,_python2js_buffer_inner:_python2js_buffer_inner,_python2js_cache_lookup:_python2js_cache_lookup,_python2js_handle_postprocess_list:_python2js_handle_postprocess_list,_python2js_ucs1:_python2js_ucs1,_python2js_ucs2:_python2js_ucs2,_python2js_ucs4:_python2js_ucs4,_setitimer_js:__setitimer_js,_timegm_js:__timegm_js,_tzset_js:__tzset_js,abort:_abort,array_to_js:array_to_js,boxColor:_boxColor,boxRGBA:_boxRGBA,can_run_sync_js:can_run_sync_js,capture_stderr:capture_stderr,clock_res_get:_clock_res_get,clock_time_get:_clock_time_get,create_once_callable:create_once_callable,create_promise_handles:create_promise_handles,destroy_jsarray_entries:destroy_jsarray_entries,destroy_proxies:destroy_proxies,destroy_proxies_js:destroy_proxies_js,destroy_proxy:destroy_proxy,eglBindAPI:_eglBindAPI,eglChooseConfig:_eglChooseConfig,eglCreateContext:_eglCreateContext,eglCreateWindowSurface:_eglCreateWindowSurface,eglDestroyContext:_eglDestroyContext,eglDestroySurface:_eglDestroySurface,eglGetConfigAttrib:_eglGetConfigAttrib,eglGetConfigs:_eglGetConfigs,eglGetCurrentContext:_eglGetCurrentContext,eglGetCurrentDisplay:_eglGetCurrentDisplay,eglGetCurrentSurface:_eglGetCurrentSurface,eglGetDisplay:_eglGetDisplay,eglGetError:_eglGetError,eglInitialize:_eglInitialize,eglMakeCurrent:_eglMakeCurrent,eglQueryAPI:_eglQueryAPI,eglQueryContext:_eglQueryContext,eglQueryString:_eglQueryString,eglQuerySurface:_eglQuerySurface,eglReleaseThread:_eglReleaseThread,eglSwapBuffers:_eglSwapBuffers,eglSwapInterval:_eglSwapInterval,eglTerminate:_eglTerminate,eglWaitClient:_eglWaitClient,eglWaitGL:_eglWaitGL,eglWaitNative:_eglWaitNative,ellipseColor:_ellipseColor,ellipseRGBA:_ellipseRGBA,emscripten_SDL_SetEventHandler:_emscripten_SDL_SetEventHandler,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_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_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_module_name:_emscripten_get_module_name,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_glActiveTexture:_emscripten_glActiveTexture,emscripten_glAttachShader:_emscripten_glAttachShader,emscripten_glBegin:_emscripten_glBegin,emscripten_glBeginQueryEXT:_emscripten_glBeginQueryEXT,emscripten_glBindAttribLocation:_emscripten_glBindAttribLocation,emscripten_glBindBuffer:_emscripten_glBindBuffer,emscripten_glBindFramebuffer:_emscripten_glBindFramebuffer,emscripten_glBindRenderbuffer:_emscripten_glBindRenderbuffer,emscripten_glBindTexture:_emscripten_glBindTexture,emscripten_glBindVertexArray:_emscripten_glBindVertexArray,emscripten_glBindVertexArrayOES:_emscripten_glBindVertexArrayOES,emscripten_glBlendColor:_emscripten_glBlendColor,emscripten_glBlendEquation:_emscripten_glBlendEquation,emscripten_glBlendEquationSeparate:_emscripten_glBlendEquationSeparate,emscripten_glBlendFunc:_emscripten_glBlendFunc,emscripten_glBlendFuncSeparate:_emscripten_glBlendFuncSeparate,emscripten_glBufferData:_emscripten_glBufferData,emscripten_glBufferSubData:_emscripten_glBufferSubData,emscripten_glCheckFramebufferStatus:_emscripten_glCheckFramebufferStatus,emscripten_glClear:_emscripten_glClear,emscripten_glClearColor:_emscripten_glClearColor,emscripten_glClearDepth:_emscripten_glClearDepth,emscripten_glClearDepthf:_emscripten_glClearDepthf,emscripten_glClearStencil:_emscripten_glClearStencil,emscripten_glColorMask:_emscripten_glColorMask,emscripten_glCompileShader:_emscripten_glCompileShader,emscripten_glCompressedTexImage2D:_emscripten_glCompressedTexImage2D,emscripten_glCompressedTexSubImage2D:_emscripten_glCompressedTexSubImage2D,emscripten_glCopyTexImage2D:_emscripten_glCopyTexImage2D,emscripten_glCopyTexSubImage2D:_emscripten_glCopyTexSubImage2D,emscripten_glCreateProgram:_emscripten_glCreateProgram,emscripten_glCreateShader:_emscripten_glCreateShader,emscripten_glCullFace:_emscripten_glCullFace,emscripten_glDeleteBuffers:_emscripten_glDeleteBuffers,emscripten_glDeleteFramebuffers:_emscripten_glDeleteFramebuffers,emscripten_glDeleteProgram:_emscripten_glDeleteProgram,emscripten_glDeleteQueriesEXT:_emscripten_glDeleteQueriesEXT,emscripten_glDeleteRenderbuffers:_emscripten_glDeleteRenderbuffers,emscripten_glDeleteShader:_emscripten_glDeleteShader,emscripten_glDeleteTextures:_emscripten_glDeleteTextures,emscripten_glDeleteVertexArrays:_emscripten_glDeleteVertexArrays,emscripten_glDeleteVertexArraysOES:_emscripten_glDeleteVertexArraysOES,emscripten_glDepthFunc:_emscripten_glDepthFunc,emscripten_glDepthMask:_emscripten_glDepthMask,emscripten_glDepthRange:_emscripten_glDepthRange,emscripten_glDepthRangef:_emscripten_glDepthRangef,emscripten_glDetachShader:_emscripten_glDetachShader,emscripten_glDisable:_emscripten_glDisable,emscripten_glDisableVertexAttribArray:_emscripten_glDisableVertexAttribArray,emscripten_glDrawArrays:_emscripten_glDrawArrays,emscripten_glDrawArraysInstanced:_emscripten_glDrawArraysInstanced,emscripten_glDrawArraysInstancedANGLE:_emscripten_glDrawArraysInstancedANGLE,emscripten_glDrawArraysInstancedARB:_emscripten_glDrawArraysInstancedARB,emscripten_glDrawArraysInstancedEXT:_emscripten_glDrawArraysInstancedEXT,emscripten_glDrawArraysInstancedNV:_emscripten_glDrawArraysInstancedNV,emscripten_glDrawBuffers:_emscripten_glDrawBuffers,emscripten_glDrawBuffersEXT:_emscripten_glDrawBuffersEXT,emscripten_glDrawBuffersWEBGL:_emscripten_glDrawBuffersWEBGL,emscripten_glDrawElements:_emscripten_glDrawElements,emscripten_glDrawElementsInstanced:_emscripten_glDrawElementsInstanced,emscripten_glDrawElementsInstancedANGLE:_emscripten_glDrawElementsInstancedANGLE,emscripten_glDrawElementsInstancedARB:_emscripten_glDrawElementsInstancedARB,emscripten_glDrawElementsInstancedEXT:_emscripten_glDrawElementsInstancedEXT,emscripten_glDrawElementsInstancedNV:_emscripten_glDrawElementsInstancedNV,emscripten_glEnable:_emscripten_glEnable,emscripten_glEnableVertexAttribArray:_emscripten_glEnableVertexAttribArray,emscripten_glEndQueryEXT:_emscripten_glEndQueryEXT,emscripten_glFinish:_emscripten_glFinish,emscripten_glFlush:_emscripten_glFlush,emscripten_glFramebufferRenderbuffer:_emscripten_glFramebufferRenderbuffer,emscripten_glFramebufferTexture2D:_emscripten_glFramebufferTexture2D,emscripten_glFrontFace:_emscripten_glFrontFace,emscripten_glGenBuffers:_emscripten_glGenBuffers,emscripten_glGenFramebuffers:_emscripten_glGenFramebuffers,emscripten_glGenQueriesEXT:_emscripten_glGenQueriesEXT,emscripten_glGenRenderbuffers:_emscripten_glGenRenderbuffers,emscripten_glGenTextures:_emscripten_glGenTextures,emscripten_glGenVertexArrays:_emscripten_glGenVertexArrays,emscripten_glGenVertexArraysOES:_emscripten_glGenVertexArraysOES,emscripten_glGenerateMipmap:_emscripten_glGenerateMipmap,emscripten_glGetActiveAttrib:_emscripten_glGetActiveAttrib,emscripten_glGetActiveUniform:_emscripten_glGetActiveUniform,emscripten_glGetAttachedShaders:_emscripten_glGetAttachedShaders,emscripten_glGetAttribLocation:_emscripten_glGetAttribLocation,emscripten_glGetBooleanv:_emscripten_glGetBooleanv,emscripten_glGetBufferParameteriv:_emscripten_glGetBufferParameteriv,emscripten_glGetError:_emscripten_glGetError,emscripten_glGetFloatv:_emscripten_glGetFloatv,emscripten_glGetFramebufferAttachmentParameteriv:_emscripten_glGetFramebufferAttachmentParameteriv,emscripten_glGetIntegerv:_emscripten_glGetIntegerv,emscripten_glGetProgramInfoLog:_emscripten_glGetProgramInfoLog,emscripten_glGetProgramiv:_emscripten_glGetProgramiv,emscripten_glGetQueryObjecti64vEXT:_emscripten_glGetQueryObjecti64vEXT,emscripten_glGetQueryObjectivEXT:_emscripten_glGetQueryObjectivEXT,emscripten_glGetQueryObjectui64vEXT:_emscripten_glGetQueryObjectui64vEXT,emscripten_glGetQueryObjectuivEXT:_emscripten_glGetQueryObjectuivEXT,emscripten_glGetQueryivEXT:_emscripten_glGetQueryivEXT,emscripten_glGetRenderbufferParameteriv:_emscripten_glGetRenderbufferParameteriv,emscripten_glGetShaderInfoLog:_emscripten_glGetShaderInfoLog,emscripten_glGetShaderPrecisionFormat:_emscripten_glGetShaderPrecisionFormat,emscripten_glGetShaderSource:_emscripten_glGetShaderSource,emscripten_glGetShaderiv:_emscripten_glGetShaderiv,emscripten_glGetString:_emscripten_glGetString,emscripten_glGetTexParameterfv:_emscripten_glGetTexParameterfv,emscripten_glGetTexParameteriv:_emscripten_glGetTexParameteriv,emscripten_glGetUniformLocation:_emscripten_glGetUniformLocation,emscripten_glGetUniformfv:_emscripten_glGetUniformfv,emscripten_glGetUniformiv:_emscripten_glGetUniformiv,emscripten_glGetVertexAttribPointerv:_emscripten_glGetVertexAttribPointerv,emscripten_glGetVertexAttribfv:_emscripten_glGetVertexAttribfv,emscripten_glGetVertexAttribiv:_emscripten_glGetVertexAttribiv,emscripten_glHint:_emscripten_glHint,emscripten_glIsBuffer:_emscripten_glIsBuffer,emscripten_glIsEnabled:_emscripten_glIsEnabled,emscripten_glIsFramebuffer:_emscripten_glIsFramebuffer,emscripten_glIsProgram:_emscripten_glIsProgram,emscripten_glIsQueryEXT:_emscripten_glIsQueryEXT,emscripten_glIsRenderbuffer:_emscripten_glIsRenderbuffer,emscripten_glIsShader:_emscripten_glIsShader,emscripten_glIsTexture:_emscripten_glIsTexture,emscripten_glIsVertexArray:_emscripten_glIsVertexArray,emscripten_glIsVertexArrayOES:_emscripten_glIsVertexArrayOES,emscripten_glLineWidth:_emscripten_glLineWidth,emscripten_glLinkProgram:_emscripten_glLinkProgram,emscripten_glLoadIdentity:_emscripten_glLoadIdentity,emscripten_glMatrixMode:_emscripten_glMatrixMode,emscripten_glMultiDrawArrays:_emscripten_glMultiDrawArrays,emscripten_glMultiDrawArraysANGLE:_emscripten_glMultiDrawArraysANGLE,emscripten_glMultiDrawArraysInstancedANGLE:_emscripten_glMultiDrawArraysInstancedANGLE,emscripten_glMultiDrawArraysInstancedWEBGL:_emscripten_glMultiDrawArraysInstancedWEBGL,emscripten_glMultiDrawArraysWEBGL:_emscripten_glMultiDrawArraysWEBGL,emscripten_glMultiDrawElements:_emscripten_glMultiDrawElements,emscripten_glMultiDrawElementsANGLE:_emscripten_glMultiDrawElementsANGLE,emscripten_glMultiDrawElementsInstancedANGLE:_emscripten_glMultiDrawElementsInstancedANGLE,emscripten_glMultiDrawElementsInstancedWEBGL:_emscripten_glMultiDrawElementsInstancedWEBGL,emscripten_glMultiDrawElementsWEBGL:_emscripten_glMultiDrawElementsWEBGL,emscripten_glPixelStorei:_emscripten_glPixelStorei,emscripten_glPolygonOffset:_emscripten_glPolygonOffset,emscripten_glQueryCounterEXT:_emscripten_glQueryCounterEXT,emscripten_glReadPixels:_emscripten_glReadPixels,emscripten_glReleaseShaderCompiler:_emscripten_glReleaseShaderCompiler,emscripten_glRenderbufferStorage:_emscripten_glRenderbufferStorage,emscripten_glSampleCoverage:_emscripten_glSampleCoverage,emscripten_glScissor:_emscripten_glScissor,emscripten_glShaderBinary:_emscripten_glShaderBinary,emscripten_glShaderSource:_emscripten_glShaderSource,emscripten_glStencilFunc:_emscripten_glStencilFunc,emscripten_glStencilFuncSeparate:_emscripten_glStencilFuncSeparate,emscripten_glStencilMask:_emscripten_glStencilMask,emscripten_glStencilMaskSeparate:_emscripten_glStencilMaskSeparate,emscripten_glStencilOp:_emscripten_glStencilOp,emscripten_glStencilOpSeparate:_emscripten_glStencilOpSeparate,emscripten_glTexImage2D:_emscripten_glTexImage2D,emscripten_glTexParameterf:_emscripten_glTexParameterf,emscripten_glTexParameterfv:_emscripten_glTexParameterfv,emscripten_glTexParameteri:_emscripten_glTexParameteri,emscripten_glTexParameteriv:_emscripten_glTexParameteriv,emscripten_glTexSubImage2D:_emscripten_glTexSubImage2D,emscripten_glUniform1f:_emscripten_glUniform1f,emscripten_glUniform1fv:_emscripten_glUniform1fv,emscripten_glUniform1i:_emscripten_glUniform1i,emscripten_glUniform1iv:_emscripten_glUniform1iv,emscripten_glUniform2f:_emscripten_glUniform2f,emscripten_glUniform2fv:_emscripten_glUniform2fv,emscripten_glUniform2i:_emscripten_glUniform2i,emscripten_glUniform2iv:_emscripten_glUniform2iv,emscripten_glUniform3f:_emscripten_glUniform3f,emscripten_glUniform3fv:_emscripten_glUniform3fv,emscripten_glUniform3i:_emscripten_glUniform3i,emscripten_glUniform3iv:_emscripten_glUniform3iv,emscripten_glUniform4f:_emscripten_glUniform4f,emscripten_glUniform4fv:_emscripten_glUniform4fv,emscripten_glUniform4i:_emscripten_glUniform4i,emscripten_glUniform4iv:_emscripten_glUniform4iv,emscripten_glUniformMatrix2fv:_emscripten_glUniformMatrix2fv,emscripten_glUniformMatrix3fv:_emscripten_glUniformMatrix3fv,emscripten_glUniformMatrix4fv:_emscripten_glUniformMatrix4fv,emscripten_glUseProgram:_emscripten_glUseProgram,emscripten_glValidateProgram:_emscripten_glValidateProgram,emscripten_glVertexAttrib1f:_emscripten_glVertexAttrib1f,emscripten_glVertexAttrib1fv:_emscripten_glVertexAttrib1fv,emscripten_glVertexAttrib2f:_emscripten_glVertexAttrib2f,emscripten_glVertexAttrib2fv:_emscripten_glVertexAttrib2fv,emscripten_glVertexAttrib3f:_emscripten_glVertexAttrib3f,emscripten_glVertexAttrib3fv:_emscripten_glVertexAttrib3fv,emscripten_glVertexAttrib4f:_emscripten_glVertexAttrib4f,emscripten_glVertexAttrib4fv:_emscripten_glVertexAttrib4fv,emscripten_glVertexAttribDivisor:_emscripten_glVertexAttribDivisor,emscripten_glVertexAttribDivisorANGLE:_emscripten_glVertexAttribDivisorANGLE,emscripten_glVertexAttribDivisorARB:_emscripten_glVertexAttribDivisorARB,emscripten_glVertexAttribDivisorEXT:_emscripten_glVertexAttribDivisorEXT,emscripten_glVertexAttribDivisorNV:_emscripten_glVertexAttribDivisorNV,emscripten_glVertexAttribPointer:_emscripten_glVertexAttribPointer,emscripten_glVertexPointer:_emscripten_glVertexPointer,emscripten_glViewport:_emscripten_glViewport,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_is_webgl_context_lost:_emscripten_is_webgl_context_lost,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_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_webglcontextlost_callback_on_thread:_emscripten_set_webglcontextlost_callback_on_thread,emscripten_set_webglcontextrestored_callback_on_thread:_emscripten_set_webglcontextrestored_callback_on_thread,emscripten_set_wheel_callback_on_thread:_emscripten_set_wheel_callback_on_thread,emscripten_set_window_title:_emscripten_set_window_title,emscripten_stack_snapshot:_emscripten_stack_snapshot,emscripten_stack_unwind_buffer:_emscripten_stack_unwind_buffer,emscripten_supports_offscreencanvas:_emscripten_supports_offscreencanvas,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_webgl_commit_frame:_emscripten_webgl_commit_frame,emscripten_webgl_create_context:_emscripten_webgl_create_context,emscripten_webgl_destroy_context:_emscripten_webgl_destroy_context,emscripten_webgl_do_commit_frame:_emscripten_webgl_do_commit_frame,emscripten_webgl_do_create_context:_emscripten_webgl_do_create_context,emscripten_webgl_do_get_current_context:_emscripten_webgl_do_get_current_context,emscripten_webgl_enable_ANGLE_instanced_arrays:_emscripten_webgl_enable_ANGLE_instanced_arrays,emscripten_webgl_enable_OES_vertex_array_object:_emscripten_webgl_enable_OES_vertex_array_object,emscripten_webgl_enable_WEBGL_draw_buffers:_emscripten_webgl_enable_WEBGL_draw_buffers,emscripten_webgl_enable_WEBGL_multi_draw:_emscripten_webgl_enable_WEBGL_multi_draw,emscripten_webgl_enable_extension:_emscripten_webgl_enable_extension,emscripten_webgl_get_context_attributes:_emscripten_webgl_get_context_attributes,emscripten_webgl_get_current_context:_emscripten_webgl_get_current_context,emscripten_webgl_get_drawing_buffer_size:_emscripten_webgl_get_drawing_buffer_size,emscripten_webgl_get_parameter_d:_emscripten_webgl_get_parameter_d,emscripten_webgl_get_parameter_i64v:_emscripten_webgl_get_parameter_i64v,emscripten_webgl_get_parameter_o:_emscripten_webgl_get_parameter_o,emscripten_webgl_get_parameter_utf8:_emscripten_webgl_get_parameter_utf8,emscripten_webgl_get_parameter_v:_emscripten_webgl_get_parameter_v,emscripten_webgl_get_program_info_log_utf8:_emscripten_webgl_get_program_info_log_utf8,emscripten_webgl_get_program_parameter_d:_emscripten_webgl_get_program_parameter_d,emscripten_webgl_get_shader_info_log_utf8:_emscripten_webgl_get_shader_info_log_utf8,emscripten_webgl_get_shader_parameter_d:_emscripten_webgl_get_shader_parameter_d,emscripten_webgl_get_shader_source_utf8:_emscripten_webgl_get_shader_source_utf8,emscripten_webgl_get_supported_extensions:_emscripten_webgl_get_supported_extensions,emscripten_webgl_get_uniform_d:_emscripten_webgl_get_uniform_d,emscripten_webgl_get_uniform_v:_emscripten_webgl_get_uniform_v,emscripten_webgl_get_vertex_attrib_d:_emscripten_webgl_get_vertex_attrib_d,emscripten_webgl_get_vertex_attrib_o:_emscripten_webgl_get_vertex_attrib_o,emscripten_webgl_get_vertex_attrib_v:_emscripten_webgl_get_vertex_attrib_v,emscripten_webgl_make_context_current:_emscripten_webgl_make_context_current,emscripten_websocket_close:_emscripten_websocket_close,emscripten_websocket_deinitialize:_emscripten_websocket_deinitialize,emscripten_websocket_delete:_emscripten_websocket_delete,emscripten_websocket_get_buffered_amount:_emscripten_websocket_get_buffered_amount,emscripten_websocket_get_extensions:_emscripten_websocket_get_extensions,emscripten_websocket_get_extensions_length:_emscripten_websocket_get_extensions_length,emscripten_websocket_get_protocol:_emscripten_websocket_get_protocol,emscripten_websocket_get_protocol_length:_emscripten_websocket_get_protocol_length,emscripten_websocket_get_ready_state:_emscripten_websocket_get_ready_state,emscripten_websocket_get_url:_emscripten_websocket_get_url,emscripten_websocket_get_url_length:_emscripten_websocket_get_url_length,emscripten_websocket_is_supported:_emscripten_websocket_is_supported,emscripten_websocket_new:_emscripten_websocket_new,emscripten_websocket_send_binary:_emscripten_websocket_send_binary,emscripten_websocket_send_utf8_text:_emscripten_websocket_send_utf8_text,emscripten_websocket_set_onclose_callback_on_thread:_emscripten_websocket_set_onclose_callback_on_thread,emscripten_websocket_set_onerror_callback_on_thread:_emscripten_websocket_set_onerror_callback_on_thread,emscripten_websocket_set_onmessage_callback_on_thread:_emscripten_websocket_set_onmessage_callback_on_thread,emscripten_websocket_set_onopen_callback_on_thread:_emscripten_websocket_set_onopen_callback_on_thread,endprotoent:_endprotoent,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,exit:_exit,fail_test:fail_test,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,ffi_call_js:ffi_call_js,ffi_closure_alloc_js:ffi_closure_alloc_js,ffi_closure_free_js:ffi_closure_free_js,ffi_prep_closure_loc_js:ffi_prep_closure_loc_js,filledEllipseColor:_filledEllipseColor,filledEllipseRGBA:_filledEllipseRGBA,gc_register_proxies:gc_register_proxies,get_async_js_call_done_callback:get_async_js_call_done_callback,get_length_helper:get_length_helper,get_length_string:get_length_string,getaddrinfo:_getaddrinfo,getentropy:_getentropy,getnameinfo:_getnameinfo,getprotobyname:_getprotobyname,getprotobynumber:_getprotobynumber,getprotoent:_getprotoent,glActiveTexture:_glActiveTexture,glAttachShader:_glAttachShader,glBegin:_glBegin,glBeginQueryEXT:_glBeginQueryEXT,glBindAttribLocation:_glBindAttribLocation,glBindBuffer:_glBindBuffer,glBindFramebuffer:_glBindFramebuffer,glBindRenderbuffer:_glBindRenderbuffer,glBindTexture:_glBindTexture,glBindVertexArray:_glBindVertexArray,glBindVertexArrayOES:_glBindVertexArrayOES,glBlendColor:_glBlendColor,glBlendEquation:_glBlendEquation,glBlendEquationSeparate:_glBlendEquationSeparate,glBlendFunc:_glBlendFunc,glBlendFuncSeparate:_glBlendFuncSeparate,glBufferData:_glBufferData,glBufferSubData:_glBufferSubData,glCheckFramebufferStatus:_glCheckFramebufferStatus,glClear:_glClear,glClearColor:_glClearColor,glClearDepth:_glClearDepth,glClearDepthf:_glClearDepthf,glClearStencil:_glClearStencil,glColorMask:_glColorMask,glCompileShader:_glCompileShader,glCompressedTexImage2D:_glCompressedTexImage2D,glCompressedTexSubImage2D:_glCompressedTexSubImage2D,glCopyTexImage2D:_glCopyTexImage2D,glCopyTexSubImage2D:_glCopyTexSubImage2D,glCreateProgram:_glCreateProgram,glCreateShader:_glCreateShader,glCullFace:_glCullFace,glDeleteBuffers:_glDeleteBuffers,glDeleteFramebuffers:_glDeleteFramebuffers,glDeleteProgram:_glDeleteProgram,glDeleteQueriesEXT:_glDeleteQueriesEXT,glDeleteRenderbuffers:_glDeleteRenderbuffers,glDeleteShader:_glDeleteShader,glDeleteTextures:_glDeleteTextures,glDeleteVertexArrays:_glDeleteVertexArrays,glDeleteVertexArraysOES:_glDeleteVertexArraysOES,glDepthFunc:_glDepthFunc,glDepthMask:_glDepthMask,glDepthRange:_glDepthRange,glDepthRangef:_glDepthRangef,glDetachShader:_glDetachShader,glDisable:_glDisable,glDisableVertexAttribArray:_glDisableVertexAttribArray,glDrawArrays:_glDrawArrays,glDrawArraysInstanced:_glDrawArraysInstanced,glDrawArraysInstancedANGLE:_glDrawArraysInstancedANGLE,glDrawArraysInstancedARB:_glDrawArraysInstancedARB,glDrawArraysInstancedEXT:_glDrawArraysInstancedEXT,glDrawArraysInstancedNV:_glDrawArraysInstancedNV,glDrawBuffers:_glDrawBuffers,glDrawBuffersEXT:_glDrawBuffersEXT,glDrawBuffersWEBGL:_glDrawBuffersWEBGL,glDrawElements:_glDrawElements,glDrawElementsInstanced:_glDrawElementsInstanced,glDrawElementsInstancedANGLE:_glDrawElementsInstancedANGLE,glDrawElementsInstancedARB:_glDrawElementsInstancedARB,glDrawElementsInstancedEXT:_glDrawElementsInstancedEXT,glDrawElementsInstancedNV:_glDrawElementsInstancedNV,glEnable:_glEnable,glEnableVertexAttribArray:_glEnableVertexAttribArray,glEndQueryEXT:_glEndQueryEXT,glFinish:_glFinish,glFlush:_glFlush,glFramebufferRenderbuffer:_glFramebufferRenderbuffer,glFramebufferTexture2D:_glFramebufferTexture2D,glFrontFace:_glFrontFace,glGenBuffers:_glGenBuffers,glGenFramebuffers:_glGenFramebuffers,glGenQueriesEXT:_glGenQueriesEXT,glGenRenderbuffers:_glGenRenderbuffers,glGenTextures:_glGenTextures,glGenVertexArrays:_glGenVertexArrays,glGenVertexArraysOES:_glGenVertexArraysOES,glGenerateMipmap:_glGenerateMipmap,glGetActiveAttrib:_glGetActiveAttrib,glGetActiveUniform:_glGetActiveUniform,glGetAttachedShaders:_glGetAttachedShaders,glGetAttribLocation:_glGetAttribLocation,glGetBooleanv:_glGetBooleanv,glGetBufferParameteriv:_glGetBufferParameteriv,glGetError:_glGetError,glGetFloatv:_glGetFloatv,glGetFramebufferAttachmentParameteriv:_glGetFramebufferAttachmentParameteriv,glGetIntegerv:_glGetIntegerv,glGetProgramInfoLog:_glGetProgramInfoLog,glGetProgramiv:_glGetProgramiv,glGetQueryObjecti64vEXT:_glGetQueryObjecti64vEXT,glGetQueryObjectivEXT:_glGetQueryObjectivEXT,glGetQueryObjectui64vEXT:_glGetQueryObjectui64vEXT,glGetQueryObjectuivEXT:_glGetQueryObjectuivEXT,glGetQueryivEXT:_glGetQueryivEXT,glGetRenderbufferParameteriv:_glGetRenderbufferParameteriv,glGetShaderInfoLog:_glGetShaderInfoLog,glGetShaderPrecisionFormat:_glGetShaderPrecisionFormat,glGetShaderSource:_glGetShaderSource,glGetShaderiv:_glGetShaderiv,glGetString:_glGetString,glGetTexParameterfv:_glGetTexParameterfv,glGetTexParameteriv:_glGetTexParameteriv,glGetUniformLocation:_glGetUniformLocation,glGetUniformfv:_glGetUniformfv,glGetUniformiv:_glGetUniformiv,glGetVertexAttribPointerv:_glGetVertexAttribPointerv,glGetVertexAttribfv:_glGetVertexAttribfv,glGetVertexAttribiv:_glGetVertexAttribiv,glHint:_glHint,glIsBuffer:_glIsBuffer,glIsEnabled:_glIsEnabled,glIsFramebuffer:_glIsFramebuffer,glIsProgram:_glIsProgram,glIsQueryEXT:_glIsQueryEXT,glIsRenderbuffer:_glIsRenderbuffer,glIsShader:_glIsShader,glIsTexture:_glIsTexture,glIsVertexArray:_glIsVertexArray,glIsVertexArrayOES:_glIsVertexArrayOES,glLineWidth:_glLineWidth,glLinkProgram:_glLinkProgram,glLoadIdentity:_glLoadIdentity,glMatrixMode:_glMatrixMode,glMultiDrawArrays:_glMultiDrawArrays,glMultiDrawArraysANGLE:_glMultiDrawArraysANGLE,glMultiDrawArraysInstancedANGLE:_glMultiDrawArraysInstancedANGLE,glMultiDrawArraysInstancedWEBGL:_glMultiDrawArraysInstancedWEBGL,glMultiDrawArraysWEBGL:_glMultiDrawArraysWEBGL,glMultiDrawElements:_glMultiDrawElements,glMultiDrawElementsANGLE:_glMultiDrawElementsANGLE,glMultiDrawElementsInstancedANGLE:_glMultiDrawElementsInstancedANGLE,glMultiDrawElementsInstancedWEBGL:_glMultiDrawElementsInstancedWEBGL,glMultiDrawElementsWEBGL:_glMultiDrawElementsWEBGL,glPixelStorei:_glPixelStorei,glPolygonOffset:_glPolygonOffset,glQueryCounterEXT:_glQueryCounterEXT,glReadPixels:_glReadPixels,glReleaseShaderCompiler:_glReleaseShaderCompiler,glRenderbufferStorage:_glRenderbufferStorage,glSampleCoverage:_glSampleCoverage,glScissor:_glScissor,glShaderBinary:_glShaderBinary,glShaderSource:_glShaderSource,glStencilFunc:_glStencilFunc,glStencilFuncSeparate:_glStencilFuncSeparate,glStencilMask:_glStencilMask,glStencilMaskSeparate:_glStencilMaskSeparate,glStencilOp:_glStencilOp,glStencilOpSeparate:_glStencilOpSeparate,glTexImage2D:_glTexImage2D,glTexParameterf:_glTexParameterf,glTexParameterfv:_glTexParameterfv,glTexParameteri:_glTexParameteri,glTexParameteriv:_glTexParameteriv,glTexSubImage2D:_glTexSubImage2D,glUniform1f:_glUniform1f,glUniform1fv:_glUniform1fv,glUniform1i:_glUniform1i,glUniform1iv:_glUniform1iv,glUniform2f:_glUniform2f,glUniform2fv:_glUniform2fv,glUniform2i:_glUniform2i,glUniform2iv:_glUniform2iv,glUniform3f:_glUniform3f,glUniform3fv:_glUniform3fv,glUniform3i:_glUniform3i,glUniform3iv:_glUniform3iv,glUniform4f:_glUniform4f,glUniform4fv:_glUniform4fv,glUniform4i:_glUniform4i,glUniform4iv:_glUniform4iv,glUniformMatrix2fv:_glUniformMatrix2fv,glUniformMatrix3fv:_glUniformMatrix3fv,glUniformMatrix4fv:_glUniformMatrix4fv,glUseProgram:_glUseProgram,glValidateProgram:_glValidateProgram,glVertexAttrib1f:_glVertexAttrib1f,glVertexAttrib1fv:_glVertexAttrib1fv,glVertexAttrib2f:_glVertexAttrib2f,glVertexAttrib2fv:_glVertexAttrib2fv,glVertexAttrib3f:_glVertexAttrib3f,glVertexAttrib3fv:_glVertexAttrib3fv,glVertexAttrib4f:_glVertexAttrib4f,glVertexAttrib4fv:_glVertexAttrib4fv,glVertexAttribDivisor:_glVertexAttribDivisor,glVertexAttribDivisorANGLE:_glVertexAttribDivisorANGLE,glVertexAttribDivisorARB:_glVertexAttribDivisorARB,glVertexAttribDivisorEXT:_glVertexAttribDivisorEXT,glVertexAttribDivisorNV:_glVertexAttribDivisorNV,glVertexAttribPointer:_glVertexAttribPointer,glVertexPointer:_glVertexPointer,glViewport:_glViewport,handle_next_result_js:handle_next_result_js,hiwire_invalid_ref:hiwire_invalid_ref,invoke_diii:invoke_diii,invoke_fiii:invoke_fiii,invoke_i:invoke_i,invoke_ii:invoke_ii,invoke_iii:invoke_iii,invoke_iiii:invoke_iiii,invoke_iiiii:invoke_iiiii,invoke_iiiiid:invoke_iiiiid,invoke_iiiiii:invoke_iiiiii,invoke_iiiiiii:invoke_iiiiiii,invoke_iiiiiiii:invoke_iiiiiiii,invoke_iiiiiiiiiii:invoke_iiiiiiiiiii,invoke_iiiiiiiiiiii:invoke_iiiiiiiiiiii,invoke_iiiiiiiiiiiii:invoke_iiiiiiiiiiiii,invoke_iiiiij:invoke_iiiiij,invoke_iiiiijj:invoke_iiiiijj,invoke_iiji:invoke_iiji,invoke_j:invoke_j,invoke_ji:invoke_ji,invoke_jii:invoke_jii,invoke_jiii:invoke_jiii,invoke_jiiii:invoke_jiiii,invoke_v:invoke_v,invoke_vi:invoke_vi,invoke_vii:invoke_vii,invoke_viid:invoke_viid,invoke_viif:invoke_viif,invoke_viii:invoke_viii,invoke_viiidi:invoke_viiidi,invoke_viiifi:invoke_viiifi,invoke_viiii:invoke_viiii,invoke_viiiii:invoke_viiiii,invoke_viiiiii:invoke_viiiiii,invoke_viiiiiii:invoke_viiiiiii,invoke_viiiiiiiiii:invoke_viiiiiiiiii,invoke_viiiiiiiiiiiiiii:invoke_viiiiiiiiiiiiiii,invoke_viijii:invoke_viijii,invoke_viijj:invoke_viijj,is_comlink_proxy:is_comlink_proxy,js2python_convert:js2python_convert,js2python_immutable_js:js2python_immutable_js,js2python_js:js2python_js,jslib_init_buffers_js:jslib_init_buffers_js,jslib_init_js:jslib_init_js,lineColor:_lineColor,lineRGBA:_lineRGBA,llvm_eh_typeid_for:_llvm_eh_typeid_for,memory:wasmMemory,my_dict_converter:my_dict_converter,new_error:new_error,pixelRGBA:_pixelRGBA,proc_exit:_proc_exit,proxy_cache_get:proxy_cache_get,proxy_cache_set:proxy_cache_set,pyodide_js_init:pyodide_js_init,pyproxy_AsPyObject:pyproxy_AsPyObject,pyproxy_Check:pyproxy_Check,pyproxy_new:pyproxy_new,pyproxy_new_ex:pyproxy_new_ex,python2js__default_converter_js:python2js__default_converter_js,python2js_custom__create_jscontext:python2js_custom__create_jscontext,random_get:_random_get,raw_call_js:raw_call_js,rectangleColor:_rectangleColor,rectangleRGBA:_rectangleRGBA,restore_stderr:restore_stderr,rotozoomSurface:_rotozoomSurface,setNetworkCallback:_setNetworkCallback,set_pyodide_module:set_pyodide_module,setprotoent:_setprotoent,stackAlloc:_stackAlloc,stackRestore:_stackRestore,stackSave:_stackSave,strftime:_strftime,strftime_l:_strftime_l,strptime:_strptime,strptime_l:_strptime_l,throw_no_gil:throw_no_gil,wrap_async_generator:wrap_async_generator,wrap_generator:wrap_generator,zoomSurface:_zoomSurface};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 _set_method_docstring=Module["_set_method_docstring"]=(a0,a1)=>(_set_method_docstring=Module["_set_method_docstring"]=wasmExports["set_method_docstring"])(a0,a1);var _PyObject_GetAttrString=Module["_PyObject_GetAttrString"]=(a0,a1)=>(_PyObject_GetAttrString=Module["_PyObject_GetAttrString"]=wasmExports["PyObject_GetAttrString"])(a0,a1);var __PyUnicode_FromId=Module["__PyUnicode_FromId"]=a0=>(__PyUnicode_FromId=Module["__PyUnicode_FromId"]=wasmExports["_PyUnicode_FromId"])(a0);var _PyObject_VectorcallMethod=Module["_PyObject_VectorcallMethod"]=(a0,a1,a2,a3)=>(_PyObject_VectorcallMethod=Module["_PyObject_VectorcallMethod"]=wasmExports["PyObject_VectorcallMethod"])(a0,a1,a2,a3);var _PyUnicode_AsUTF8AndSize=Module["_PyUnicode_AsUTF8AndSize"]=(a0,a1)=>(_PyUnicode_AsUTF8AndSize=Module["_PyUnicode_AsUTF8AndSize"]=wasmExports["PyUnicode_AsUTF8AndSize"])(a0,a1);var _malloc=a0=>(_malloc=wasmExports["malloc"])(a0);var _memcpy=(a0,a1,a2)=>(_memcpy=wasmExports["memcpy"])(a0,a1,a2);var __Py_Dealloc=Module["__Py_Dealloc"]=a0=>(__Py_Dealloc=Module["__Py_Dealloc"]=wasmExports["_Py_Dealloc"])(a0);var _PyErr_Format=Module["_PyErr_Format"]=(a0,a1,a2)=>(_PyErr_Format=Module["_PyErr_Format"]=wasmExports["PyErr_Format"])(a0,a1,a2);var _add_methods_and_set_docstrings=Module["_add_methods_and_set_docstrings"]=(a0,a1,a2)=>(_add_methods_and_set_docstrings=Module["_add_methods_and_set_docstrings"]=wasmExports["add_methods_and_set_docstrings"])(a0,a1,a2);var _PyModule_AddFunctions=Module["_PyModule_AddFunctions"]=(a0,a1)=>(_PyModule_AddFunctions=Module["_PyModule_AddFunctions"]=wasmExports["PyModule_AddFunctions"])(a0,a1);var _docstring_init=Module["_docstring_init"]=()=>(_docstring_init=Module["_docstring_init"]=wasmExports["docstring_init"])();var _PyImport_ImportModule=Module["_PyImport_ImportModule"]=a0=>(_PyImport_ImportModule=Module["_PyImport_ImportModule"]=wasmExports["PyImport_ImportModule"])(a0);var _dump_traceback=Module["_dump_traceback"]=()=>(_dump_traceback=Module["_dump_traceback"]=wasmExports["dump_traceback"])();var _fileno=a0=>(_fileno=wasmExports["fileno"])(a0);var _PyGILState_GetThisThreadState=Module["_PyGILState_GetThisThreadState"]=()=>(_PyGILState_GetThisThreadState=Module["_PyGILState_GetThisThreadState"]=wasmExports["PyGILState_GetThisThreadState"])();var __Py_DumpTraceback=Module["__Py_DumpTraceback"]=(a0,a1)=>(__Py_DumpTraceback=Module["__Py_DumpTraceback"]=wasmExports["_Py_DumpTraceback"])(a0,a1);var _set_error=Module["_set_error"]=a0=>(_set_error=Module["_set_error"]=wasmExports["set_error"])(a0);var _PyErr_SetObject=Module["_PyErr_SetObject"]=(a0,a1)=>(_PyErr_SetObject=Module["_PyErr_SetObject"]=wasmExports["PyErr_SetObject"])(a0,a1);var _restore_sys_last_exception=Module["_restore_sys_last_exception"]=a0=>(_restore_sys_last_exception=Module["_restore_sys_last_exception"]=wasmExports["restore_sys_last_exception"])(a0);var _PySys_GetObject=Module["_PySys_GetObject"]=a0=>(_PySys_GetObject=Module["_PySys_GetObject"]=wasmExports["PySys_GetObject"])(a0);var _PyErr_SetRaisedException=Module["_PyErr_SetRaisedException"]=a0=>(_PyErr_SetRaisedException=Module["_PyErr_SetRaisedException"]=wasmExports["PyErr_SetRaisedException"])(a0);var _wrap_exception=Module["_wrap_exception"]=()=>(_wrap_exception=Module["_wrap_exception"]=wasmExports["wrap_exception"])();var _PyErr_GetRaisedException=Module["_PyErr_GetRaisedException"]=()=>(_PyErr_GetRaisedException=Module["_PyErr_GetRaisedException"]=wasmExports["PyErr_GetRaisedException"])();var _PyErr_GivenExceptionMatches=Module["_PyErr_GivenExceptionMatches"]=(a0,a1)=>(_PyErr_GivenExceptionMatches=Module["_PyErr_GivenExceptionMatches"]=wasmExports["PyErr_GivenExceptionMatches"])(a0,a1);var _PyErr_Print=Module["_PyErr_Print"]=()=>(_PyErr_Print=Module["_PyErr_Print"]=wasmExports["PyErr_Print"])();var __PyObject_GetAttrId=Module["__PyObject_GetAttrId"]=(a0,a1)=>(__PyObject_GetAttrId=Module["__PyObject_GetAttrId"]=wasmExports["_PyObject_GetAttrId"])(a0,a1);var _PyUnicode_AsUTF8=Module["_PyUnicode_AsUTF8"]=a0=>(_PyUnicode_AsUTF8=Module["_PyUnicode_AsUTF8"]=wasmExports["PyUnicode_AsUTF8"])(a0);var _JsvNull_Check=Module["_JsvNull_Check"]=a0=>(_JsvNull_Check=Module["_JsvNull_Check"]=wasmExports["JsvNull_Check"])(a0);var _PySys_WriteStderr=Module["_PySys_WriteStderr"]=(a0,a1)=>(_PySys_WriteStderr=Module["_PySys_WriteStderr"]=wasmExports["PySys_WriteStderr"])(a0,a1);var _PyErr_DisplayException=Module["_PyErr_DisplayException"]=a0=>(_PyErr_DisplayException=Module["_PyErr_DisplayException"]=wasmExports["PyErr_DisplayException"])(a0);var _JsvString_FromId=Module["_JsvString_FromId"]=a0=>(_JsvString_FromId=Module["_JsvString_FromId"]=wasmExports["JsvString_FromId"])(a0);var _pythonexc2js=Module["_pythonexc2js"]=()=>(_pythonexc2js=Module["_pythonexc2js"]=wasmExports["pythonexc2js"])();var _trigger_fatal_error=Module["_trigger_fatal_error"]=(a0,a1)=>(_trigger_fatal_error=Module["_trigger_fatal_error"]=wasmExports["trigger_fatal_error"])(a0,a1);var _raw_call=Module["_raw_call"]=(a0,a1)=>(_raw_call=Module["_raw_call"]=wasmExports["raw_call"])(a0,a1);var _JsProxy_Val=Module["_JsProxy_Val"]=a0=>(_JsProxy_Val=Module["_JsProxy_Val"]=wasmExports["JsProxy_Val"])(a0);var _error_handling_init=Module["_error_handling_init"]=a0=>(_error_handling_init=Module["_error_handling_init"]=wasmExports["error_handling_init"])(a0);var _hiwire_new_deduplicate=Module["_hiwire_new_deduplicate"]=a0=>(_hiwire_new_deduplicate=Module["_hiwire_new_deduplicate"]=wasmExports["hiwire_new_deduplicate"])(a0);var _hiwire_new=Module["_hiwire_new"]=a0=>(_hiwire_new=Module["_hiwire_new"]=wasmExports["hiwire_new"])(a0);var _hiwire_incref_deduplicate=Module["_hiwire_incref_deduplicate"]=a0=>(_hiwire_incref_deduplicate=Module["_hiwire_incref_deduplicate"]=wasmExports["hiwire_incref_deduplicate"])(a0);var _hiwire_decref=Module["_hiwire_decref"]=a0=>(_hiwire_decref=Module["_hiwire_decref"]=wasmExports["hiwire_decref"])(a0);var _init_pyodide_proxy=Module["_init_pyodide_proxy"]=()=>(_init_pyodide_proxy=Module["_init_pyodide_proxy"]=wasmExports["init_pyodide_proxy"])();var _python2js=Module["_python2js"]=a0=>(_python2js=Module["_python2js"]=wasmExports["python2js"])(a0);var _PyInit__pyodide_core=Module["_PyInit__pyodide_core"]=()=>(_PyInit__pyodide_core=Module["_PyInit__pyodide_core"]=wasmExports["PyInit__pyodide_core"])();var _PyErr_Occurred=Module["_PyErr_Occurred"]=()=>(_PyErr_Occurred=Module["_PyErr_Occurred"]=wasmExports["PyErr_Occurred"])();var __PyErr_FormatFromCause=Module["__PyErr_FormatFromCause"]=(a0,a1,a2)=>(__PyErr_FormatFromCause=Module["__PyErr_FormatFromCause"]=wasmExports["_PyErr_FormatFromCause"])(a0,a1,a2);var _PyModule_Create2=Module["_PyModule_Create2"]=(a0,a1)=>(_PyModule_Create2=Module["_PyModule_Create2"]=wasmExports["PyModule_Create2"])(a0,a1);var _PyImport_GetModuleDict=Module["_PyImport_GetModuleDict"]=()=>(_PyImport_GetModuleDict=Module["_PyImport_GetModuleDict"]=wasmExports["PyImport_GetModuleDict"])();var _PyDict_SetItemString=Module["_PyDict_SetItemString"]=(a0,a1,a2)=>(_PyDict_SetItemString=Module["_PyDict_SetItemString"]=wasmExports["PyDict_SetItemString"])(a0,a1,a2);var _jslib_init=Module["_jslib_init"]=()=>(_jslib_init=Module["_jslib_init"]=wasmExports["jslib_init"])();var _python2js_init=Module["_python2js_init"]=a0=>(_python2js_init=Module["_python2js_init"]=wasmExports["python2js_init"])(a0);var _jsproxy_init=Module["_jsproxy_init"]=a0=>(_jsproxy_init=Module["_jsproxy_init"]=wasmExports["jsproxy_init"])(a0);var _jsproxy_call_init=Module["_jsproxy_call_init"]=a0=>(_jsproxy_call_init=Module["_jsproxy_call_init"]=wasmExports["jsproxy_call_init"])(a0);var _pyproxy_init=Module["_pyproxy_init"]=a0=>(_pyproxy_init=Module["_pyproxy_init"]=wasmExports["pyproxy_init"])(a0);var _jsbind_init=Module["_jsbind_init"]=a0=>(_jsbind_init=Module["_jsbind_init"]=wasmExports["jsbind_init"])(a0);var _pyodide_export=Module["_pyodide_export"]=()=>(_pyodide_export=Module["_pyodide_export"]=wasmExports["pyodide_export"])();var _py_version_major=Module["_py_version_major"]=()=>(_py_version_major=Module["_py_version_major"]=wasmExports["py_version_major"])();var _set_new_cframe=Module["_set_new_cframe"]=a0=>(_set_new_cframe=Module["_set_new_cframe"]=wasmExports["set_new_cframe"])(a0);var _PyUnicode_Data=Module["_PyUnicode_Data"]=a0=>(_PyUnicode_Data=Module["_PyUnicode_Data"]=wasmExports["PyUnicode_Data"])(a0);var __js2python_none=Module["__js2python_none"]=()=>(__js2python_none=Module["__js2python_none"]=wasmExports["_js2python_none"])();var __js2python_true=Module["__js2python_true"]=()=>(__js2python_true=Module["__js2python_true"]=wasmExports["_js2python_true"])();var __js2python_false=Module["__js2python_false"]=()=>(__js2python_false=Module["__js2python_false"]=wasmExports["_js2python_false"])();var __js2python_pyproxy=Module["__js2python_pyproxy"]=a0=>(__js2python_pyproxy=Module["__js2python_pyproxy"]=wasmExports["_js2python_pyproxy"])(a0);var _js2python_immutable=Module["_js2python_immutable"]=a0=>(_js2python_immutable=Module["_js2python_immutable"]=wasmExports["js2python_immutable"])(a0);var _js2python=Module["_js2python"]=a0=>(_js2python=Module["_js2python"]=wasmExports["js2python"])(a0);var _JsProxy_getflags=Module["_JsProxy_getflags"]=a0=>(_JsProxy_getflags=Module["_JsProxy_getflags"]=wasmExports["JsProxy_getflags"])(a0);var _PyLong_AsLong=Module["_PyLong_AsLong"]=a0=>(_PyLong_AsLong=Module["_PyLong_AsLong"]=wasmExports["PyLong_AsLong"])(a0);var _JsProxy_bind_sig=Module["_JsProxy_bind_sig"]=(a0,a1)=>(_JsProxy_bind_sig=Module["_JsProxy_bind_sig"]=wasmExports["JsProxy_bind_sig"])(a0,a1);var _hiwire_get=Module["_hiwire_get"]=a0=>(_hiwire_get=Module["_hiwire_get"]=wasmExports["hiwire_get"])(a0);var _JsRef_toVal=Module["_JsRef_toVal"]=a0=>(_JsRef_toVal=Module["_JsRef_toVal"]=wasmExports["JsRef_toVal"])(a0);var _PyErr_SetString=Module["_PyErr_SetString"]=(a0,a1)=>(_PyErr_SetString=Module["_PyErr_SetString"]=wasmExports["PyErr_SetString"])(a0,a1);var _JsProxy_create_with_type=Module["_JsProxy_create_with_type"]=(a0,a1,a2,a3)=>(_JsProxy_create_with_type=Module["_JsProxy_create_with_type"]=wasmExports["JsProxy_create_with_type"])(a0,a1,a2,a3);var _JsProxy_create_with_this=Module["_JsProxy_create_with_this"]=(a0,a1,a2)=>(_JsProxy_create_with_this=Module["_JsProxy_create_with_this"]=wasmExports["JsProxy_create_with_this"])(a0,a1,a2);var _handle_next_result=Module["_handle_next_result"]=(a0,a1,a2)=>(_handle_next_result=Module["_handle_next_result"]=wasmExports["handle_next_result"])(a0,a1,a2);var _free=Module["_free"]=a0=>(_free=Module["_free"]=wasmExports["free"])(a0);var _JsProxy_create_objmap=Module["_JsProxy_create_objmap"]=(a0,a1)=>(_JsProxy_create_objmap=Module["_JsProxy_create_objmap"]=wasmExports["JsProxy_create_objmap"])(a0,a1);var _JsProxy_am_send=Module["_JsProxy_am_send"]=(a0,a1,a2)=>(_JsProxy_am_send=Module["_JsProxy_am_send"]=wasmExports["JsProxy_am_send"])(a0,a1,a2);var _python2js_track_proxies=Module["_python2js_track_proxies"]=(a0,a1,a2)=>(_python2js_track_proxies=Module["_python2js_track_proxies"]=wasmExports["python2js_track_proxies"])(a0,a1,a2);var _JsvObject_CallMethodId_OneArg=Module["_JsvObject_CallMethodId_OneArg"]=(a0,a1,a2)=>(_JsvObject_CallMethodId_OneArg=Module["_JsvObject_CallMethodId_OneArg"]=wasmExports["JsvObject_CallMethodId_OneArg"])(a0,a1,a2);var _JsProxy_IterNext=Module["_JsProxy_IterNext"]=a0=>(_JsProxy_IterNext=Module["_JsProxy_IterNext"]=wasmExports["JsProxy_IterNext"])(a0);var __PyGen_SetStopIterationValue=Module["__PyGen_SetStopIterationValue"]=a0=>(__PyGen_SetStopIterationValue=Module["__PyGen_SetStopIterationValue"]=wasmExports["_PyGen_SetStopIterationValue"])(a0);var _JsGenerator_send=Module["_JsGenerator_send"]=(a0,a1)=>(_JsGenerator_send=Module["_JsGenerator_send"]=wasmExports["JsGenerator_send"])(a0,a1);var _PyErr_SetNone=Module["_PyErr_SetNone"]=a0=>(_PyErr_SetNone=Module["_PyErr_SetNone"]=wasmExports["PyErr_SetNone"])(a0);var _JsException_js_error_getter=Module["_JsException_js_error_getter"]=(a0,a1)=>(_JsException_js_error_getter=Module["_JsException_js_error_getter"]=wasmExports["JsException_js_error_getter"])(a0,a1);var _process_throw_args=Module["_process_throw_args"]=(a0,a1,a2,a3)=>(_process_throw_args=Module["_process_throw_args"]=wasmExports["process_throw_args"])(a0,a1,a2,a3);var _PyErr_NormalizeException=Module["_PyErr_NormalizeException"]=(a0,a1,a2)=>(_PyErr_NormalizeException=Module["_PyErr_NormalizeException"]=wasmExports["PyErr_NormalizeException"])(a0,a1,a2);var _PyException_GetTraceback=Module["_PyException_GetTraceback"]=a0=>(_PyException_GetTraceback=Module["_PyException_GetTraceback"]=wasmExports["PyException_GetTraceback"])(a0);var _PyException_SetTraceback=Module["_PyException_SetTraceback"]=(a0,a1)=>(_PyException_SetTraceback=Module["_PyException_SetTraceback"]=wasmExports["PyException_SetTraceback"])(a0,a1);var _PyErr_Restore=Module["_PyErr_Restore"]=(a0,a1,a2)=>(_PyErr_Restore=Module["_PyErr_Restore"]=wasmExports["PyErr_Restore"])(a0,a1,a2);var _PyErr_ExceptionMatches=Module["_PyErr_ExceptionMatches"]=a0=>(_PyErr_ExceptionMatches=Module["_PyErr_ExceptionMatches"]=wasmExports["PyErr_ExceptionMatches"])(a0);var _PyErr_Clear=Module["_PyErr_Clear"]=()=>(_PyErr_Clear=Module["_PyErr_Clear"]=wasmExports["PyErr_Clear"])();var _JsvObject_CallMethodId_NoArgs=Module["_JsvObject_CallMethodId_NoArgs"]=(a0,a1)=>(_JsvObject_CallMethodId_NoArgs=Module["_JsvObject_CallMethodId_NoArgs"]=wasmExports["JsvObject_CallMethodId_NoArgs"])(a0,a1);var _PyErr_Fetch=Module["_PyErr_Fetch"]=(a0,a1,a2)=>(_PyErr_Fetch=Module["_PyErr_Fetch"]=wasmExports["PyErr_Fetch"])(a0,a1,a2);var __agen_handle_result_js_c=Module["__agen_handle_result_js_c"]=(a0,a1,a2,a3,a4)=>(__agen_handle_result_js_c=Module["__agen_handle_result_js_c"]=wasmExports["_agen_handle_result_js_c"])(a0,a1,a2,a3,a4);var _PyObject_CallOneArg=Module["_PyObject_CallOneArg"]=(a0,a1)=>(_PyObject_CallOneArg=Module["_PyObject_CallOneArg"]=wasmExports["PyObject_CallOneArg"])(a0,a1);var __agen_handle_result=Module["__agen_handle_result"]=(a0,a1)=>(__agen_handle_result=Module["__agen_handle_result"]=wasmExports["_agen_handle_result"])(a0,a1);var _JsArray_sq_item=Module["_JsArray_sq_item"]=(a0,a1)=>(_JsArray_sq_item=Module["_JsArray_sq_item"]=wasmExports["JsArray_sq_item"])(a0,a1);var _JsArray_sq_ass_item=Module["_JsArray_sq_ass_item"]=(a0,a1,a2)=>(_JsArray_sq_ass_item=Module["_JsArray_sq_ass_item"]=wasmExports["JsArray_sq_ass_item"])(a0,a1,a2);var _JsTypedArray_sq_ass_item=Module["_JsTypedArray_sq_ass_item"]=(a0,a1,a2)=>(_JsTypedArray_sq_ass_item=Module["_JsTypedArray_sq_ass_item"]=wasmExports["JsTypedArray_sq_ass_item"])(a0,a1,a2);var _JsMap_update=Module["_JsMap_update"]=(a0,a1,a2)=>(_JsMap_update=Module["_JsMap_update"]=wasmExports["JsMap_update"])(a0,a1,a2);var __PyArg_ParseTuple_SizeT=Module["__PyArg_ParseTuple_SizeT"]=(a0,a1,a2)=>(__PyArg_ParseTuple_SizeT=Module["__PyArg_ParseTuple_SizeT"]=wasmExports["_PyArg_ParseTuple_SizeT"])(a0,a1,a2);var __PyObject_CallMethodIdObjArgs=Module["__PyObject_CallMethodIdObjArgs"]=(a0,a1,a2)=>(__PyObject_CallMethodIdObjArgs=Module["__PyObject_CallMethodIdObjArgs"]=wasmExports["_PyObject_CallMethodIdObjArgs"])(a0,a1,a2);var _wrap_promise=Module["_wrap_promise"]=(a0,a1,a2)=>(_wrap_promise=Module["_wrap_promise"]=wasmExports["wrap_promise"])(a0,a1,a2);var _PyTuple_GetItem=Module["_PyTuple_GetItem"]=(a0,a1)=>(_PyTuple_GetItem=Module["_PyTuple_GetItem"]=wasmExports["PyTuple_GetItem"])(a0,a1);var _JsvObject_CallMethodId=Module["_JsvObject_CallMethodId"]=(a0,a1,a2)=>(_JsvObject_CallMethodId=Module["_JsvObject_CallMethodId"]=wasmExports["JsvObject_CallMethodId"])(a0,a1,a2);var _Buffer_dealloc=Module["_Buffer_dealloc"]=a0=>(_Buffer_dealloc=Module["_Buffer_dealloc"]=wasmExports["Buffer_dealloc"])(a0);var _PyMem_Free=Module["_PyMem_Free"]=a0=>(_PyMem_Free=Module["_PyMem_Free"]=wasmExports["PyMem_Free"])(a0);var _JsBuffer_CopyIntoMemoryView=Module["_JsBuffer_CopyIntoMemoryView"]=(a0,a1,a2,a3)=>(_JsBuffer_CopyIntoMemoryView=Module["_JsBuffer_CopyIntoMemoryView"]=wasmExports["JsBuffer_CopyIntoMemoryView"])(a0,a1,a2,a3);var _PyMem_Malloc=Module["_PyMem_Malloc"]=a0=>(_PyMem_Malloc=Module["_PyMem_Malloc"]=wasmExports["PyMem_Malloc"])(a0);var _PyMemoryView_FromObject=Module["_PyMemoryView_FromObject"]=a0=>(_PyMemoryView_FromObject=Module["_PyMemoryView_FromObject"]=wasmExports["PyMemoryView_FromObject"])(a0);var _JsBuffer_cinit=Module["_JsBuffer_cinit"]=a0=>(_JsBuffer_cinit=Module["_JsBuffer_cinit"]=wasmExports["JsBuffer_cinit"])(a0);var _JsRef_new=Module["_JsRef_new"]=a0=>(_JsRef_new=Module["_JsRef_new"]=wasmExports["JsRef_new"])(a0);var _PyTuple_Pack=Module["_PyTuple_Pack"]=(a0,a1)=>(_PyTuple_Pack=Module["_PyTuple_Pack"]=wasmExports["PyTuple_Pack"])(a0,a1);var _PyLong_FromLong=Module["_PyLong_FromLong"]=a0=>(_PyLong_FromLong=Module["_PyLong_FromLong"]=wasmExports["PyLong_FromLong"])(a0);var _PyDict_GetItemWithError=Module["_PyDict_GetItemWithError"]=(a0,a1)=>(_PyDict_GetItemWithError=Module["_PyDict_GetItemWithError"]=wasmExports["PyDict_GetItemWithError"])(a0,a1);var _PyObject_SelfIter=Module["_PyObject_SelfIter"]=a0=>(_PyObject_SelfIter=Module["_PyObject_SelfIter"]=wasmExports["PyObject_SelfIter"])(a0);var _PyVectorcall_Call=Module["_PyVectorcall_Call"]=(a0,a1,a2)=>(_PyVectorcall_Call=Module["_PyVectorcall_Call"]=wasmExports["PyVectorcall_Call"])(a0,a1,a2);var _PyErr_NoMemory=Module["_PyErr_NoMemory"]=()=>(_PyErr_NoMemory=Module["_PyErr_NoMemory"]=wasmExports["PyErr_NoMemory"])();var _PyType_FromSpecWithBases=Module["_PyType_FromSpecWithBases"]=(a0,a1)=>(_PyType_FromSpecWithBases=Module["_PyType_FromSpecWithBases"]=wasmExports["PyType_FromSpecWithBases"])(a0,a1);var __PyObject_SetAttrId=Module["__PyObject_SetAttrId"]=(a0,a1,a2)=>(__PyObject_SetAttrId=Module["__PyObject_SetAttrId"]=wasmExports["_PyObject_SetAttrId"])(a0,a1,a2);var _PyDict_SetItem=Module["_PyDict_SetItem"]=(a0,a1,a2)=>(_PyDict_SetItem=Module["_PyDict_SetItem"]=wasmExports["PyDict_SetItem"])(a0,a1,a2);var _JsProxy_create=Module["_JsProxy_create"]=a0=>(_JsProxy_create=Module["_JsProxy_create"]=wasmExports["JsProxy_create"])(a0);var _JsProxy_Check=Module["_JsProxy_Check"]=a0=>(_JsProxy_Check=Module["_JsProxy_Check"]=wasmExports["JsProxy_Check"])(a0);var _PyType_IsSubtype=Module["_PyType_IsSubtype"]=(a0,a1)=>(_PyType_IsSubtype=Module["_PyType_IsSubtype"]=wasmExports["PyType_IsSubtype"])(a0,a1);var _JsProxy_init_docstrings=Module["_JsProxy_init_docstrings"]=a0=>(_JsProxy_init_docstrings=Module["_JsProxy_init_docstrings"]=wasmExports["JsProxy_init_docstrings"])(a0);var _run_sync_not_supported=Module["_run_sync_not_supported"]=(a0,a1)=>(_run_sync_not_supported=Module["_run_sync_not_supported"]=wasmExports["run_sync_not_supported"])(a0,a1);var _run_sync=Module["_run_sync"]=(a0,a1)=>(_run_sync=Module["_run_sync"]=wasmExports["run_sync"])(a0,a1);var _py_is_awaitable=Module["_py_is_awaitable"]=a0=>(_py_is_awaitable=Module["_py_is_awaitable"]=wasmExports["py_is_awaitable"])(a0);var _JsvPromise_Syncify=Module["_JsvPromise_Syncify"]=a0=>(_JsvPromise_Syncify=Module["_JsvPromise_Syncify"]=wasmExports["JsvPromise_Syncify"])(a0);var _can_run_sync=Module["_can_run_sync"]=(a0,a1)=>(_can_run_sync=Module["_can_run_sync"]=wasmExports["can_run_sync"])(a0,a1);var _PyDict_New=Module["_PyDict_New"]=()=>(_PyDict_New=Module["_PyDict_New"]=wasmExports["PyDict_New"])();var _PyObject_SetAttrString=Module["_PyObject_SetAttrString"]=(a0,a1,a2)=>(_PyObject_SetAttrString=Module["_PyObject_SetAttrString"]=wasmExports["PyObject_SetAttrString"])(a0,a1,a2);var _PyModule_AddObject=Module["_PyModule_AddObject"]=(a0,a1,a2)=>(_PyModule_AddObject=Module["_PyModule_AddObject"]=wasmExports["PyModule_AddObject"])(a0,a1,a2);var _PyType_Ready=Module["_PyType_Ready"]=a0=>(_PyType_Ready=Module["_PyType_Ready"]=wasmExports["PyType_Ready"])(a0);var _JsvObject_CallMethodId_TwoArgs=Module["_JsvObject_CallMethodId_TwoArgs"]=(a0,a1,a2,a3)=>(_JsvObject_CallMethodId_TwoArgs=Module["_JsvObject_CallMethodId_TwoArgs"]=wasmExports["JsvObject_CallMethodId_TwoArgs"])(a0,a1,a2,a3);var _PyObject_Repr=Module["_PyObject_Repr"]=a0=>(_PyObject_Repr=Module["_PyObject_Repr"]=wasmExports["PyObject_Repr"])(a0);var _PyIndex_Check=Module["_PyIndex_Check"]=a0=>(_PyIndex_Check=Module["_PyIndex_Check"]=wasmExports["PyIndex_Check"])(a0);var _PyNumber_AsSsize_t=Module["_PyNumber_AsSsize_t"]=(a0,a1)=>(_PyNumber_AsSsize_t=Module["_PyNumber_AsSsize_t"]=wasmExports["PyNumber_AsSsize_t"])(a0,a1);var _PySlice_Unpack=Module["_PySlice_Unpack"]=(a0,a1,a2,a3)=>(_PySlice_Unpack=Module["_PySlice_Unpack"]=wasmExports["PySlice_Unpack"])(a0,a1,a2,a3);var _PySlice_AdjustIndices=Module["_PySlice_AdjustIndices"]=(a0,a1,a2,a3)=>(_PySlice_AdjustIndices=Module["_PySlice_AdjustIndices"]=wasmExports["PySlice_AdjustIndices"])(a0,a1,a2,a3);var _PySequence_Fast=Module["_PySequence_Fast"]=(a0,a1)=>(_PySequence_Fast=Module["_PySequence_Fast"]=wasmExports["PySequence_Fast"])(a0,a1);var __PyArg_ParseTupleAndKeywords_SizeT=Module["__PyArg_ParseTupleAndKeywords_SizeT"]=(a0,a1,a2,a3,a4)=>(__PyArg_ParseTupleAndKeywords_SizeT=Module["__PyArg_ParseTupleAndKeywords_SizeT"]=wasmExports["_PyArg_ParseTupleAndKeywords_SizeT"])(a0,a1,a2,a3,a4);var _PySet_New=Module["_PySet_New"]=a0=>(_PySet_New=Module["_PySet_New"]=wasmExports["PySet_New"])(a0);var __PySet_Update=Module["__PySet_Update"]=(a0,a1)=>(__PySet_Update=Module["__PySet_Update"]=wasmExports["_PySet_Update"])(a0,a1);var _PyUnicode_FromString=Module["_PyUnicode_FromString"]=a0=>(_PyUnicode_FromString=Module["_PyUnicode_FromString"]=wasmExports["PyUnicode_FromString"])(a0);var _PySet_Discard=Module["_PySet_Discard"]=(a0,a1)=>(_PySet_Discard=Module["_PySet_Discard"]=wasmExports["PySet_Discard"])(a0,a1);var _PyList_New=Module["_PyList_New"]=a0=>(_PyList_New=Module["_PyList_New"]=wasmExports["PyList_New"])(a0);var __PyList_Extend=Module["__PyList_Extend"]=(a0,a1)=>(__PyList_Extend=Module["__PyList_Extend"]=wasmExports["_PyList_Extend"])(a0,a1);var _PyList_Sort=Module["_PyList_Sort"]=a0=>(_PyList_Sort=Module["_PyList_Sort"]=wasmExports["PyList_Sort"])(a0);var __PyArg_ParseStack_SizeT=Module["__PyArg_ParseStack_SizeT"]=(a0,a1,a2,a3)=>(__PyArg_ParseStack_SizeT=Module["__PyArg_ParseStack_SizeT"]=wasmExports["_PyArg_ParseStack_SizeT"])(a0,a1,a2,a3);var _PyObject_GetIter=Module["_PyObject_GetIter"]=a0=>(_PyObject_GetIter=Module["_PyObject_GetIter"]=wasmExports["PyObject_GetIter"])(a0);var _PyObject_RichCompareBool=Module["_PyObject_RichCompareBool"]=(a0,a1,a2)=>(_PyObject_RichCompareBool=Module["_PyObject_RichCompareBool"]=wasmExports["PyObject_RichCompareBool"])(a0,a1,a2);var __PyArg_ParseStackAndKeywords_SizeT=Module["__PyArg_ParseStackAndKeywords_SizeT"]=(a0,a1,a2,a3,a4)=>(__PyArg_ParseStackAndKeywords_SizeT=Module["__PyArg_ParseStackAndKeywords_SizeT"]=wasmExports["_PyArg_ParseStackAndKeywords_SizeT"])(a0,a1,a2,a3,a4);var _JsMethod_Vectorcall_impl=Module["_JsMethod_Vectorcall_impl"]=(a0,a1,a2,a3,a4,a5)=>(_JsMethod_Vectorcall_impl=Module["_JsMethod_Vectorcall_impl"]=wasmExports["JsMethod_Vectorcall_impl"])(a0,a1,a2,a3,a4,a5);var _hiwire_pop=Module["_hiwire_pop"]=a0=>(_hiwire_pop=Module["_hiwire_pop"]=wasmExports["hiwire_pop"])(a0);var _puts=Module["_puts"]=a0=>(_puts=Module["_puts"]=wasmExports["puts"])(a0);var _PyObject_GenericGetAttr=Module["_PyObject_GenericGetAttr"]=(a0,a1)=>(_PyObject_GenericGetAttr=Module["_PyObject_GenericGetAttr"]=wasmExports["PyObject_GenericGetAttr"])(a0,a1);var _strcmp=Module["_strcmp"]=(a0,a1)=>(_strcmp=Module["_strcmp"]=wasmExports["strcmp"])(a0,a1);var _Js2PyConverter_convert=Module["_Js2PyConverter_convert"]=(a0,a1,a2)=>(_Js2PyConverter_convert=Module["_Js2PyConverter_convert"]=wasmExports["Js2PyConverter_convert"])(a0,a1,a2);var _strncmp=Module["_strncmp"]=(a0,a1,a2)=>(_strncmp=Module["_strncmp"]=wasmExports["strncmp"])(a0,a1,a2);var _PyObject_GenericSetAttr=Module["_PyObject_GenericSetAttr"]=(a0,a1,a2)=>(_PyObject_GenericSetAttr=Module["_PyObject_GenericSetAttr"]=wasmExports["PyObject_GenericSetAttr"])(a0,a1,a2);var __Py_HashBytes=Module["__Py_HashBytes"]=(a0,a1)=>(__Py_HashBytes=Module["__Py_HashBytes"]=wasmExports["_Py_HashBytes"])(a0,a1);var _JsMethod_Construct_impl=Module["_JsMethod_Construct_impl"]=(a0,a1,a2,a3,a4)=>(_JsMethod_Construct_impl=Module["_JsMethod_Construct_impl"]=wasmExports["JsMethod_Construct_impl"])(a0,a1,a2,a3,a4);var __PyArg_CheckPositional=Module["__PyArg_CheckPositional"]=(a0,a1,a2,a3)=>(__PyArg_CheckPositional=Module["__PyArg_CheckPositional"]=wasmExports["_PyArg_CheckPositional"])(a0,a1,a2,a3);var __PyNumber_Index=Module["__PyNumber_Index"]=a0=>(__PyNumber_Index=Module["__PyNumber_Index"]=wasmExports["_PyNumber_Index"])(a0);var _PyLong_AsSsize_t=Module["_PyLong_AsSsize_t"]=a0=>(_PyLong_AsSsize_t=Module["_PyLong_AsSsize_t"]=wasmExports["PyLong_AsSsize_t"])(a0);var _PyLong_FromSsize_t=Module["_PyLong_FromSsize_t"]=a0=>(_PyLong_FromSsize_t=Module["_PyLong_FromSsize_t"]=wasmExports["PyLong_FromSsize_t"])(a0);var _PyObject_GetItem=Module["_PyObject_GetItem"]=(a0,a1)=>(_PyObject_GetItem=Module["_PyObject_GetItem"]=wasmExports["PyObject_GetItem"])(a0,a1);var _PyObject_DelItem=Module["_PyObject_DelItem"]=(a0,a1)=>(_PyObject_DelItem=Module["_PyObject_DelItem"]=wasmExports["PyObject_DelItem"])(a0,a1);var _PyObject_SetItem=Module["_PyObject_SetItem"]=(a0,a1,a2)=>(_PyObject_SetItem=Module["_PyObject_SetItem"]=wasmExports["PyObject_SetItem"])(a0,a1,a2);var _PyObject_GetBuffer=Module["_PyObject_GetBuffer"]=(a0,a1,a2)=>(_PyObject_GetBuffer=Module["_PyObject_GetBuffer"]=wasmExports["PyObject_GetBuffer"])(a0,a1,a2);var _PyBuffer_Release=Module["_PyBuffer_Release"]=a0=>(_PyBuffer_Release=Module["_PyBuffer_Release"]=wasmExports["PyBuffer_Release"])(a0);var _PyBytes_FromStringAndSize=Module["_PyBytes_FromStringAndSize"]=(a0,a1)=>(_PyBytes_FromStringAndSize=Module["_PyBytes_FromStringAndSize"]=wasmExports["PyBytes_FromStringAndSize"])(a0,a1);var _Py_EnterRecursiveCall=Module["_Py_EnterRecursiveCall"]=a0=>(_Py_EnterRecursiveCall=Module["_Py_EnterRecursiveCall"]=wasmExports["Py_EnterRecursiveCall"])(a0);var _Py_LeaveRecursiveCall=Module["_Py_LeaveRecursiveCall"]=()=>(_Py_LeaveRecursiveCall=Module["_Py_LeaveRecursiveCall"]=wasmExports["Py_LeaveRecursiveCall"])();var _Py2JsConverter_convert=Module["_Py2JsConverter_convert"]=(a0,a1,a2)=>(_Py2JsConverter_convert=Module["_Py2JsConverter_convert"]=wasmExports["Py2JsConverter_convert"])(a0,a1,a2);var __PyUnicode_EQ=Module["__PyUnicode_EQ"]=(a0,a1)=>(__PyUnicode_EQ=Module["__PyUnicode_EQ"]=wasmExports["_PyUnicode_EQ"])(a0,a1);var _PyObject_Vectorcall=Module["_PyObject_Vectorcall"]=(a0,a1,a2,a3)=>(_PyObject_Vectorcall=Module["_PyObject_Vectorcall"]=wasmExports["PyObject_Vectorcall"])(a0,a1,a2,a3);var _PyUnicode_FromFormat=Module["_PyUnicode_FromFormat"]=(a0,a1)=>(_PyUnicode_FromFormat=Module["_PyUnicode_FromFormat"]=wasmExports["PyUnicode_FromFormat"])(a0,a1);var _PyType_GenericNew=Module["_PyType_GenericNew"]=(a0,a1,a2)=>(_PyType_GenericNew=Module["_PyType_GenericNew"]=wasmExports["PyType_GenericNew"])(a0,a1,a2);var _PyObject_IsInstance=Module["_PyObject_IsInstance"]=(a0,a1)=>(_PyObject_IsInstance=Module["_PyObject_IsInstance"]=wasmExports["PyObject_IsInstance"])(a0,a1);var _python2js_inner=Module["_python2js_inner"]=(a0,a1,a2,a3,a4)=>(_python2js_inner=Module["_python2js_inner"]=wasmExports["python2js_inner"])(a0,a1,a2,a3,a4);var _python2js_custom=Module["_python2js_custom"]=(a0,a1,a2,a3,a4)=>(_python2js_custom=Module["_python2js_custom"]=wasmExports["python2js_custom"])(a0,a1,a2,a3,a4);var _PyObject_GC_UnTrack=Module["_PyObject_GC_UnTrack"]=a0=>(_PyObject_GC_UnTrack=Module["_PyObject_GC_UnTrack"]=wasmExports["PyObject_GC_UnTrack"])(a0);var _check_gil=Module["_check_gil"]=()=>(_check_gil=Module["_check_gil"]=wasmExports["check_gil"])();var _PyGILState_Check=Module["_PyGILState_Check"]=()=>(_PyGILState_Check=Module["_PyGILState_Check"]=wasmExports["PyGILState_Check"])();var _PyGen_GetCode=Module["_PyGen_GetCode"]=a0=>(_PyGen_GetCode=Module["_PyGen_GetCode"]=wasmExports["PyGen_GetCode"])(a0);var _pyproxy_getflags=Module["_pyproxy_getflags"]=(a0,a1)=>(_pyproxy_getflags=Module["_pyproxy_getflags"]=wasmExports["pyproxy_getflags"])(a0,a1);var _PyObject_HasAttr=Module["_PyObject_HasAttr"]=(a0,a1)=>(_PyObject_HasAttr=Module["_PyObject_HasAttr"]=wasmExports["PyObject_HasAttr"])(a0,a1);var __PyObject_NextNotImplemented=Module["__PyObject_NextNotImplemented"]=a0=>(__PyObject_NextNotImplemented=Module["__PyObject_NextNotImplemented"]=wasmExports["_PyObject_NextNotImplemented"])(a0);var _PyObject_IsSubclass=Module["_PyObject_IsSubclass"]=(a0,a1)=>(_PyObject_IsSubclass=Module["_PyObject_IsSubclass"]=wasmExports["PyObject_IsSubclass"])(a0,a1);var __pyproxy_repr=Module["__pyproxy_repr"]=a0=>(__pyproxy_repr=Module["__pyproxy_repr"]=wasmExports["_pyproxy_repr"])(a0);var _PyObject_Str=Module["_PyObject_Str"]=a0=>(_PyObject_Str=Module["_PyObject_Str"]=wasmExports["PyObject_Str"])(a0);var __pyproxy_type=Module["__pyproxy_type"]=a0=>(__pyproxy_type=Module["__pyproxy_type"]=wasmExports["_pyproxy_type"])(a0);var __pyproxy_hasattr=Module["__pyproxy_hasattr"]=(a0,a1)=>(__pyproxy_hasattr=Module["__pyproxy_hasattr"]=wasmExports["_pyproxy_hasattr"])(a0,a1);var _python2js_json_adaptor=Module["_python2js_json_adaptor"]=(a0,a1,a2)=>(_python2js_json_adaptor=Module["_python2js_json_adaptor"]=wasmExports["python2js_json_adaptor"])(a0,a1,a2);var __pyproxy_getattr=Module["__pyproxy_getattr"]=(a0,a1,a2)=>(__pyproxy_getattr=Module["__pyproxy_getattr"]=wasmExports["_pyproxy_getattr"])(a0,a1,a2);var __PyObject_GetMethod=Module["__PyObject_GetMethod"]=(a0,a1,a2)=>(__PyObject_GetMethod=Module["__PyObject_GetMethod"]=wasmExports["_PyObject_GetMethod"])(a0,a1,a2);var __pyproxy_setattr=Module["__pyproxy_setattr"]=(a0,a1,a2)=>(__pyproxy_setattr=Module["__pyproxy_setattr"]=wasmExports["_pyproxy_setattr"])(a0,a1,a2);var _PyObject_SetAttr=Module["_PyObject_SetAttr"]=(a0,a1,a2)=>(_PyObject_SetAttr=Module["_PyObject_SetAttr"]=wasmExports["PyObject_SetAttr"])(a0,a1,a2);var __pyproxy_delattr=Module["__pyproxy_delattr"]=(a0,a1)=>(__pyproxy_delattr=Module["__pyproxy_delattr"]=wasmExports["_pyproxy_delattr"])(a0,a1);var __pyproxy_getitem=Module["__pyproxy_getitem"]=(a0,a1,a2,a3)=>(__pyproxy_getitem=Module["__pyproxy_getitem"]=wasmExports["_pyproxy_getitem"])(a0,a1,a2,a3);var __pyproxy_setitem=Module["__pyproxy_setitem"]=(a0,a1,a2)=>(__pyproxy_setitem=Module["__pyproxy_setitem"]=wasmExports["_pyproxy_setitem"])(a0,a1,a2);var __pyproxy_delitem=Module["__pyproxy_delitem"]=(a0,a1)=>(__pyproxy_delitem=Module["__pyproxy_delitem"]=wasmExports["_pyproxy_delitem"])(a0,a1);var __pyproxy_slice_assign=Module["__pyproxy_slice_assign"]=(a0,a1,a2,a3)=>(__pyproxy_slice_assign=Module["__pyproxy_slice_assign"]=wasmExports["_pyproxy_slice_assign"])(a0,a1,a2,a3);var _PySequence_Size=Module["_PySequence_Size"]=a0=>(_PySequence_Size=Module["_PySequence_Size"]=wasmExports["PySequence_Size"])(a0);var _PySequence_GetSlice=Module["_PySequence_GetSlice"]=(a0,a1,a2)=>(_PySequence_GetSlice=Module["_PySequence_GetSlice"]=wasmExports["PySequence_GetSlice"])(a0,a1,a2);var _PySequence_SetSlice=Module["_PySequence_SetSlice"]=(a0,a1,a2,a3)=>(_PySequence_SetSlice=Module["_PySequence_SetSlice"]=wasmExports["PySequence_SetSlice"])(a0,a1,a2,a3);var _python2js_with_depth=Module["_python2js_with_depth"]=(a0,a1,a2)=>(_python2js_with_depth=Module["_python2js_with_depth"]=wasmExports["python2js_with_depth"])(a0,a1,a2);var __pyproxy_pop=Module["__pyproxy_pop"]=(a0,a1)=>(__pyproxy_pop=Module["__pyproxy_pop"]=wasmExports["_pyproxy_pop"])(a0,a1);var __pyproxy_contains=Module["__pyproxy_contains"]=(a0,a1)=>(__pyproxy_contains=Module["__pyproxy_contains"]=wasmExports["_pyproxy_contains"])(a0,a1);var _PySequence_Contains=Module["_PySequence_Contains"]=(a0,a1)=>(_PySequence_Contains=Module["_PySequence_Contains"]=wasmExports["PySequence_Contains"])(a0,a1);var __pyproxy_ownKeys=Module["__pyproxy_ownKeys"]=a0=>(__pyproxy_ownKeys=Module["__pyproxy_ownKeys"]=wasmExports["_pyproxy_ownKeys"])(a0);var _PyObject_Dir=Module["_PyObject_Dir"]=a0=>(_PyObject_Dir=Module["_PyObject_Dir"]=wasmExports["PyObject_Dir"])(a0);var _PyList_Size=Module["_PyList_Size"]=a0=>(_PyList_Size=Module["_PyList_Size"]=wasmExports["PyList_Size"])(a0);var _PyList_GetItem=Module["_PyList_GetItem"]=(a0,a1)=>(_PyList_GetItem=Module["_PyList_GetItem"]=wasmExports["PyList_GetItem"])(a0,a1);var __pyproxy_apply=Module["__pyproxy_apply"]=(a0,a1,a2,a3,a4)=>(__pyproxy_apply=Module["__pyproxy_apply"]=wasmExports["_pyproxy_apply"])(a0,a1,a2,a3,a4);var _PyTuple_New=Module["_PyTuple_New"]=a0=>(_PyTuple_New=Module["_PyTuple_New"]=wasmExports["PyTuple_New"])(a0);var __pyproxy_apply_promising=Module["__pyproxy_apply_promising"]=(a0,a1,a2,a3,a4,a5)=>(__pyproxy_apply_promising=Module["__pyproxy_apply_promising"]=wasmExports["_pyproxy_apply_promising"])(a0,a1,a2,a3,a4,a5);var _get_cframe=Module["_get_cframe"]=()=>(_get_cframe=Module["_get_cframe"]=wasmExports["get_cframe"])();var _exit_cframe=Module["_exit_cframe"]=a0=>(_exit_cframe=Module["_exit_cframe"]=wasmExports["exit_cframe"])(a0);var __iscoroutinefunction=Module["__iscoroutinefunction"]=a0=>(__iscoroutinefunction=Module["__iscoroutinefunction"]=wasmExports["_iscoroutinefunction"])(a0);var __pyproxy_iter_next=Module["__pyproxy_iter_next"]=(a0,a1,a2)=>(__pyproxy_iter_next=Module["__pyproxy_iter_next"]=wasmExports["_pyproxy_iter_next"])(a0,a1,a2);var _PyIter_Next=Module["_PyIter_Next"]=a0=>(_PyIter_Next=Module["_PyIter_Next"]=wasmExports["PyIter_Next"])(a0);var __pyproxyGen_Send=Module["__pyproxyGen_Send"]=(a0,a1)=>(__pyproxyGen_Send=Module["__pyproxyGen_Send"]=wasmExports["_pyproxyGen_Send"])(a0,a1);var _PyIter_Send=Module["_PyIter_Send"]=(a0,a1,a2)=>(_PyIter_Send=Module["_PyIter_Send"]=wasmExports["PyIter_Send"])(a0,a1,a2);var __pyproxyGen_return=Module["__pyproxyGen_return"]=(a0,a1)=>(__pyproxyGen_return=Module["__pyproxyGen_return"]=wasmExports["_pyproxyGen_return"])(a0,a1);var __PyGen_FetchStopIterationValue=Module["__PyGen_FetchStopIterationValue"]=a0=>(__PyGen_FetchStopIterationValue=Module["__PyGen_FetchStopIterationValue"]=wasmExports["_PyGen_FetchStopIterationValue"])(a0);var __pyproxyGen_throw=Module["__pyproxyGen_throw"]=(a0,a1)=>(__pyproxyGen_throw=Module["__pyproxyGen_throw"]=wasmExports["_pyproxyGen_throw"])(a0,a1);var __pyproxyGen_asend=Module["__pyproxyGen_asend"]=(a0,a1)=>(__pyproxyGen_asend=Module["__pyproxyGen_asend"]=wasmExports["_pyproxyGen_asend"])(a0,a1);var __pyproxyGen_areturn=Module["__pyproxyGen_areturn"]=a0=>(__pyproxyGen_areturn=Module["__pyproxyGen_areturn"]=wasmExports["_pyproxyGen_areturn"])(a0);var __pyproxyGen_athrow=Module["__pyproxyGen_athrow"]=(a0,a1)=>(__pyproxyGen_athrow=Module["__pyproxyGen_athrow"]=wasmExports["_pyproxyGen_athrow"])(a0,a1);var __pyproxy_aiter_next=Module["__pyproxy_aiter_next"]=a0=>(__pyproxy_aiter_next=Module["__pyproxy_aiter_next"]=wasmExports["_pyproxy_aiter_next"])(a0);var _FutureDoneCallback_call_resolve=Module["_FutureDoneCallback_call_resolve"]=(a0,a1)=>(_FutureDoneCallback_call_resolve=Module["_FutureDoneCallback_call_resolve"]=wasmExports["FutureDoneCallback_call_resolve"])(a0,a1);var _FutureDoneCallback_call_reject=Module["_FutureDoneCallback_call_reject"]=a0=>(_FutureDoneCallback_call_reject=Module["_FutureDoneCallback_call_reject"]=wasmExports["FutureDoneCallback_call_reject"])(a0);var _FutureDoneCallback_call=Module["_FutureDoneCallback_call"]=(a0,a1,a2)=>(_FutureDoneCallback_call=Module["_FutureDoneCallback_call"]=wasmExports["FutureDoneCallback_call"])(a0,a1,a2);var _PyArg_UnpackTuple=Module["_PyArg_UnpackTuple"]=(a0,a1,a2,a3,a4)=>(_PyArg_UnpackTuple=Module["_PyArg_UnpackTuple"]=wasmExports["PyArg_UnpackTuple"])(a0,a1,a2,a3,a4);var __pyproxy_ensure_future=Module["__pyproxy_ensure_future"]=(a0,a1,a2)=>(__pyproxy_ensure_future=Module["__pyproxy_ensure_future"]=wasmExports["_pyproxy_ensure_future"])(a0,a1,a2);var __pyproxy_get_buffer=Module["__pyproxy_get_buffer"]=a0=>(__pyproxy_get_buffer=Module["__pyproxy_get_buffer"]=wasmExports["_pyproxy_get_buffer"])(a0);var _PyBuffer_FillContiguousStrides=Module["_PyBuffer_FillContiguousStrides"]=(a0,a1,a2,a3,a4)=>(_PyBuffer_FillContiguousStrides=Module["_PyBuffer_FillContiguousStrides"]=wasmExports["PyBuffer_FillContiguousStrides"])(a0,a1,a2,a3,a4);var _PyBuffer_IsContiguous=Module["_PyBuffer_IsContiguous"]=(a0,a1)=>(_PyBuffer_IsContiguous=Module["_PyBuffer_IsContiguous"]=wasmExports["PyBuffer_IsContiguous"])(a0,a1);var _create_promise_handles_result_helper=Module["_create_promise_handles_result_helper"]=(a0,a1,a2)=>(_create_promise_handles_result_helper=Module["_create_promise_handles_result_helper"]=wasmExports["create_promise_handles_result_helper"])(a0,a1,a2);var __python2js_buffer=Module["__python2js_buffer"]=a0=>(__python2js_buffer=Module["__python2js_buffer"]=wasmExports["_python2js_buffer"])(a0);var _jslib_init_buffers=Module["_jslib_init_buffers"]=()=>(_jslib_init_buffers=Module["_jslib_init_buffers"]=wasmExports["jslib_init_buffers"])();var _JsRef_pop=Module["_JsRef_pop"]=a0=>(_JsRef_pop=Module["_JsRef_pop"]=wasmExports["JsRef_pop"])(a0);var _JsrString_FromId=Module["_JsrString_FromId"]=a0=>(_JsrString_FromId=Module["_JsrString_FromId"]=wasmExports["JsrString_FromId"])(a0);var _hiwire_intern=Module["_hiwire_intern"]=a0=>(_hiwire_intern=Module["_hiwire_intern"]=wasmExports["hiwire_intern"])(a0);var __python2js=Module["__python2js"]=(a0,a1)=>(__python2js=Module["__python2js"]=wasmExports["_python2js"])(a0,a1);var _PySequence_GetItem=Module["_PySequence_GetItem"]=(a0,a1)=>(_PySequence_GetItem=Module["_PySequence_GetItem"]=wasmExports["PySequence_GetItem"])(a0,a1);var _PyObject_CheckBuffer=Module["_PyObject_CheckBuffer"]=a0=>(_PyObject_CheckBuffer=Module["_PyObject_CheckBuffer"]=wasmExports["PyObject_CheckBuffer"])(a0);var _PyFloat_AsDouble=Module["_PyFloat_AsDouble"]=a0=>(_PyFloat_AsDouble=Module["_PyFloat_AsDouble"]=wasmExports["PyFloat_AsDouble"])(a0);var _python2js__default_converter=Module["_python2js__default_converter"]=(a0,a1)=>(_python2js__default_converter=Module["_python2js__default_converter"]=wasmExports["python2js__default_converter"])(a0,a1);var _PyLong_AsLongAndOverflow=Module["_PyLong_AsLongAndOverflow"]=(a0,a1)=>(_PyLong_AsLongAndOverflow=Module["_PyLong_AsLongAndOverflow"]=wasmExports["PyLong_AsLongAndOverflow"])(a0,a1);var __PyLong_NumBits=Module["__PyLong_NumBits"]=a0=>(__PyLong_NumBits=Module["__PyLong_NumBits"]=wasmExports["_PyLong_NumBits"])(a0);var __PyLong_AsByteArray=Module["__PyLong_AsByteArray"]=(a0,a1,a2,a3,a4)=>(__PyLong_AsByteArray=Module["__PyLong_AsByteArray"]=wasmExports["_PyLong_AsByteArray"])(a0,a1,a2,a3,a4);var _py_version_minor=Module["_py_version_minor"]=()=>(_py_version_minor=Module["_py_version_minor"]=wasmExports["py_version_minor"])();var _py_version_micro=Module["_py_version_micro"]=()=>(_py_version_micro=Module["_py_version_micro"]=wasmExports["py_version_micro"])();var _saveAsyncioState=Module["_saveAsyncioState"]=a0=>(_saveAsyncioState=Module["_saveAsyncioState"]=wasmExports["saveAsyncioState"])(a0);var _PyObject_Hash=Module["_PyObject_Hash"]=a0=>(_PyObject_Hash=Module["_PyObject_Hash"]=wasmExports["PyObject_Hash"])(a0);var __PyDict_GetItem_KnownHash=Module["__PyDict_GetItem_KnownHash"]=(a0,a1,a2)=>(__PyDict_GetItem_KnownHash=Module["__PyDict_GetItem_KnownHash"]=wasmExports["_PyDict_GetItem_KnownHash"])(a0,a1,a2);var _restoreAsyncioState=Module["_restoreAsyncioState"]=a0=>(_restoreAsyncioState=Module["_restoreAsyncioState"]=wasmExports["restoreAsyncioState"])(a0);var _captureThreadState=Module["_captureThreadState"]=()=>(_captureThreadState=Module["_captureThreadState"]=wasmExports["captureThreadState"])();var _PyInterpreterState_Get=Module["_PyInterpreterState_Get"]=()=>(_PyInterpreterState_Get=Module["_PyInterpreterState_Get"]=wasmExports["PyInterpreterState_Get"])();var _PyThreadState_New=Module["_PyThreadState_New"]=a0=>(_PyThreadState_New=Module["_PyThreadState_New"]=wasmExports["PyThreadState_New"])(a0);var _restoreThreadState=Module["_restoreThreadState"]=a0=>(_restoreThreadState=Module["_restoreThreadState"]=wasmExports["restoreThreadState"])(a0);var _PyThreadState_Delete=Module["_PyThreadState_Delete"]=a0=>(_PyThreadState_Delete=Module["_PyThreadState_Delete"]=wasmExports["PyThreadState_Delete"])(a0);var _PyThreadState_Get=Module["_PyThreadState_Get"]=()=>(_PyThreadState_Get=Module["_PyThreadState_Get"]=wasmExports["PyThreadState_Get"])();var _restore_cframe=Module["_restore_cframe"]=a0=>(_restore_cframe=Module["_restore_cframe"]=wasmExports["restore_cframe"])(a0);var _PyObject_GetArenaAllocator=Module["_PyObject_GetArenaAllocator"]=a0=>(_PyObject_GetArenaAllocator=Module["_PyObject_GetArenaAllocator"]=wasmExports["PyObject_GetArenaAllocator"])(a0);var _main=Module["_main"]=(a0,a1)=>(_main=Module["_main"]=wasmExports["__main_argc_argv"])(a0,a1);var _PyImport_AppendInittab=Module["_PyImport_AppendInittab"]=(a0,a1)=>(_PyImport_AppendInittab=Module["_PyImport_AppendInittab"]=wasmExports["PyImport_AppendInittab"])(a0,a1);var _PyPreConfig_InitPythonConfig=Module["_PyPreConfig_InitPythonConfig"]=a0=>(_PyPreConfig_InitPythonConfig=Module["_PyPreConfig_InitPythonConfig"]=wasmExports["PyPreConfig_InitPythonConfig"])(a0);var _Py_PreInitializeFromBytesArgs=Module["_Py_PreInitializeFromBytesArgs"]=(a0,a1,a2,a3)=>(_Py_PreInitializeFromBytesArgs=Module["_Py_PreInitializeFromBytesArgs"]=wasmExports["Py_PreInitializeFromBytesArgs"])(a0,a1,a2,a3);var _PyStatus_Exception=Module["_PyStatus_Exception"]=a0=>(_PyStatus_Exception=Module["_PyStatus_Exception"]=wasmExports["PyStatus_Exception"])(a0);var _PyConfig_InitPythonConfig=Module["_PyConfig_InitPythonConfig"]=a0=>(_PyConfig_InitPythonConfig=Module["_PyConfig_InitPythonConfig"]=wasmExports["PyConfig_InitPythonConfig"])(a0);var _PyConfig_SetBytesArgv=Module["_PyConfig_SetBytesArgv"]=(a0,a1,a2,a3)=>(_PyConfig_SetBytesArgv=Module["_PyConfig_SetBytesArgv"]=wasmExports["PyConfig_SetBytesArgv"])(a0,a1,a2,a3);var _PyConfig_SetBytesString=Module["_PyConfig_SetBytesString"]=(a0,a1,a2,a3)=>(_PyConfig_SetBytesString=Module["_PyConfig_SetBytesString"]=wasmExports["PyConfig_SetBytesString"])(a0,a1,a2,a3);var _Py_InitializeFromConfig=Module["_Py_InitializeFromConfig"]=(a0,a1)=>(_Py_InitializeFromConfig=Module["_Py_InitializeFromConfig"]=wasmExports["Py_InitializeFromConfig"])(a0,a1);var _PyConfig_Clear=Module["_PyConfig_Clear"]=a0=>(_PyConfig_Clear=Module["_PyConfig_Clear"]=wasmExports["PyConfig_Clear"])(a0);var _Py_ExitStatusException=Module["_Py_ExitStatusException"]=a0=>(_Py_ExitStatusException=Module["_Py_ExitStatusException"]=wasmExports["Py_ExitStatusException"])(a0);var _run_main=Module["_run_main"]=()=>(_run_main=Module["_run_main"]=wasmExports["run_main"])();var _Py_GetBuildInfo=Module["_Py_GetBuildInfo"]=()=>(_Py_GetBuildInfo=Module["_Py_GetBuildInfo"]=wasmExports["Py_GetBuildInfo"])();var _PyOS_snprintf=Module["_PyOS_snprintf"]=(a0,a1,a2,a3)=>(_PyOS_snprintf=Module["_PyOS_snprintf"]=wasmExports["PyOS_snprintf"])(a0,a1,a2,a3);var __Py_gitversion=Module["__Py_gitversion"]=()=>(__Py_gitversion=Module["__Py_gitversion"]=wasmExports["_Py_gitversion"])();var __Py_gitidentifier=Module["__Py_gitidentifier"]=()=>(__Py_gitidentifier=Module["__Py_gitidentifier"]=wasmExports["_Py_gitidentifier"])();var __PyToken_OneChar=Module["__PyToken_OneChar"]=a0=>(__PyToken_OneChar=Module["__PyToken_OneChar"]=wasmExports["_PyToken_OneChar"])(a0);var __PyToken_TwoChars=Module["__PyToken_TwoChars"]=(a0,a1)=>(__PyToken_TwoChars=Module["__PyToken_TwoChars"]=wasmExports["_PyToken_TwoChars"])(a0,a1);var __PyToken_ThreeChars=Module["__PyToken_ThreeChars"]=(a0,a1,a2)=>(__PyToken_ThreeChars=Module["__PyToken_ThreeChars"]=wasmExports["_PyToken_ThreeChars"])(a0,a1,a2);var _strlen=Module["_strlen"]=a0=>(_strlen=Module["_strlen"]=wasmExports["strlen"])(a0);var _PyUnicode_DecodeUTF8=Module["_PyUnicode_DecodeUTF8"]=(a0,a1,a2)=>(_PyUnicode_DecodeUTF8=Module["_PyUnicode_DecodeUTF8"]=wasmExports["PyUnicode_DecodeUTF8"])(a0,a1,a2);var _PyUnicode_Substring=Module["_PyUnicode_Substring"]=(a0,a1,a2)=>(_PyUnicode_Substring=Module["_PyUnicode_Substring"]=wasmExports["PyUnicode_Substring"])(a0,a1,a2);var __PyImport_GetModuleAttrString=Module["__PyImport_GetModuleAttrString"]=(a0,a1)=>(__PyImport_GetModuleAttrString=Module["__PyImport_GetModuleAttrString"]=wasmExports["_PyImport_GetModuleAttrString"])(a0,a1);var __PyUnicode_EqualToASCIIString=Module["__PyUnicode_EqualToASCIIString"]=(a0,a1)=>(__PyUnicode_EqualToASCIIString=Module["__PyUnicode_EqualToASCIIString"]=wasmExports["_PyUnicode_EqualToASCIIString"])(a0,a1);var __PyArena_Malloc=Module["__PyArena_Malloc"]=(a0,a1)=>(__PyArena_Malloc=Module["__PyArena_Malloc"]=wasmExports["_PyArena_Malloc"])(a0,a1);var _strncpy=Module["_strncpy"]=(a0,a1,a2)=>(_strncpy=Module["_strncpy"]=wasmExports["strncpy"])(a0,a1,a2);var _PyMem_Realloc=Module["_PyMem_Realloc"]=(a0,a1)=>(_PyMem_Realloc=Module["_PyMem_Realloc"]=wasmExports["PyMem_Realloc"])(a0,a1);var _PyMem_Calloc=Module["_PyMem_Calloc"]=(a0,a1)=>(_PyMem_Calloc=Module["_PyMem_Calloc"]=wasmExports["PyMem_Calloc"])(a0,a1);var __PyArena_AddPyObject=Module["__PyArena_AddPyObject"]=(a0,a1)=>(__PyArena_AddPyObject=Module["__PyArena_AddPyObject"]=wasmExports["_PyArena_AddPyObject"])(a0,a1);var _PyBytes_AsString=Module["_PyBytes_AsString"]=a0=>(_PyBytes_AsString=Module["_PyBytes_AsString"]=wasmExports["PyBytes_AsString"])(a0);var _PyUnicode_InternFromString=Module["_PyUnicode_InternFromString"]=a0=>(_PyUnicode_InternFromString=Module["_PyUnicode_InternFromString"]=wasmExports["PyUnicode_InternFromString"])(a0);var __PyObject_FastCall=Module["__PyObject_FastCall"]=(a0,a1,a2)=>(__PyObject_FastCall=Module["__PyObject_FastCall"]=wasmExports["_PyObject_FastCall"])(a0,a1,a2);var __PyType_Name=Module["__PyType_Name"]=a0=>(__PyType_Name=Module["__PyType_Name"]=wasmExports["_PyType_Name"])(a0);var _PyUnicode_InternInPlace=Module["_PyUnicode_InternInPlace"]=a0=>(_PyUnicode_InternInPlace=Module["_PyUnicode_InternInPlace"]=wasmExports["PyUnicode_InternInPlace"])(a0);var _PyBytes_AsStringAndSize=Module["_PyBytes_AsStringAndSize"]=(a0,a1,a2)=>(_PyBytes_AsStringAndSize=Module["_PyBytes_AsStringAndSize"]=wasmExports["PyBytes_AsStringAndSize"])(a0,a1,a2);var _strchr=Module["_strchr"]=(a0,a1)=>(_strchr=Module["_strchr"]=wasmExports["strchr"])(a0,a1);var _PyUnicode_CompareWithASCIIString=Module["_PyUnicode_CompareWithASCIIString"]=(a0,a1)=>(_PyUnicode_CompareWithASCIIString=Module["_PyUnicode_CompareWithASCIIString"]=wasmExports["PyUnicode_CompareWithASCIIString"])(a0,a1);var ___errno_location=()=>(___errno_location=wasmExports["__errno_location"])();var _PyOS_strtoul=Module["_PyOS_strtoul"]=(a0,a1,a2)=>(_PyOS_strtoul=Module["_PyOS_strtoul"]=wasmExports["PyOS_strtoul"])(a0,a1,a2);var _PyLong_FromString=Module["_PyLong_FromString"]=(a0,a1,a2)=>(_PyLong_FromString=Module["_PyLong_FromString"]=wasmExports["PyLong_FromString"])(a0,a1,a2);var _PyOS_strtol=Module["_PyOS_strtol"]=(a0,a1,a2)=>(_PyOS_strtol=Module["_PyOS_strtol"]=wasmExports["PyOS_strtol"])(a0,a1,a2);var _PyOS_string_to_double=Module["_PyOS_string_to_double"]=(a0,a1,a2)=>(_PyOS_string_to_double=Module["_PyOS_string_to_double"]=wasmExports["PyOS_string_to_double"])(a0,a1,a2);var _PyComplex_FromCComplex=Module["_PyComplex_FromCComplex"]=a0=>(_PyComplex_FromCComplex=Module["_PyComplex_FromCComplex"]=wasmExports["PyComplex_FromCComplex"])(a0);var _PyFloat_FromDouble=Module["_PyFloat_FromDouble"]=a0=>(_PyFloat_FromDouble=Module["_PyFloat_FromDouble"]=wasmExports["PyFloat_FromDouble"])(a0);var _Py_BuildValue=Module["_Py_BuildValue"]=(a0,a1)=>(_Py_BuildValue=Module["_Py_BuildValue"]=wasmExports["Py_BuildValue"])(a0,a1);var _PyUnicode_FromFormatV=Module["_PyUnicode_FromFormatV"]=(a0,a1)=>(_PyUnicode_FromFormatV=Module["_PyUnicode_FromFormatV"]=wasmExports["PyUnicode_FromFormatV"])(a0,a1);var __PyErr_ProgramDecodedTextObject=Module["__PyErr_ProgramDecodedTextObject"]=(a0,a1,a2)=>(__PyErr_ProgramDecodedTextObject=Module["__PyErr_ProgramDecodedTextObject"]=wasmExports["_PyErr_ProgramDecodedTextObject"])(a0,a1,a2);var _PyUnicode_FromStringAndSize=Module["_PyUnicode_FromStringAndSize"]=(a0,a1)=>(_PyUnicode_FromStringAndSize=Module["_PyUnicode_FromStringAndSize"]=wasmExports["PyUnicode_FromStringAndSize"])(a0,a1);var _strcpy=Module["_strcpy"]=(a0,a1)=>(_strcpy=Module["_strcpy"]=wasmExports["strcpy"])(a0,a1);var _PyUnicode_GetLength=Module["_PyUnicode_GetLength"]=a0=>(_PyUnicode_GetLength=Module["_PyUnicode_GetLength"]=wasmExports["PyUnicode_GetLength"])(a0);var _strpbrk=Module["_strpbrk"]=(a0,a1)=>(_strpbrk=Module["_strpbrk"]=wasmExports["strpbrk"])(a0,a1);var _PyBytes_FromString=Module["_PyBytes_FromString"]=a0=>(_PyBytes_FromString=Module["_PyBytes_FromString"]=wasmExports["PyBytes_FromString"])(a0);var _PyBytes_Concat=Module["_PyBytes_Concat"]=(a0,a1)=>(_PyBytes_Concat=Module["_PyBytes_Concat"]=wasmExports["PyBytes_Concat"])(a0,a1);var __PyUnicodeWriter_Init=Module["__PyUnicodeWriter_Init"]=a0=>(__PyUnicodeWriter_Init=Module["__PyUnicodeWriter_Init"]=wasmExports["_PyUnicodeWriter_Init"])(a0);var __PyUnicodeWriter_WriteStr=Module["__PyUnicodeWriter_WriteStr"]=(a0,a1)=>(__PyUnicodeWriter_WriteStr=Module["__PyUnicodeWriter_WriteStr"]=wasmExports["_PyUnicodeWriter_WriteStr"])(a0,a1);var __PyUnicodeWriter_Dealloc=Module["__PyUnicodeWriter_Dealloc"]=a0=>(__PyUnicodeWriter_Dealloc=Module["__PyUnicodeWriter_Dealloc"]=wasmExports["_PyUnicodeWriter_Dealloc"])(a0);var __PyUnicodeWriter_Finish=Module["__PyUnicodeWriter_Finish"]=a0=>(__PyUnicodeWriter_Finish=Module["__PyUnicodeWriter_Finish"]=wasmExports["_PyUnicodeWriter_Finish"])(a0);var _PyUnicode_DecodeUTF8Stateful=Module["_PyUnicode_DecodeUTF8Stateful"]=(a0,a1,a2,a3)=>(_PyUnicode_DecodeUTF8Stateful=Module["_PyUnicode_DecodeUTF8Stateful"]=wasmExports["PyUnicode_DecodeUTF8Stateful"])(a0,a1,a2,a3);var _siprintf=Module["_siprintf"]=(a0,a1,a2)=>(_siprintf=Module["_siprintf"]=wasmExports["siprintf"])(a0,a1,a2);var __PyUnicode_DecodeUnicodeEscapeInternal=Module["__PyUnicode_DecodeUnicodeEscapeInternal"]=(a0,a1,a2,a3,a4)=>(__PyUnicode_DecodeUnicodeEscapeInternal=Module["__PyUnicode_DecodeUnicodeEscapeInternal"]=wasmExports["_PyUnicode_DecodeUnicodeEscapeInternal"])(a0,a1,a2,a3,a4);var __PyErr_BadInternalCall=Module["__PyErr_BadInternalCall"]=(a0,a1)=>(__PyErr_BadInternalCall=Module["__PyErr_BadInternalCall"]=wasmExports["_PyErr_BadInternalCall"])(a0,a1);var __PyBytes_DecodeEscape=Module["__PyBytes_DecodeEscape"]=(a0,a1,a2,a3)=>(__PyBytes_DecodeEscape=Module["__PyBytes_DecodeEscape"]=wasmExports["_PyBytes_DecodeEscape"])(a0,a1,a2,a3);var _PyErr_WarnExplicitObject=Module["_PyErr_WarnExplicitObject"]=(a0,a1,a2,a3,a4,a5)=>(_PyErr_WarnExplicitObject=Module["_PyErr_WarnExplicitObject"]=wasmExports["PyErr_WarnExplicitObject"])(a0,a1,a2,a3,a4,a5);var _PySys_Audit=Module["_PySys_Audit"]=(a0,a1,a2)=>(_PySys_Audit=Module["_PySys_Audit"]=wasmExports["PySys_Audit"])(a0,a1,a2);var _fflush=Module["_fflush"]=a0=>(_fflush=Module["_fflush"]=wasmExports["fflush"])(a0);var _fputs=Module["_fputs"]=(a0,a1)=>(_fputs=Module["_fputs"]=wasmExports["fputs"])(a0,a1);var _PyMem_RawFree=Module["_PyMem_RawFree"]=a0=>(_PyMem_RawFree=Module["_PyMem_RawFree"]=wasmExports["PyMem_RawFree"])(a0);var _PyEval_RestoreThread=Module["_PyEval_RestoreThread"]=a0=>(_PyEval_RestoreThread=Module["_PyEval_RestoreThread"]=wasmExports["PyEval_RestoreThread"])(a0);var _PyEval_SaveThread=Module["_PyEval_SaveThread"]=()=>(_PyEval_SaveThread=Module["_PyEval_SaveThread"]=wasmExports["PyEval_SaveThread"])();var _PyMem_RawRealloc=Module["_PyMem_RawRealloc"]=(a0,a1)=>(_PyMem_RawRealloc=Module["_PyMem_RawRealloc"]=wasmExports["PyMem_RawRealloc"])(a0,a1);var _clearerr=Module["_clearerr"]=a0=>(_clearerr=Module["_clearerr"]=wasmExports["clearerr"])(a0);var _fgets=Module["_fgets"]=(a0,a1,a2)=>(_fgets=Module["_fgets"]=wasmExports["fgets"])(a0,a1,a2);var _feof=Module["_feof"]=a0=>(_feof=Module["_feof"]=wasmExports["feof"])(a0);var __PyOS_InterruptOccurred=Module["__PyOS_InterruptOccurred"]=a0=>(__PyOS_InterruptOccurred=Module["__PyOS_InterruptOccurred"]=wasmExports["_PyOS_InterruptOccurred"])(a0);var _PyErr_CheckSignals=Module["_PyErr_CheckSignals"]=()=>(_PyErr_CheckSignals=Module["_PyErr_CheckSignals"]=wasmExports["PyErr_CheckSignals"])();var _PyOS_Readline=Module["_PyOS_Readline"]=(a0,a1,a2)=>(_PyOS_Readline=Module["_PyOS_Readline"]=wasmExports["PyOS_Readline"])(a0,a1,a2);var _PyThread_allocate_lock=Module["_PyThread_allocate_lock"]=()=>(_PyThread_allocate_lock=Module["_PyThread_allocate_lock"]=wasmExports["PyThread_allocate_lock"])();var _PyThread_acquire_lock=Module["_PyThread_acquire_lock"]=(a0,a1)=>(_PyThread_acquire_lock=Module["_PyThread_acquire_lock"]=wasmExports["PyThread_acquire_lock"])(a0,a1);var _isatty=Module["_isatty"]=a0=>(_isatty=Module["_isatty"]=wasmExports["isatty"])(a0);var _PyThread_release_lock=Module["_PyThread_release_lock"]=a0=>(_PyThread_release_lock=Module["_PyThread_release_lock"]=wasmExports["PyThread_release_lock"])(a0);var _PyUnicode_Decode=Module["_PyUnicode_Decode"]=(a0,a1,a2,a3)=>(_PyUnicode_Decode=Module["_PyUnicode_Decode"]=wasmExports["PyUnicode_Decode"])(a0,a1,a2,a3);var _PyUnicode_AsUTF8String=Module["_PyUnicode_AsUTF8String"]=a0=>(_PyUnicode_AsUTF8String=Module["_PyUnicode_AsUTF8String"]=wasmExports["PyUnicode_AsUTF8String"])(a0);var __Py_FatalErrorFunc=Module["__Py_FatalErrorFunc"]=(a0,a1)=>(__Py_FatalErrorFunc=Module["__Py_FatalErrorFunc"]=wasmExports["_Py_FatalErrorFunc"])(a0,a1);var __Py_dup=Module["__Py_dup"]=a0=>(__Py_dup=Module["__Py_dup"]=wasmExports["_Py_dup"])(a0);var _fdopen=Module["_fdopen"]=(a0,a1)=>(_fdopen=Module["_fdopen"]=wasmExports["fdopen"])(a0,a1);var _fclose=Module["_fclose"]=a0=>(_fclose=Module["_fclose"]=wasmExports["fclose"])(a0);var _memcmp=Module["_memcmp"]=(a0,a1,a2)=>(_memcmp=Module["_memcmp"]=wasmExports["memcmp"])(a0,a1,a2);var _tolower=Module["_tolower"]=a0=>(_tolower=Module["_tolower"]=wasmExports["tolower"])(a0);var __PyUnicode_ScanIdentifier=Module["__PyUnicode_ScanIdentifier"]=a0=>(__PyUnicode_ScanIdentifier=Module["__PyUnicode_ScanIdentifier"]=wasmExports["_PyUnicode_ScanIdentifier"])(a0);var __PyUnicode_IsPrintable=Module["__PyUnicode_IsPrintable"]=a0=>(__PyUnicode_IsPrintable=Module["__PyUnicode_IsPrintable"]=wasmExports["_PyUnicode_IsPrintable"])(a0);var _isxdigit=Module["_isxdigit"]=a0=>(_isxdigit=Module["_isxdigit"]=wasmExports["isxdigit"])(a0);var _PyObject_CallNoArgs=Module["_PyObject_CallNoArgs"]=a0=>(_PyObject_CallNoArgs=Module["_PyObject_CallNoArgs"]=wasmExports["PyObject_CallNoArgs"])(a0);var _getc=Module["_getc"]=a0=>(_getc=Module["_getc"]=wasmExports["getc"])(a0);var _ungetc=Module["_ungetc"]=(a0,a1)=>(_ungetc=Module["_ungetc"]=wasmExports["ungetc"])(a0,a1);var __Py_UniversalNewlineFgetsWithSize=Module["__Py_UniversalNewlineFgetsWithSize"]=(a0,a1,a2,a3,a4)=>(__Py_UniversalNewlineFgetsWithSize=Module["__Py_UniversalNewlineFgetsWithSize"]=wasmExports["_Py_UniversalNewlineFgetsWithSize"])(a0,a1,a2,a3,a4);var _memchr=Module["_memchr"]=(a0,a1,a2)=>(_memchr=Module["_memchr"]=wasmExports["memchr"])(a0,a1,a2);var _PyObject_Malloc=Module["_PyObject_Malloc"]=a0=>(_PyObject_Malloc=Module["_PyObject_Malloc"]=wasmExports["PyObject_Malloc"])(a0);var _PyObject_Free=Module["_PyObject_Free"]=a0=>(_PyObject_Free=Module["_PyObject_Free"]=wasmExports["PyObject_Free"])(a0);var _ftell=Module["_ftell"]=a0=>(_ftell=Module["_ftell"]=wasmExports["ftell"])(a0);var _lseek=Module["_lseek"]=(a0,a1,a2)=>(_lseek=Module["_lseek"]=wasmExports["lseek"])(a0,a1,a2);var _PyErr_SetFromErrnoWithFilename=Module["_PyErr_SetFromErrnoWithFilename"]=(a0,a1)=>(_PyErr_SetFromErrnoWithFilename=Module["_PyErr_SetFromErrnoWithFilename"]=wasmExports["PyErr_SetFromErrnoWithFilename"])(a0,a1);var __PyObject_CallFunction_SizeT=Module["__PyObject_CallFunction_SizeT"]=(a0,a1,a2)=>(__PyObject_CallFunction_SizeT=Module["__PyObject_CallFunction_SizeT"]=wasmExports["_PyObject_CallFunction_SizeT"])(a0,a1,a2);var _PyObject_GetAttr=Module["_PyObject_GetAttr"]=(a0,a1)=>(_PyObject_GetAttr=Module["_PyObject_GetAttr"]=wasmExports["PyObject_GetAttr"])(a0,a1);var __PyObject_MakeTpCall=Module["__PyObject_MakeTpCall"]=(a0,a1,a2,a3,a4)=>(__PyObject_MakeTpCall=Module["__PyObject_MakeTpCall"]=wasmExports["_PyObject_MakeTpCall"])(a0,a1,a2,a3,a4);var __Py_CheckFunctionResult=Module["__Py_CheckFunctionResult"]=(a0,a1,a2,a3)=>(__Py_CheckFunctionResult=Module["__Py_CheckFunctionResult"]=wasmExports["_Py_CheckFunctionResult"])(a0,a1,a2,a3);var _strcspn=Module["_strcspn"]=(a0,a1)=>(_strcspn=Module["_strcspn"]=wasmExports["strcspn"])(a0,a1);var __Py_BuildValue_SizeT=Module["__Py_BuildValue_SizeT"]=(a0,a1)=>(__Py_BuildValue_SizeT=Module["__Py_BuildValue_SizeT"]=wasmExports["_Py_BuildValue_SizeT"])(a0,a1);var _PyObject_Type=Module["_PyObject_Type"]=a0=>(_PyObject_Type=Module["_PyObject_Type"]=wasmExports["PyObject_Type"])(a0);var __PyErr_SetString=Module["__PyErr_SetString"]=(a0,a1,a2)=>(__PyErr_SetString=Module["__PyErr_SetString"]=wasmExports["_PyErr_SetString"])(a0,a1,a2);var _PyObject_Size=Module["_PyObject_Size"]=a0=>(_PyObject_Size=Module["_PyObject_Size"]=wasmExports["PyObject_Size"])(a0);var _PyMapping_Size=Module["_PyMapping_Size"]=a0=>(_PyMapping_Size=Module["_PyMapping_Size"]=wasmExports["PyMapping_Size"])(a0);var _PyObject_Length=Module["_PyObject_Length"]=a0=>(_PyObject_Length=Module["_PyObject_Length"]=wasmExports["PyObject_Length"])(a0);var __PyObject_HasLen=Module["__PyObject_HasLen"]=a0=>(__PyObject_HasLen=Module["__PyObject_HasLen"]=wasmExports["_PyObject_HasLen"])(a0);var _PyObject_LengthHint=Module["_PyObject_LengthHint"]=(a0,a1)=>(_PyObject_LengthHint=Module["_PyObject_LengthHint"]=wasmExports["PyObject_LengthHint"])(a0,a1);var __PyErr_ExceptionMatches=Module["__PyErr_ExceptionMatches"]=(a0,a1)=>(__PyErr_ExceptionMatches=Module["__PyErr_ExceptionMatches"]=wasmExports["_PyErr_ExceptionMatches"])(a0,a1);var __PyErr_Clear=Module["__PyErr_Clear"]=a0=>(__PyErr_Clear=Module["__PyErr_Clear"]=wasmExports["_PyErr_Clear"])(a0);var __PyObject_LookupSpecial=Module["__PyObject_LookupSpecial"]=(a0,a1)=>(__PyObject_LookupSpecial=Module["__PyObject_LookupSpecial"]=wasmExports["_PyObject_LookupSpecial"])(a0,a1);var _Py_GenericAlias=Module["_Py_GenericAlias"]=(a0,a1)=>(_Py_GenericAlias=Module["_Py_GenericAlias"]=wasmExports["Py_GenericAlias"])(a0,a1);var __PyObject_LookupAttr=Module["__PyObject_LookupAttr"]=(a0,a1,a2)=>(__PyObject_LookupAttr=Module["__PyObject_LookupAttr"]=wasmExports["_PyObject_LookupAttr"])(a0,a1,a2);var __PyErr_Format=Module["__PyErr_Format"]=(a0,a1,a2,a3)=>(__PyErr_Format=Module["__PyErr_Format"]=wasmExports["_PyErr_Format"])(a0,a1,a2,a3);var _PySequence_SetItem=Module["_PySequence_SetItem"]=(a0,a1,a2)=>(_PySequence_SetItem=Module["_PySequence_SetItem"]=wasmExports["PySequence_SetItem"])(a0,a1,a2);var _PySequence_DelItem=Module["_PySequence_DelItem"]=(a0,a1)=>(_PySequence_DelItem=Module["_PySequence_DelItem"]=wasmExports["PySequence_DelItem"])(a0,a1);var _PyObject_DelItemString=Module["_PyObject_DelItemString"]=(a0,a1)=>(_PyObject_DelItemString=Module["_PyObject_DelItemString"]=wasmExports["PyObject_DelItemString"])(a0,a1);var _PyObject_CheckReadBuffer=Module["_PyObject_CheckReadBuffer"]=a0=>(_PyObject_CheckReadBuffer=Module["_PyObject_CheckReadBuffer"]=wasmExports["PyObject_CheckReadBuffer"])(a0);var _PyObject_AsCharBuffer=Module["_PyObject_AsCharBuffer"]=(a0,a1,a2)=>(_PyObject_AsCharBuffer=Module["_PyObject_AsCharBuffer"]=wasmExports["PyObject_AsCharBuffer"])(a0,a1,a2);var _PyObject_AsReadBuffer=Module["_PyObject_AsReadBuffer"]=(a0,a1,a2)=>(_PyObject_AsReadBuffer=Module["_PyObject_AsReadBuffer"]=wasmExports["PyObject_AsReadBuffer"])(a0,a1,a2);var _PyObject_AsWriteBuffer=Module["_PyObject_AsWriteBuffer"]=(a0,a1,a2)=>(_PyObject_AsWriteBuffer=Module["_PyObject_AsWriteBuffer"]=wasmExports["PyObject_AsWriteBuffer"])(a0,a1,a2);var _PyBuffer_GetPointer=Module["_PyBuffer_GetPointer"]=(a0,a1)=>(_PyBuffer_GetPointer=Module["_PyBuffer_GetPointer"]=wasmExports["PyBuffer_GetPointer"])(a0,a1);var __Py_add_one_to_index_F=Module["__Py_add_one_to_index_F"]=(a0,a1,a2)=>(__Py_add_one_to_index_F=Module["__Py_add_one_to_index_F"]=wasmExports["_Py_add_one_to_index_F"])(a0,a1,a2);var __Py_add_one_to_index_C=Module["__Py_add_one_to_index_C"]=(a0,a1,a2)=>(__Py_add_one_to_index_C=Module["__Py_add_one_to_index_C"]=wasmExports["_Py_add_one_to_index_C"])(a0,a1,a2);var _PyBuffer_SizeFromFormat=Module["_PyBuffer_SizeFromFormat"]=a0=>(_PyBuffer_SizeFromFormat=Module["_PyBuffer_SizeFromFormat"]=wasmExports["PyBuffer_SizeFromFormat"])(a0);var _PyObject_CallFunctionObjArgs=Module["_PyObject_CallFunctionObjArgs"]=(a0,a1)=>(_PyObject_CallFunctionObjArgs=Module["_PyObject_CallFunctionObjArgs"]=wasmExports["PyObject_CallFunctionObjArgs"])(a0,a1);var _PyBuffer_FromContiguous=Module["_PyBuffer_FromContiguous"]=(a0,a1,a2,a3)=>(_PyBuffer_FromContiguous=Module["_PyBuffer_FromContiguous"]=wasmExports["PyBuffer_FromContiguous"])(a0,a1,a2,a3);var _memset=Module["_memset"]=(a0,a1,a2)=>(_memset=Module["_memset"]=wasmExports["memset"])(a0,a1,a2);var _PyObject_CopyData=Module["_PyObject_CopyData"]=(a0,a1)=>(_PyObject_CopyData=Module["_PyObject_CopyData"]=wasmExports["PyObject_CopyData"])(a0,a1);var _PyBuffer_FillInfo=Module["_PyBuffer_FillInfo"]=(a0,a1,a2,a3,a4,a5)=>(_PyBuffer_FillInfo=Module["_PyBuffer_FillInfo"]=wasmExports["PyBuffer_FillInfo"])(a0,a1,a2,a3,a4,a5);var _PyObject_Format=Module["_PyObject_Format"]=(a0,a1)=>(_PyObject_Format=Module["_PyObject_Format"]=wasmExports["PyObject_Format"])(a0,a1);var _PyUnicode_New=Module["_PyUnicode_New"]=(a0,a1)=>(_PyUnicode_New=Module["_PyUnicode_New"]=wasmExports["PyUnicode_New"])(a0,a1);var _PyNumber_Check=Module["_PyNumber_Check"]=a0=>(_PyNumber_Check=Module["_PyNumber_Check"]=wasmExports["PyNumber_Check"])(a0);var _PyNumber_Or=Module["_PyNumber_Or"]=(a0,a1)=>(_PyNumber_Or=Module["_PyNumber_Or"]=wasmExports["PyNumber_Or"])(a0,a1);var _PyNumber_Xor=Module["_PyNumber_Xor"]=(a0,a1)=>(_PyNumber_Xor=Module["_PyNumber_Xor"]=wasmExports["PyNumber_Xor"])(a0,a1);var _PyNumber_And=Module["_PyNumber_And"]=(a0,a1)=>(_PyNumber_And=Module["_PyNumber_And"]=wasmExports["PyNumber_And"])(a0,a1);var _PyNumber_Lshift=Module["_PyNumber_Lshift"]=(a0,a1)=>(_PyNumber_Lshift=Module["_PyNumber_Lshift"]=wasmExports["PyNumber_Lshift"])(a0,a1);var _PyNumber_Rshift=Module["_PyNumber_Rshift"]=(a0,a1)=>(_PyNumber_Rshift=Module["_PyNumber_Rshift"]=wasmExports["PyNumber_Rshift"])(a0,a1);var _PyNumber_Subtract=Module["_PyNumber_Subtract"]=(a0,a1)=>(_PyNumber_Subtract=Module["_PyNumber_Subtract"]=wasmExports["PyNumber_Subtract"])(a0,a1);var _PyNumber_Divmod=Module["_PyNumber_Divmod"]=(a0,a1)=>(_PyNumber_Divmod=Module["_PyNumber_Divmod"]=wasmExports["PyNumber_Divmod"])(a0,a1);var _PyNumber_Add=Module["_PyNumber_Add"]=(a0,a1)=>(_PyNumber_Add=Module["_PyNumber_Add"]=wasmExports["PyNumber_Add"])(a0,a1);var _PyNumber_Multiply=Module["_PyNumber_Multiply"]=(a0,a1)=>(_PyNumber_Multiply=Module["_PyNumber_Multiply"]=wasmExports["PyNumber_Multiply"])(a0,a1);var _PyNumber_MatrixMultiply=Module["_PyNumber_MatrixMultiply"]=(a0,a1)=>(_PyNumber_MatrixMultiply=Module["_PyNumber_MatrixMultiply"]=wasmExports["PyNumber_MatrixMultiply"])(a0,a1);var _PyNumber_FloorDivide=Module["_PyNumber_FloorDivide"]=(a0,a1)=>(_PyNumber_FloorDivide=Module["_PyNumber_FloorDivide"]=wasmExports["PyNumber_FloorDivide"])(a0,a1);var _PyNumber_TrueDivide=Module["_PyNumber_TrueDivide"]=(a0,a1)=>(_PyNumber_TrueDivide=Module["_PyNumber_TrueDivide"]=wasmExports["PyNumber_TrueDivide"])(a0,a1);var _PyNumber_Remainder=Module["_PyNumber_Remainder"]=(a0,a1)=>(_PyNumber_Remainder=Module["_PyNumber_Remainder"]=wasmExports["PyNumber_Remainder"])(a0,a1);var _PyNumber_Power=Module["_PyNumber_Power"]=(a0,a1,a2)=>(_PyNumber_Power=Module["_PyNumber_Power"]=wasmExports["PyNumber_Power"])(a0,a1,a2);var _PyNumber_InPlaceOr=Module["_PyNumber_InPlaceOr"]=(a0,a1)=>(_PyNumber_InPlaceOr=Module["_PyNumber_InPlaceOr"]=wasmExports["PyNumber_InPlaceOr"])(a0,a1);var _PyNumber_InPlaceXor=Module["_PyNumber_InPlaceXor"]=(a0,a1)=>(_PyNumber_InPlaceXor=Module["_PyNumber_InPlaceXor"]=wasmExports["PyNumber_InPlaceXor"])(a0,a1);var _PyNumber_InPlaceAnd=Module["_PyNumber_InPlaceAnd"]=(a0,a1)=>(_PyNumber_InPlaceAnd=Module["_PyNumber_InPlaceAnd"]=wasmExports["PyNumber_InPlaceAnd"])(a0,a1);var _PyNumber_InPlaceLshift=Module["_PyNumber_InPlaceLshift"]=(a0,a1)=>(_PyNumber_InPlaceLshift=Module["_PyNumber_InPlaceLshift"]=wasmExports["PyNumber_InPlaceLshift"])(a0,a1);var _PyNumber_InPlaceRshift=Module["_PyNumber_InPlaceRshift"]=(a0,a1)=>(_PyNumber_InPlaceRshift=Module["_PyNumber_InPlaceRshift"]=wasmExports["PyNumber_InPlaceRshift"])(a0,a1);var _PyNumber_InPlaceSubtract=Module["_PyNumber_InPlaceSubtract"]=(a0,a1)=>(_PyNumber_InPlaceSubtract=Module["_PyNumber_InPlaceSubtract"]=wasmExports["PyNumber_InPlaceSubtract"])(a0,a1);var _PyNumber_InPlaceMatrixMultiply=Module["_PyNumber_InPlaceMatrixMultiply"]=(a0,a1)=>(_PyNumber_InPlaceMatrixMultiply=Module["_PyNumber_InPlaceMatrixMultiply"]=wasmExports["PyNumber_InPlaceMatrixMultiply"])(a0,a1);var _PyNumber_InPlaceFloorDivide=Module["_PyNumber_InPlaceFloorDivide"]=(a0,a1)=>(_PyNumber_InPlaceFloorDivide=Module["_PyNumber_InPlaceFloorDivide"]=wasmExports["PyNumber_InPlaceFloorDivide"])(a0,a1);var _PyNumber_InPlaceTrueDivide=Module["_PyNumber_InPlaceTrueDivide"]=(a0,a1)=>(_PyNumber_InPlaceTrueDivide=Module["_PyNumber_InPlaceTrueDivide"]=wasmExports["PyNumber_InPlaceTrueDivide"])(a0,a1);var _PyNumber_InPlaceRemainder=Module["_PyNumber_InPlaceRemainder"]=(a0,a1)=>(_PyNumber_InPlaceRemainder=Module["_PyNumber_InPlaceRemainder"]=wasmExports["PyNumber_InPlaceRemainder"])(a0,a1);var _PyNumber_InPlaceAdd=Module["_PyNumber_InPlaceAdd"]=(a0,a1)=>(_PyNumber_InPlaceAdd=Module["_PyNumber_InPlaceAdd"]=wasmExports["PyNumber_InPlaceAdd"])(a0,a1);var _PyNumber_InPlaceMultiply=Module["_PyNumber_InPlaceMultiply"]=(a0,a1)=>(_PyNumber_InPlaceMultiply=Module["_PyNumber_InPlaceMultiply"]=wasmExports["PyNumber_InPlaceMultiply"])(a0,a1);var _PyNumber_InPlacePower=Module["_PyNumber_InPlacePower"]=(a0,a1,a2)=>(_PyNumber_InPlacePower=Module["_PyNumber_InPlacePower"]=wasmExports["PyNumber_InPlacePower"])(a0,a1,a2);var _PyNumber_Negative=Module["_PyNumber_Negative"]=a0=>(_PyNumber_Negative=Module["_PyNumber_Negative"]=wasmExports["PyNumber_Negative"])(a0);var _PyNumber_Positive=Module["_PyNumber_Positive"]=a0=>(_PyNumber_Positive=Module["_PyNumber_Positive"]=wasmExports["PyNumber_Positive"])(a0);var _PyNumber_Invert=Module["_PyNumber_Invert"]=a0=>(_PyNumber_Invert=Module["_PyNumber_Invert"]=wasmExports["PyNumber_Invert"])(a0);var _PyNumber_Absolute=Module["_PyNumber_Absolute"]=a0=>(_PyNumber_Absolute=Module["_PyNumber_Absolute"]=wasmExports["PyNumber_Absolute"])(a0);var _PyErr_WarnFormat=Module["_PyErr_WarnFormat"]=(a0,a1,a2,a3)=>(_PyErr_WarnFormat=Module["_PyErr_WarnFormat"]=wasmExports["PyErr_WarnFormat"])(a0,a1,a2,a3);var _PyNumber_Index=Module["_PyNumber_Index"]=a0=>(_PyNumber_Index=Module["_PyNumber_Index"]=wasmExports["PyNumber_Index"])(a0);var __PyLong_Copy=Module["__PyLong_Copy"]=a0=>(__PyLong_Copy=Module["__PyLong_Copy"]=wasmExports["_PyLong_Copy"])(a0);var _PyNumber_Long=Module["_PyNumber_Long"]=a0=>(_PyNumber_Long=Module["_PyNumber_Long"]=wasmExports["PyNumber_Long"])(a0);var _PyErr_WarnEx=Module["_PyErr_WarnEx"]=(a0,a1,a2)=>(_PyErr_WarnEx=Module["_PyErr_WarnEx"]=wasmExports["PyErr_WarnEx"])(a0,a1,a2);var _PyLong_FromUnicodeObject=Module["_PyLong_FromUnicodeObject"]=(a0,a1)=>(_PyLong_FromUnicodeObject=Module["_PyLong_FromUnicodeObject"]=wasmExports["PyLong_FromUnicodeObject"])(a0,a1);var __PyLong_FromBytes=Module["__PyLong_FromBytes"]=(a0,a1,a2)=>(__PyLong_FromBytes=Module["__PyLong_FromBytes"]=wasmExports["_PyLong_FromBytes"])(a0,a1,a2);var _PyNumber_Float=Module["_PyNumber_Float"]=a0=>(_PyNumber_Float=Module["_PyNumber_Float"]=wasmExports["PyNumber_Float"])(a0);var _PyLong_AsDouble=Module["_PyLong_AsDouble"]=a0=>(_PyLong_AsDouble=Module["_PyLong_AsDouble"]=wasmExports["PyLong_AsDouble"])(a0);var _PyFloat_FromString=Module["_PyFloat_FromString"]=a0=>(_PyFloat_FromString=Module["_PyFloat_FromString"]=wasmExports["PyFloat_FromString"])(a0);var _PyNumber_ToBase=Module["_PyNumber_ToBase"]=(a0,a1)=>(_PyNumber_ToBase=Module["_PyNumber_ToBase"]=wasmExports["PyNumber_ToBase"])(a0,a1);var __PyLong_Format=Module["__PyLong_Format"]=(a0,a1)=>(__PyLong_Format=Module["__PyLong_Format"]=wasmExports["_PyLong_Format"])(a0,a1);var _PySequence_Check=Module["_PySequence_Check"]=a0=>(_PySequence_Check=Module["_PySequence_Check"]=wasmExports["PySequence_Check"])(a0);var _PySequence_Length=Module["_PySequence_Length"]=a0=>(_PySequence_Length=Module["_PySequence_Length"]=wasmExports["PySequence_Length"])(a0);var _PySequence_Concat=Module["_PySequence_Concat"]=(a0,a1)=>(_PySequence_Concat=Module["_PySequence_Concat"]=wasmExports["PySequence_Concat"])(a0,a1);var _PySequence_Repeat=Module["_PySequence_Repeat"]=(a0,a1)=>(_PySequence_Repeat=Module["_PySequence_Repeat"]=wasmExports["PySequence_Repeat"])(a0,a1);var _PySequence_InPlaceConcat=Module["_PySequence_InPlaceConcat"]=(a0,a1)=>(_PySequence_InPlaceConcat=Module["_PySequence_InPlaceConcat"]=wasmExports["PySequence_InPlaceConcat"])(a0,a1);var _PySequence_InPlaceRepeat=Module["_PySequence_InPlaceRepeat"]=(a0,a1)=>(_PySequence_InPlaceRepeat=Module["_PySequence_InPlaceRepeat"]=wasmExports["PySequence_InPlaceRepeat"])(a0,a1);var __PySlice_FromIndices=Module["__PySlice_FromIndices"]=(a0,a1)=>(__PySlice_FromIndices=Module["__PySlice_FromIndices"]=wasmExports["_PySlice_FromIndices"])(a0,a1);var _PySequence_DelSlice=Module["_PySequence_DelSlice"]=(a0,a1,a2)=>(_PySequence_DelSlice=Module["_PySequence_DelSlice"]=wasmExports["PySequence_DelSlice"])(a0,a1,a2);var _PySequence_Tuple=Module["_PySequence_Tuple"]=a0=>(_PySequence_Tuple=Module["_PySequence_Tuple"]=wasmExports["PySequence_Tuple"])(a0);var _PyList_AsTuple=Module["_PyList_AsTuple"]=a0=>(_PyList_AsTuple=Module["_PyList_AsTuple"]=wasmExports["PyList_AsTuple"])(a0);var __PyTuple_Resize=Module["__PyTuple_Resize"]=(a0,a1)=>(__PyTuple_Resize=Module["__PyTuple_Resize"]=wasmExports["_PyTuple_Resize"])(a0,a1);var _PySeqIter_New=Module["_PySeqIter_New"]=a0=>(_PySeqIter_New=Module["_PySeqIter_New"]=wasmExports["PySeqIter_New"])(a0);var _PySequence_List=Module["_PySequence_List"]=a0=>(_PySequence_List=Module["_PySequence_List"]=wasmExports["PySequence_List"])(a0);var __PySequence_IterSearch=Module["__PySequence_IterSearch"]=(a0,a1,a2)=>(__PySequence_IterSearch=Module["__PySequence_IterSearch"]=wasmExports["_PySequence_IterSearch"])(a0,a1,a2);var _PySequence_Count=Module["_PySequence_Count"]=(a0,a1)=>(_PySequence_Count=Module["_PySequence_Count"]=wasmExports["PySequence_Count"])(a0,a1);var _PySequence_In=Module["_PySequence_In"]=(a0,a1)=>(_PySequence_In=Module["_PySequence_In"]=wasmExports["PySequence_In"])(a0,a1);var _PySequence_Index=Module["_PySequence_Index"]=(a0,a1)=>(_PySequence_Index=Module["_PySequence_Index"]=wasmExports["PySequence_Index"])(a0,a1);var _PyMapping_Check=Module["_PyMapping_Check"]=a0=>(_PyMapping_Check=Module["_PyMapping_Check"]=wasmExports["PyMapping_Check"])(a0);var _PyMapping_Length=Module["_PyMapping_Length"]=a0=>(_PyMapping_Length=Module["_PyMapping_Length"]=wasmExports["PyMapping_Length"])(a0);var _PyMapping_GetItemString=Module["_PyMapping_GetItemString"]=(a0,a1)=>(_PyMapping_GetItemString=Module["_PyMapping_GetItemString"]=wasmExports["PyMapping_GetItemString"])(a0,a1);var _PyMapping_SetItemString=Module["_PyMapping_SetItemString"]=(a0,a1,a2)=>(_PyMapping_SetItemString=Module["_PyMapping_SetItemString"]=wasmExports["PyMapping_SetItemString"])(a0,a1,a2);var _PyMapping_HasKeyString=Module["_PyMapping_HasKeyString"]=(a0,a1)=>(_PyMapping_HasKeyString=Module["_PyMapping_HasKeyString"]=wasmExports["PyMapping_HasKeyString"])(a0,a1);var _PyMapping_HasKey=Module["_PyMapping_HasKey"]=(a0,a1)=>(_PyMapping_HasKey=Module["_PyMapping_HasKey"]=wasmExports["PyMapping_HasKey"])(a0,a1);var _PyMapping_Keys=Module["_PyMapping_Keys"]=a0=>(_PyMapping_Keys=Module["_PyMapping_Keys"]=wasmExports["PyMapping_Keys"])(a0);var _PyDict_Keys=Module["_PyDict_Keys"]=a0=>(_PyDict_Keys=Module["_PyDict_Keys"]=wasmExports["PyDict_Keys"])(a0);var _PyMapping_Items=Module["_PyMapping_Items"]=a0=>(_PyMapping_Items=Module["_PyMapping_Items"]=wasmExports["PyMapping_Items"])(a0);var _PyDict_Items=Module["_PyDict_Items"]=a0=>(_PyDict_Items=Module["_PyDict_Items"]=wasmExports["PyDict_Items"])(a0);var _PyMapping_Values=Module["_PyMapping_Values"]=a0=>(_PyMapping_Values=Module["_PyMapping_Values"]=wasmExports["PyMapping_Values"])(a0);var _PyDict_Values=Module["_PyDict_Values"]=a0=>(_PyDict_Values=Module["_PyDict_Values"]=wasmExports["PyDict_Values"])(a0);var __Py_CheckRecursiveCall=Module["__Py_CheckRecursiveCall"]=(a0,a1)=>(__Py_CheckRecursiveCall=Module["__Py_CheckRecursiveCall"]=wasmExports["_Py_CheckRecursiveCall"])(a0,a1);var _PyObject_IsTrue=Module["_PyObject_IsTrue"]=a0=>(_PyObject_IsTrue=Module["_PyObject_IsTrue"]=wasmExports["PyObject_IsTrue"])(a0);var __PyObject_RealIsInstance=Module["__PyObject_RealIsInstance"]=(a0,a1)=>(__PyObject_RealIsInstance=Module["__PyObject_RealIsInstance"]=wasmExports["_PyObject_RealIsInstance"])(a0,a1);var __PyObject_RealIsSubclass=Module["__PyObject_RealIsSubclass"]=(a0,a1)=>(__PyObject_RealIsSubclass=Module["__PyObject_RealIsSubclass"]=wasmExports["_PyObject_RealIsSubclass"])(a0,a1);var _PyIter_Check=Module["_PyIter_Check"]=a0=>(_PyIter_Check=Module["_PyIter_Check"]=wasmExports["PyIter_Check"])(a0);var _PyObject_GetAIter=Module["_PyObject_GetAIter"]=a0=>(_PyObject_GetAIter=Module["_PyObject_GetAIter"]=wasmExports["PyObject_GetAIter"])(a0);var _PyAIter_Check=Module["_PyAIter_Check"]=a0=>(_PyAIter_Check=Module["_PyAIter_Check"]=wasmExports["PyAIter_Check"])(a0);var __PySequence_BytesToCharpArray=Module["__PySequence_BytesToCharpArray"]=a0=>(__PySequence_BytesToCharpArray=Module["__PySequence_BytesToCharpArray"]=wasmExports["_PySequence_BytesToCharpArray"])(a0);var __Py_FreeCharPArray=Module["__Py_FreeCharPArray"]=a0=>(__Py_FreeCharPArray=Module["__Py_FreeCharPArray"]=wasmExports["_Py_FreeCharPArray"])(a0);var _PyBool_FromLong=Module["_PyBool_FromLong"]=a0=>(_PyBool_FromLong=Module["_PyBool_FromLong"]=wasmExports["PyBool_FromLong"])(a0);var __PyArg_NoKeywords=Module["__PyArg_NoKeywords"]=(a0,a1)=>(__PyArg_NoKeywords=Module["__PyArg_NoKeywords"]=wasmExports["_PyArg_NoKeywords"])(a0,a1);var __PyArg_NoKwnames=Module["__PyArg_NoKwnames"]=(a0,a1)=>(__PyArg_NoKwnames=Module["__PyArg_NoKwnames"]=wasmExports["_PyArg_NoKwnames"])(a0,a1);var _memrchr=Module["_memrchr"]=(a0,a1,a2)=>(_memrchr=Module["_memrchr"]=wasmExports["memrchr"])(a0,a1,a2);var __PyEval_SliceIndex=Module["__PyEval_SliceIndex"]=(a0,a1)=>(__PyEval_SliceIndex=Module["__PyEval_SliceIndex"]=wasmExports["_PyEval_SliceIndex"])(a0,a1);var _PyByteArray_FromObject=Module["_PyByteArray_FromObject"]=a0=>(_PyByteArray_FromObject=Module["_PyByteArray_FromObject"]=wasmExports["PyByteArray_FromObject"])(a0);var _PyByteArray_FromStringAndSize=Module["_PyByteArray_FromStringAndSize"]=(a0,a1)=>(_PyByteArray_FromStringAndSize=Module["_PyByteArray_FromStringAndSize"]=wasmExports["PyByteArray_FromStringAndSize"])(a0,a1);var __PyObject_New=Module["__PyObject_New"]=a0=>(__PyObject_New=Module["__PyObject_New"]=wasmExports["_PyObject_New"])(a0);var _PyByteArray_Size=Module["_PyByteArray_Size"]=a0=>(_PyByteArray_Size=Module["_PyByteArray_Size"]=wasmExports["PyByteArray_Size"])(a0);var _PyByteArray_AsString=Module["_PyByteArray_AsString"]=a0=>(_PyByteArray_AsString=Module["_PyByteArray_AsString"]=wasmExports["PyByteArray_AsString"])(a0);var _PyByteArray_Resize=Module["_PyByteArray_Resize"]=(a0,a1)=>(_PyByteArray_Resize=Module["_PyByteArray_Resize"]=wasmExports["PyByteArray_Resize"])(a0,a1);var _PyObject_Realloc=Module["_PyObject_Realloc"]=(a0,a1)=>(_PyObject_Realloc=Module["_PyObject_Realloc"]=wasmExports["PyObject_Realloc"])(a0,a1);var _PyByteArray_Concat=Module["_PyByteArray_Concat"]=(a0,a1)=>(_PyByteArray_Concat=Module["_PyByteArray_Concat"]=wasmExports["PyByteArray_Concat"])(a0,a1);var __Py_GetConfig=Module["__Py_GetConfig"]=()=>(__Py_GetConfig=Module["__Py_GetConfig"]=wasmExports["_Py_GetConfig"])();var __PyObject_GC_New=Module["__PyObject_GC_New"]=a0=>(__PyObject_GC_New=Module["__PyObject_GC_New"]=wasmExports["_PyObject_GC_New"])(a0);var __PyArg_UnpackKeywords=Module["__PyArg_UnpackKeywords"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8)=>(__PyArg_UnpackKeywords=Module["__PyArg_UnpackKeywords"]=wasmExports["_PyArg_UnpackKeywords"])(a0,a1,a2,a3,a4,a5,a6,a7,a8);var __PyArg_BadArgument=Module["__PyArg_BadArgument"]=(a0,a1,a2,a3)=>(__PyArg_BadArgument=Module["__PyArg_BadArgument"]=wasmExports["_PyArg_BadArgument"])(a0,a1,a2,a3);var _PyUnicode_AsEncodedString=Module["_PyUnicode_AsEncodedString"]=(a0,a1,a2)=>(_PyUnicode_AsEncodedString=Module["_PyUnicode_AsEncodedString"]=wasmExports["PyUnicode_AsEncodedString"])(a0,a1,a2);var _PyBuffer_ToContiguous=Module["_PyBuffer_ToContiguous"]=(a0,a1,a2,a3)=>(_PyBuffer_ToContiguous=Module["_PyBuffer_ToContiguous"]=wasmExports["PyBuffer_ToContiguous"])(a0,a1,a2,a3);var _PyObject_GC_Del=Module["_PyObject_GC_Del"]=a0=>(_PyObject_GC_Del=Module["_PyObject_GC_Del"]=wasmExports["PyObject_GC_Del"])(a0);var __PyBytes_FormatEx=Module["__PyBytes_FormatEx"]=(a0,a1,a2,a3)=>(__PyBytes_FormatEx=Module["__PyBytes_FormatEx"]=wasmExports["_PyBytes_FormatEx"])(a0,a1,a2,a3);var __PyBytes_Repeat=Module["__PyBytes_Repeat"]=(a0,a1,a2,a3)=>(__PyBytes_Repeat=Module["__PyBytes_Repeat"]=wasmExports["_PyBytes_Repeat"])(a0,a1,a2,a3);var _memmove=Module["_memmove"]=(a0,a1,a2)=>(_memmove=Module["_memmove"]=wasmExports["memmove"])(a0,a1,a2);var __PyObject_GetState=Module["__PyObject_GetState"]=a0=>(__PyObject_GetState=Module["__PyObject_GetState"]=wasmExports["_PyObject_GetState"])(a0);var _PyUnicode_DecodeLatin1=Module["_PyUnicode_DecodeLatin1"]=(a0,a1,a2)=>(_PyUnicode_DecodeLatin1=Module["_PyUnicode_DecodeLatin1"]=wasmExports["PyUnicode_DecodeLatin1"])(a0,a1,a2);var __PyLong_AsInt=Module["__PyLong_AsInt"]=a0=>(__PyLong_AsInt=Module["__PyLong_AsInt"]=wasmExports["_PyLong_AsInt"])(a0);var _PyLong_FromSize_t=Module["_PyLong_FromSize_t"]=a0=>(_PyLong_FromSize_t=Module["_PyLong_FromSize_t"]=wasmExports["PyLong_FromSize_t"])(a0);var _PyUnicode_GetDefaultEncoding=Module["_PyUnicode_GetDefaultEncoding"]=()=>(_PyUnicode_GetDefaultEncoding=Module["_PyUnicode_GetDefaultEncoding"]=wasmExports["PyUnicode_GetDefaultEncoding"])();var _PyUnicode_FromEncodedObject=Module["_PyUnicode_FromEncodedObject"]=(a0,a1,a2)=>(_PyUnicode_FromEncodedObject=Module["_PyUnicode_FromEncodedObject"]=wasmExports["PyUnicode_FromEncodedObject"])(a0,a1,a2);var __PyBytes_FromHex=Module["__PyBytes_FromHex"]=(a0,a1)=>(__PyBytes_FromHex=Module["__PyBytes_FromHex"]=wasmExports["_PyBytes_FromHex"])(a0,a1);var __Py_strhex_with_sep=Module["__Py_strhex_with_sep"]=(a0,a1,a2,a3)=>(__Py_strhex_with_sep=Module["__Py_strhex_with_sep"]=wasmExports["_Py_strhex_with_sep"])(a0,a1,a2,a3);var _PyList_Append=Module["_PyList_Append"]=(a0,a1)=>(_PyList_Append=Module["_PyList_Append"]=wasmExports["PyList_Append"])(a0,a1);var _PyList_Reverse=Module["_PyList_Reverse"]=a0=>(_PyList_Reverse=Module["_PyList_Reverse"]=wasmExports["PyList_Reverse"])(a0);var __PyEval_GetBuiltin=Module["__PyEval_GetBuiltin"]=a0=>(__PyEval_GetBuiltin=Module["__PyEval_GetBuiltin"]=wasmExports["_PyEval_GetBuiltin"])(a0);var _PyType_GenericAlloc=Module["_PyType_GenericAlloc"]=(a0,a1)=>(_PyType_GenericAlloc=Module["_PyType_GenericAlloc"]=wasmExports["PyType_GenericAlloc"])(a0,a1);var _PyObject_Calloc=Module["_PyObject_Calloc"]=(a0,a1)=>(_PyObject_Calloc=Module["_PyObject_Calloc"]=wasmExports["PyObject_Calloc"])(a0,a1);var __Py_NewReference=Module["__Py_NewReference"]=a0=>(__Py_NewReference=Module["__Py_NewReference"]=wasmExports["_Py_NewReference"])(a0);var _PyBytes_FromFormatV=Module["_PyBytes_FromFormatV"]=(a0,a1)=>(_PyBytes_FromFormatV=Module["_PyBytes_FromFormatV"]=wasmExports["PyBytes_FromFormatV"])(a0,a1);var __PyBytesWriter_Resize=Module["__PyBytesWriter_Resize"]=(a0,a1,a2)=>(__PyBytesWriter_Resize=Module["__PyBytesWriter_Resize"]=wasmExports["_PyBytesWriter_Resize"])(a0,a1,a2);var __PyBytesWriter_Finish=Module["__PyBytesWriter_Finish"]=(a0,a1)=>(__PyBytesWriter_Finish=Module["__PyBytesWriter_Finish"]=wasmExports["_PyBytesWriter_Finish"])(a0,a1);var __PyBytesWriter_Init=Module["__PyBytesWriter_Init"]=a0=>(__PyBytesWriter_Init=Module["__PyBytesWriter_Init"]=wasmExports["_PyBytesWriter_Init"])(a0);var __PyBytesWriter_Alloc=Module["__PyBytesWriter_Alloc"]=(a0,a1)=>(__PyBytesWriter_Alloc=Module["__PyBytesWriter_Alloc"]=wasmExports["_PyBytesWriter_Alloc"])(a0,a1);var __PyBytesWriter_WriteBytes=Module["__PyBytesWriter_WriteBytes"]=(a0,a1,a2,a3)=>(__PyBytesWriter_WriteBytes=Module["__PyBytesWriter_WriteBytes"]=wasmExports["_PyBytesWriter_WriteBytes"])(a0,a1,a2,a3);var __PyBytes_Resize=Module["__PyBytes_Resize"]=(a0,a1)=>(__PyBytes_Resize=Module["__PyBytes_Resize"]=wasmExports["_PyBytes_Resize"])(a0,a1);var __PyBytesWriter_Dealloc=Module["__PyBytesWriter_Dealloc"]=a0=>(__PyBytesWriter_Dealloc=Module["__PyBytesWriter_Dealloc"]=wasmExports["_PyBytesWriter_Dealloc"])(a0);var _PyBytes_FromFormat=Module["_PyBytes_FromFormat"]=(a0,a1)=>(_PyBytes_FromFormat=Module["_PyBytes_FromFormat"]=wasmExports["PyBytes_FromFormat"])(a0,a1);var _PyObject_ASCII=Module["_PyObject_ASCII"]=a0=>(_PyObject_ASCII=Module["_PyObject_ASCII"]=wasmExports["PyObject_ASCII"])(a0);var __PyLong_FormatBytesWriter=Module["__PyLong_FormatBytesWriter"]=(a0,a1,a2,a3,a4)=>(__PyLong_FormatBytesWriter=Module["__PyLong_FormatBytesWriter"]=wasmExports["_PyLong_FormatBytesWriter"])(a0,a1,a2,a3,a4);var __PyUnicode_FormatLong=Module["__PyUnicode_FormatLong"]=(a0,a1,a2,a3)=>(__PyUnicode_FormatLong=Module["__PyUnicode_FormatLong"]=wasmExports["_PyUnicode_FormatLong"])(a0,a1,a2,a3);var _PyOS_double_to_string=Module["_PyOS_double_to_string"]=(a0,a1,a2,a3,a4)=>(_PyOS_double_to_string=Module["_PyOS_double_to_string"]=wasmExports["PyOS_double_to_string"])(a0,a1,a2,a3,a4);var __PyBytesWriter_Prepare=Module["__PyBytesWriter_Prepare"]=(a0,a1,a2)=>(__PyBytesWriter_Prepare=Module["__PyBytesWriter_Prepare"]=wasmExports["_PyBytesWriter_Prepare"])(a0,a1,a2);var _PyBytes_DecodeEscape=Module["_PyBytes_DecodeEscape"]=(a0,a1,a2,a3,a4)=>(_PyBytes_DecodeEscape=Module["_PyBytes_DecodeEscape"]=wasmExports["PyBytes_DecodeEscape"])(a0,a1,a2,a3,a4);var _PyBytes_Size=Module["_PyBytes_Size"]=a0=>(_PyBytes_Size=Module["_PyBytes_Size"]=wasmExports["PyBytes_Size"])(a0);var __PyBytes_Find=Module["__PyBytes_Find"]=(a0,a1,a2,a3,a4)=>(__PyBytes_Find=Module["__PyBytes_Find"]=wasmExports["_PyBytes_Find"])(a0,a1,a2,a3,a4);var __PyBytes_ReverseFind=Module["__PyBytes_ReverseFind"]=(a0,a1,a2,a3,a4)=>(__PyBytes_ReverseFind=Module["__PyBytes_ReverseFind"]=wasmExports["_PyBytes_ReverseFind"])(a0,a1,a2,a3,a4);var _PyBytes_Repr=Module["_PyBytes_Repr"]=(a0,a1)=>(_PyBytes_Repr=Module["_PyBytes_Repr"]=wasmExports["PyBytes_Repr"])(a0,a1);var __PyBytes_Join=Module["__PyBytes_Join"]=(a0,a1)=>(__PyBytes_Join=Module["__PyBytes_Join"]=wasmExports["_PyBytes_Join"])(a0,a1);var _PyBytes_FromObject=Module["_PyBytes_FromObject"]=a0=>(_PyBytes_FromObject=Module["_PyBytes_FromObject"]=wasmExports["PyBytes_FromObject"])(a0);var _PyErr_BadArgument=Module["_PyErr_BadArgument"]=()=>(_PyErr_BadArgument=Module["_PyErr_BadArgument"]=wasmExports["PyErr_BadArgument"])();var __Py_NewReferenceNoTotal=Module["__Py_NewReferenceNoTotal"]=a0=>(__Py_NewReferenceNoTotal=Module["__Py_NewReferenceNoTotal"]=wasmExports["_Py_NewReferenceNoTotal"])(a0);var _PyBytes_ConcatAndDel=Module["_PyBytes_ConcatAndDel"]=(a0,a1)=>(_PyBytes_ConcatAndDel=Module["_PyBytes_ConcatAndDel"]=wasmExports["PyBytes_ConcatAndDel"])(a0,a1);var __PyErr_FormatFromCauseTstate=Module["__PyErr_FormatFromCauseTstate"]=(a0,a1,a2,a3)=>(__PyErr_FormatFromCauseTstate=Module["__PyErr_FormatFromCauseTstate"]=wasmExports["_PyErr_FormatFromCauseTstate"])(a0,a1,a2,a3);var __Py_FatalErrorFormat=Module["__Py_FatalErrorFormat"]=(a0,a1,a2)=>(__Py_FatalErrorFormat=Module["__Py_FatalErrorFormat"]=wasmExports["_Py_FatalErrorFormat"])(a0,a1,a2);var __PyObject_FastCallDictTstate=Module["__PyObject_FastCallDictTstate"]=(a0,a1,a2,a3,a4)=>(__PyObject_FastCallDictTstate=Module["__PyObject_FastCallDictTstate"]=wasmExports["_PyObject_FastCallDictTstate"])(a0,a1,a2,a3,a4);var _PyVectorcall_Function=Module["_PyVectorcall_Function"]=a0=>(_PyVectorcall_Function=Module["_PyVectorcall_Function"]=wasmExports["PyVectorcall_Function"])(a0);var __PyErr_NoMemory=Module["__PyErr_NoMemory"]=a0=>(__PyErr_NoMemory=Module["__PyErr_NoMemory"]=wasmExports["_PyErr_NoMemory"])(a0);var _PyDict_Next=Module["_PyDict_Next"]=(a0,a1,a2,a3)=>(_PyDict_Next=Module["_PyDict_Next"]=wasmExports["PyDict_Next"])(a0,a1,a2,a3);var _PyObject_VectorcallDict=Module["_PyObject_VectorcallDict"]=(a0,a1,a2,a3)=>(_PyObject_VectorcallDict=Module["_PyObject_VectorcallDict"]=wasmExports["PyObject_VectorcallDict"])(a0,a1,a2,a3);var _PyModule_GetNameObject=Module["_PyModule_GetNameObject"]=a0=>(_PyModule_GetNameObject=Module["_PyModule_GetNameObject"]=wasmExports["PyModule_GetNameObject"])(a0);var _PyCallable_Check=Module["_PyCallable_Check"]=a0=>(_PyCallable_Check=Module["_PyCallable_Check"]=wasmExports["PyCallable_Check"])(a0);var __PyStack_AsDict=Module["__PyStack_AsDict"]=(a0,a1)=>(__PyStack_AsDict=Module["__PyStack_AsDict"]=wasmExports["_PyStack_AsDict"])(a0,a1);var __PyObject_Call=Module["__PyObject_Call"]=(a0,a1,a2,a3)=>(__PyObject_Call=Module["__PyObject_Call"]=wasmExports["_PyObject_Call"])(a0,a1,a2,a3);var _PyObject_Call=Module["_PyObject_Call"]=(a0,a1,a2)=>(_PyObject_Call=Module["_PyObject_Call"]=wasmExports["PyObject_Call"])(a0,a1,a2);var _PyCFunction_Call=Module["_PyCFunction_Call"]=(a0,a1,a2)=>(_PyCFunction_Call=Module["_PyCFunction_Call"]=wasmExports["PyCFunction_Call"])(a0,a1,a2);var __PyFunction_Vectorcall=Module["__PyFunction_Vectorcall"]=(a0,a1,a2,a3)=>(__PyFunction_Vectorcall=Module["__PyFunction_Vectorcall"]=wasmExports["_PyFunction_Vectorcall"])(a0,a1,a2,a3);var _PyEval_CallObjectWithKeywords=Module["_PyEval_CallObjectWithKeywords"]=(a0,a1,a2)=>(_PyEval_CallObjectWithKeywords=Module["_PyEval_CallObjectWithKeywords"]=wasmExports["PyEval_CallObjectWithKeywords"])(a0,a1,a2);var _PyObject_CallObject=Module["_PyObject_CallObject"]=(a0,a1)=>(_PyObject_CallObject=Module["_PyObject_CallObject"]=wasmExports["PyObject_CallObject"])(a0,a1);var __PyObject_Call_Prepend=Module["__PyObject_Call_Prepend"]=(a0,a1,a2,a3,a4)=>(__PyObject_Call_Prepend=Module["__PyObject_Call_Prepend"]=wasmExports["_PyObject_Call_Prepend"])(a0,a1,a2,a3,a4);var _PyObject_CallFunction=Module["_PyObject_CallFunction"]=(a0,a1,a2)=>(_PyObject_CallFunction=Module["_PyObject_CallFunction"]=wasmExports["PyObject_CallFunction"])(a0,a1,a2);var __Py_VaBuildStack_SizeT=Module["__Py_VaBuildStack_SizeT"]=(a0,a1,a2,a3,a4)=>(__Py_VaBuildStack_SizeT=Module["__Py_VaBuildStack_SizeT"]=wasmExports["_Py_VaBuildStack_SizeT"])(a0,a1,a2,a3,a4);var __Py_VaBuildStack=Module["__Py_VaBuildStack"]=(a0,a1,a2,a3,a4)=>(__Py_VaBuildStack=Module["__Py_VaBuildStack"]=wasmExports["_Py_VaBuildStack"])(a0,a1,a2,a3,a4);var _PyEval_CallFunction=Module["_PyEval_CallFunction"]=(a0,a1,a2)=>(_PyEval_CallFunction=Module["_PyEval_CallFunction"]=wasmExports["PyEval_CallFunction"])(a0,a1,a2);var _PyObject_CallMethod=Module["_PyObject_CallMethod"]=(a0,a1,a2,a3)=>(_PyObject_CallMethod=Module["_PyObject_CallMethod"]=wasmExports["PyObject_CallMethod"])(a0,a1,a2,a3);var _PyEval_CallMethod=Module["_PyEval_CallMethod"]=(a0,a1,a2,a3)=>(_PyEval_CallMethod=Module["_PyEval_CallMethod"]=wasmExports["PyEval_CallMethod"])(a0,a1,a2,a3);var __PyObject_CallMethod=Module["__PyObject_CallMethod"]=(a0,a1,a2,a3)=>(__PyObject_CallMethod=Module["__PyObject_CallMethod"]=wasmExports["_PyObject_CallMethod"])(a0,a1,a2,a3);var __PyObject_CallMethodId=Module["__PyObject_CallMethodId"]=(a0,a1,a2,a3)=>(__PyObject_CallMethodId=Module["__PyObject_CallMethodId"]=wasmExports["_PyObject_CallMethodId"])(a0,a1,a2,a3);var __PyObject_CallMethod_SizeT=Module["__PyObject_CallMethod_SizeT"]=(a0,a1,a2,a3)=>(__PyObject_CallMethod_SizeT=Module["__PyObject_CallMethod_SizeT"]=wasmExports["_PyObject_CallMethod_SizeT"])(a0,a1,a2,a3);var __PyObject_CallMethodId_SizeT=Module["__PyObject_CallMethodId_SizeT"]=(a0,a1,a2,a3)=>(__PyObject_CallMethodId_SizeT=Module["__PyObject_CallMethodId_SizeT"]=wasmExports["_PyObject_CallMethodId_SizeT"])(a0,a1,a2,a3);var _PyObject_CallMethodObjArgs=Module["_PyObject_CallMethodObjArgs"]=(a0,a1,a2)=>(_PyObject_CallMethodObjArgs=Module["_PyObject_CallMethodObjArgs"]=wasmExports["PyObject_CallMethodObjArgs"])(a0,a1,a2);var _PyVectorcall_NARGS=Module["_PyVectorcall_NARGS"]=a0=>(_PyVectorcall_NARGS=Module["_PyVectorcall_NARGS"]=wasmExports["PyVectorcall_NARGS"])(a0);var _PyCapsule_New=Module["_PyCapsule_New"]=(a0,a1,a2)=>(_PyCapsule_New=Module["_PyCapsule_New"]=wasmExports["PyCapsule_New"])(a0,a1,a2);var _PyCapsule_IsValid=Module["_PyCapsule_IsValid"]=(a0,a1)=>(_PyCapsule_IsValid=Module["_PyCapsule_IsValid"]=wasmExports["PyCapsule_IsValid"])(a0,a1);var _PyCapsule_GetPointer=Module["_PyCapsule_GetPointer"]=(a0,a1)=>(_PyCapsule_GetPointer=Module["_PyCapsule_GetPointer"]=wasmExports["PyCapsule_GetPointer"])(a0,a1);var _PyCapsule_GetName=Module["_PyCapsule_GetName"]=a0=>(_PyCapsule_GetName=Module["_PyCapsule_GetName"]=wasmExports["PyCapsule_GetName"])(a0);var _PyCapsule_GetDestructor=Module["_PyCapsule_GetDestructor"]=a0=>(_PyCapsule_GetDestructor=Module["_PyCapsule_GetDestructor"]=wasmExports["PyCapsule_GetDestructor"])(a0);var _PyCapsule_GetContext=Module["_PyCapsule_GetContext"]=a0=>(_PyCapsule_GetContext=Module["_PyCapsule_GetContext"]=wasmExports["PyCapsule_GetContext"])(a0);var _PyCapsule_SetPointer=Module["_PyCapsule_SetPointer"]=(a0,a1)=>(_PyCapsule_SetPointer=Module["_PyCapsule_SetPointer"]=wasmExports["PyCapsule_SetPointer"])(a0,a1);var _PyCapsule_SetName=Module["_PyCapsule_SetName"]=(a0,a1)=>(_PyCapsule_SetName=Module["_PyCapsule_SetName"]=wasmExports["PyCapsule_SetName"])(a0,a1);var _PyCapsule_SetDestructor=Module["_PyCapsule_SetDestructor"]=(a0,a1)=>(_PyCapsule_SetDestructor=Module["_PyCapsule_SetDestructor"]=wasmExports["PyCapsule_SetDestructor"])(a0,a1);var _PyCapsule_SetContext=Module["_PyCapsule_SetContext"]=(a0,a1)=>(_PyCapsule_SetContext=Module["_PyCapsule_SetContext"]=wasmExports["PyCapsule_SetContext"])(a0,a1);var _PyCapsule_Import=Module["_PyCapsule_Import"]=(a0,a1)=>(_PyCapsule_Import=Module["_PyCapsule_Import"]=wasmExports["PyCapsule_Import"])(a0,a1);var _PyCell_New=Module["_PyCell_New"]=a0=>(_PyCell_New=Module["_PyCell_New"]=wasmExports["PyCell_New"])(a0);var _PyCell_Get=Module["_PyCell_Get"]=a0=>(_PyCell_Get=Module["_PyCell_Get"]=wasmExports["PyCell_Get"])(a0);var _PyCell_Set=Module["_PyCell_Set"]=(a0,a1)=>(_PyCell_Set=Module["_PyCell_Set"]=wasmExports["PyCell_Set"])(a0,a1);var _PyObject_RichCompare=Module["_PyObject_RichCompare"]=(a0,a1,a2)=>(_PyObject_RichCompare=Module["_PyObject_RichCompare"]=wasmExports["PyObject_RichCompare"])(a0,a1,a2);var _PyMethod_Function=Module["_PyMethod_Function"]=a0=>(_PyMethod_Function=Module["_PyMethod_Function"]=wasmExports["PyMethod_Function"])(a0);var _PyMethod_Self=Module["_PyMethod_Self"]=a0=>(_PyMethod_Self=Module["_PyMethod_Self"]=wasmExports["PyMethod_Self"])(a0);var _PyMethod_New=Module["_PyMethod_New"]=(a0,a1)=>(_PyMethod_New=Module["_PyMethod_New"]=wasmExports["PyMethod_New"])(a0,a1);var _PyObject_ClearWeakRefs=Module["_PyObject_ClearWeakRefs"]=a0=>(_PyObject_ClearWeakRefs=Module["_PyObject_ClearWeakRefs"]=wasmExports["PyObject_ClearWeakRefs"])(a0);var __Py_HashPointer=Module["__Py_HashPointer"]=a0=>(__Py_HashPointer=Module["__Py_HashPointer"]=wasmExports["_Py_HashPointer"])(a0);var __PyType_GetDict=Module["__PyType_GetDict"]=a0=>(__PyType_GetDict=Module["__PyType_GetDict"]=wasmExports["_PyType_GetDict"])(a0);var __PyType_Lookup=Module["__PyType_Lookup"]=(a0,a1)=>(__PyType_Lookup=Module["__PyType_Lookup"]=wasmExports["_PyType_Lookup"])(a0,a1);var _PyInstanceMethod_New=Module["_PyInstanceMethod_New"]=a0=>(_PyInstanceMethod_New=Module["_PyInstanceMethod_New"]=wasmExports["PyInstanceMethod_New"])(a0);var _PyInstanceMethod_Function=Module["_PyInstanceMethod_Function"]=a0=>(_PyInstanceMethod_Function=Module["_PyInstanceMethod_Function"]=wasmExports["PyInstanceMethod_Function"])(a0);var _PyCode_AddWatcher=Module["_PyCode_AddWatcher"]=a0=>(_PyCode_AddWatcher=Module["_PyCode_AddWatcher"]=wasmExports["PyCode_AddWatcher"])(a0);var _PyCode_ClearWatcher=Module["_PyCode_ClearWatcher"]=a0=>(_PyCode_ClearWatcher=Module["_PyCode_ClearWatcher"]=wasmExports["PyCode_ClearWatcher"])(a0);var __PyCode_Validate=Module["__PyCode_Validate"]=a0=>(__PyCode_Validate=Module["__PyCode_Validate"]=wasmExports["_PyCode_Validate"])(a0);var __PyCode_New=Module["__PyCode_New"]=a0=>(__PyCode_New=Module["__PyCode_New"]=wasmExports["_PyCode_New"])(a0);var __PyObject_NewVar=Module["__PyObject_NewVar"]=(a0,a1)=>(__PyObject_NewVar=Module["__PyObject_NewVar"]=wasmExports["_PyObject_NewVar"])(a0,a1);var _PyFrozenSet_New=Module["_PyFrozenSet_New"]=a0=>(_PyFrozenSet_New=Module["_PyFrozenSet_New"]=wasmExports["PyFrozenSet_New"])(a0);var _PyUnstable_Code_NewWithPosOnlyArgs=Module["_PyUnstable_Code_NewWithPosOnlyArgs"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17)=>(_PyUnstable_Code_NewWithPosOnlyArgs=Module["_PyUnstable_Code_NewWithPosOnlyArgs"]=wasmExports["PyUnstable_Code_NewWithPosOnlyArgs"])(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17);var _PyUnicode_Compare=Module["_PyUnicode_Compare"]=(a0,a1)=>(_PyUnicode_Compare=Module["_PyUnicode_Compare"]=wasmExports["PyUnicode_Compare"])(a0,a1);var _PyUnstable_Code_New=Module["_PyUnstable_Code_New"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16)=>(_PyUnstable_Code_New=Module["_PyUnstable_Code_New"]=wasmExports["PyUnstable_Code_New"])(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16);var _PyCode_NewEmpty=Module["_PyCode_NewEmpty"]=(a0,a1,a2)=>(_PyCode_NewEmpty=Module["_PyCode_NewEmpty"]=wasmExports["PyCode_NewEmpty"])(a0,a1,a2);var _PyUnicode_DecodeFSDefault=Module["_PyUnicode_DecodeFSDefault"]=a0=>(_PyUnicode_DecodeFSDefault=Module["_PyUnicode_DecodeFSDefault"]=wasmExports["PyUnicode_DecodeFSDefault"])(a0);var _PyCode_Addr2Line=Module["_PyCode_Addr2Line"]=(a0,a1)=>(_PyCode_Addr2Line=Module["_PyCode_Addr2Line"]=wasmExports["PyCode_Addr2Line"])(a0,a1);var __PyCode_CheckLineNumber=Module["__PyCode_CheckLineNumber"]=(a0,a1)=>(__PyCode_CheckLineNumber=Module["__PyCode_CheckLineNumber"]=wasmExports["_PyCode_CheckLineNumber"])(a0,a1);var _PyCode_Addr2Location=Module["_PyCode_Addr2Location"]=(a0,a1,a2,a3,a4,a5)=>(_PyCode_Addr2Location=Module["_PyCode_Addr2Location"]=wasmExports["PyCode_Addr2Location"])(a0,a1,a2,a3,a4,a5);var _PyUnstable_Code_GetExtra=Module["_PyUnstable_Code_GetExtra"]=(a0,a1,a2)=>(_PyUnstable_Code_GetExtra=Module["_PyUnstable_Code_GetExtra"]=wasmExports["PyUnstable_Code_GetExtra"])(a0,a1,a2);var _PyUnstable_Code_SetExtra=Module["_PyUnstable_Code_SetExtra"]=(a0,a1,a2)=>(_PyUnstable_Code_SetExtra=Module["_PyUnstable_Code_SetExtra"]=wasmExports["PyUnstable_Code_SetExtra"])(a0,a1,a2);var _PyCode_GetVarnames=Module["_PyCode_GetVarnames"]=a0=>(_PyCode_GetVarnames=Module["_PyCode_GetVarnames"]=wasmExports["PyCode_GetVarnames"])(a0);var _PyCode_GetCellvars=Module["_PyCode_GetCellvars"]=a0=>(_PyCode_GetCellvars=Module["_PyCode_GetCellvars"]=wasmExports["PyCode_GetCellvars"])(a0);var _PyCode_GetFreevars=Module["_PyCode_GetFreevars"]=a0=>(_PyCode_GetFreevars=Module["_PyCode_GetFreevars"]=wasmExports["PyCode_GetFreevars"])(a0);var _PyCode_GetCode=Module["_PyCode_GetCode"]=a0=>(_PyCode_GetCode=Module["_PyCode_GetCode"]=wasmExports["PyCode_GetCode"])(a0);var __PyCode_ConstantKey=Module["__PyCode_ConstantKey"]=a0=>(__PyCode_ConstantKey=Module["__PyCode_ConstantKey"]=wasmExports["_PyCode_ConstantKey"])(a0);var _PyComplex_AsCComplex=Module["_PyComplex_AsCComplex"]=(a0,a1)=>(_PyComplex_AsCComplex=Module["_PyComplex_AsCComplex"]=wasmExports["PyComplex_AsCComplex"])(a0,a1);var __PySet_NextEntry=Module["__PySet_NextEntry"]=(a0,a1,a2,a3)=>(__PySet_NextEntry=Module["__PySet_NextEntry"]=wasmExports["_PySet_NextEntry"])(a0,a1,a2,a3);var _PyLong_FromVoidPtr=Module["_PyLong_FromVoidPtr"]=a0=>(_PyLong_FromVoidPtr=Module["_PyLong_FromVoidPtr"]=wasmExports["PyLong_FromVoidPtr"])(a0);var __PyUnicode_FromASCII=Module["__PyUnicode_FromASCII"]=(a0,a1)=>(__PyUnicode_FromASCII=Module["__PyUnicode_FromASCII"]=wasmExports["_PyUnicode_FromASCII"])(a0,a1);var _PyErr_WriteUnraisable=Module["_PyErr_WriteUnraisable"]=a0=>(_PyErr_WriteUnraisable=Module["_PyErr_WriteUnraisable"]=wasmExports["PyErr_WriteUnraisable"])(a0);var __PyUnicode_Copy=Module["__PyUnicode_Copy"]=a0=>(__PyUnicode_Copy=Module["__PyUnicode_Copy"]=wasmExports["_PyUnicode_Copy"])(a0);var __Py_c_sum=Module["__Py_c_sum"]=(a0,a1,a2)=>(__Py_c_sum=Module["__Py_c_sum"]=wasmExports["_Py_c_sum"])(a0,a1,a2);var __Py_c_diff=Module["__Py_c_diff"]=(a0,a1,a2)=>(__Py_c_diff=Module["__Py_c_diff"]=wasmExports["_Py_c_diff"])(a0,a1,a2);var __Py_c_neg=Module["__Py_c_neg"]=(a0,a1)=>(__Py_c_neg=Module["__Py_c_neg"]=wasmExports["_Py_c_neg"])(a0,a1);var __Py_c_prod=Module["__Py_c_prod"]=(a0,a1,a2)=>(__Py_c_prod=Module["__Py_c_prod"]=wasmExports["_Py_c_prod"])(a0,a1,a2);var __Py_c_quot=Module["__Py_c_quot"]=(a0,a1,a2)=>(__Py_c_quot=Module["__Py_c_quot"]=wasmExports["_Py_c_quot"])(a0,a1,a2);var __Py_c_pow=Module["__Py_c_pow"]=(a0,a1,a2)=>(__Py_c_pow=Module["__Py_c_pow"]=wasmExports["_Py_c_pow"])(a0,a1,a2);var _hypot=Module["_hypot"]=(a0,a1)=>(_hypot=Module["_hypot"]=wasmExports["hypot"])(a0,a1);var _atan2=Module["_atan2"]=(a0,a1)=>(_atan2=Module["_atan2"]=wasmExports["atan2"])(a0,a1);var _pow=Module["_pow"]=(a0,a1)=>(_pow=Module["_pow"]=wasmExports["pow"])(a0,a1);var _log=Module["_log"]=a0=>(_log=Module["_log"]=wasmExports["log"])(a0);var _exp=Module["_exp"]=a0=>(_exp=Module["_exp"]=wasmExports["exp"])(a0);var _sin=Module["_sin"]=a0=>(_sin=Module["_sin"]=wasmExports["sin"])(a0);var _cos=Module["_cos"]=a0=>(_cos=Module["_cos"]=wasmExports["cos"])(a0);var __Py_c_abs=Module["__Py_c_abs"]=a0=>(__Py_c_abs=Module["__Py_c_abs"]=wasmExports["_Py_c_abs"])(a0);var _PyComplex_FromDoubles=Module["_PyComplex_FromDoubles"]=(a0,a1)=>(_PyComplex_FromDoubles=Module["_PyComplex_FromDoubles"]=wasmExports["PyComplex_FromDoubles"])(a0,a1);var _PyComplex_RealAsDouble=Module["_PyComplex_RealAsDouble"]=a0=>(_PyComplex_RealAsDouble=Module["_PyComplex_RealAsDouble"]=wasmExports["PyComplex_RealAsDouble"])(a0);var _PyComplex_ImagAsDouble=Module["_PyComplex_ImagAsDouble"]=a0=>(_PyComplex_ImagAsDouble=Module["_PyComplex_ImagAsDouble"]=wasmExports["PyComplex_ImagAsDouble"])(a0);var __Py_HashDouble=Module["__Py_HashDouble"]=(a0,a1)=>(__Py_HashDouble=Module["__Py_HashDouble"]=wasmExports["_Py_HashDouble"])(a0,a1);var __PyUnicode_TransformDecimalAndSpaceToASCII=Module["__PyUnicode_TransformDecimalAndSpaceToASCII"]=a0=>(__PyUnicode_TransformDecimalAndSpaceToASCII=Module["__PyUnicode_TransformDecimalAndSpaceToASCII"]=wasmExports["_PyUnicode_TransformDecimalAndSpaceToASCII"])(a0);var __Py_string_to_number_with_underscores=Module["__Py_string_to_number_with_underscores"]=(a0,a1,a2,a3,a4,a5)=>(__Py_string_to_number_with_underscores=Module["__Py_string_to_number_with_underscores"]=wasmExports["_Py_string_to_number_with_underscores"])(a0,a1,a2,a3,a4,a5);var _PyCMethod_New=Module["_PyCMethod_New"]=(a0,a1,a2,a3)=>(_PyCMethod_New=Module["_PyCMethod_New"]=wasmExports["PyCMethod_New"])(a0,a1,a2,a3);var _PyMember_GetOne=Module["_PyMember_GetOne"]=(a0,a1)=>(_PyMember_GetOne=Module["_PyMember_GetOne"]=wasmExports["PyMember_GetOne"])(a0,a1);var _PyMember_SetOne=Module["_PyMember_SetOne"]=(a0,a1,a2)=>(_PyMember_SetOne=Module["_PyMember_SetOne"]=wasmExports["PyMember_SetOne"])(a0,a1,a2);var _PyTuple_GetSlice=Module["_PyTuple_GetSlice"]=(a0,a1,a2)=>(_PyTuple_GetSlice=Module["_PyTuple_GetSlice"]=wasmExports["PyTuple_GetSlice"])(a0,a1,a2);var _PyDescr_NewMethod=Module["_PyDescr_NewMethod"]=(a0,a1)=>(_PyDescr_NewMethod=Module["_PyDescr_NewMethod"]=wasmExports["PyDescr_NewMethod"])(a0,a1);var __PyObject_FunctionStr=Module["__PyObject_FunctionStr"]=a0=>(__PyObject_FunctionStr=Module["__PyObject_FunctionStr"]=wasmExports["_PyObject_FunctionStr"])(a0);var _PyDescr_NewClassMethod=Module["_PyDescr_NewClassMethod"]=(a0,a1)=>(_PyDescr_NewClassMethod=Module["_PyDescr_NewClassMethod"]=wasmExports["PyDescr_NewClassMethod"])(a0,a1);var _PyDescr_NewMember=Module["_PyDescr_NewMember"]=(a0,a1)=>(_PyDescr_NewMember=Module["_PyDescr_NewMember"]=wasmExports["PyDescr_NewMember"])(a0,a1);var _PyDescr_NewGetSet=Module["_PyDescr_NewGetSet"]=(a0,a1)=>(_PyDescr_NewGetSet=Module["_PyDescr_NewGetSet"]=wasmExports["PyDescr_NewGetSet"])(a0,a1);var _PyDescr_NewWrapper=Module["_PyDescr_NewWrapper"]=(a0,a1,a2)=>(_PyDescr_NewWrapper=Module["_PyDescr_NewWrapper"]=wasmExports["PyDescr_NewWrapper"])(a0,a1,a2);var _PyDescr_IsData=Module["_PyDescr_IsData"]=a0=>(_PyDescr_IsData=Module["_PyDescr_IsData"]=wasmExports["PyDescr_IsData"])(a0);var _PyDictProxy_New=Module["_PyDictProxy_New"]=a0=>(_PyDictProxy_New=Module["_PyDictProxy_New"]=wasmExports["PyDictProxy_New"])(a0);var __PyTrash_cond=Module["__PyTrash_cond"]=(a0,a1)=>(__PyTrash_cond=Module["__PyTrash_cond"]=wasmExports["_PyTrash_cond"])(a0,a1);var __PyThreadState_UncheckedGet=Module["__PyThreadState_UncheckedGet"]=()=>(__PyThreadState_UncheckedGet=Module["__PyThreadState_UncheckedGet"]=wasmExports["_PyThreadState_UncheckedGet"])();var __PyTrash_begin=Module["__PyTrash_begin"]=(a0,a1)=>(__PyTrash_begin=Module["__PyTrash_begin"]=wasmExports["_PyTrash_begin"])(a0,a1);var __PyTrash_end=Module["__PyTrash_end"]=a0=>(__PyTrash_end=Module["__PyTrash_end"]=wasmExports["_PyTrash_end"])(a0);var _PyWrapper_New=Module["_PyWrapper_New"]=(a0,a1)=>(_PyWrapper_New=Module["_PyWrapper_New"]=wasmExports["PyWrapper_New"])(a0,a1);var _PyType_GetQualName=Module["_PyType_GetQualName"]=a0=>(_PyType_GetQualName=Module["_PyType_GetQualName"]=wasmExports["PyType_GetQualName"])(a0);var __PyType_GetDocFromInternalDoc=Module["__PyType_GetDocFromInternalDoc"]=(a0,a1)=>(__PyType_GetDocFromInternalDoc=Module["__PyType_GetDocFromInternalDoc"]=wasmExports["_PyType_GetDocFromInternalDoc"])(a0,a1);var __PyType_GetTextSignatureFromInternalDoc=Module["__PyType_GetTextSignatureFromInternalDoc"]=(a0,a1)=>(__PyType_GetTextSignatureFromInternalDoc=Module["__PyType_GetTextSignatureFromInternalDoc"]=wasmExports["_PyType_GetTextSignatureFromInternalDoc"])(a0,a1);var _PyDict_Contains=Module["_PyDict_Contains"]=(a0,a1)=>(_PyDict_Contains=Module["_PyDict_Contains"]=wasmExports["PyDict_Contains"])(a0,a1);var __PyArg_UnpackStack=Module["__PyArg_UnpackStack"]=(a0,a1,a2,a3,a4,a5)=>(__PyArg_UnpackStack=Module["__PyArg_UnpackStack"]=wasmExports["_PyArg_UnpackStack"])(a0,a1,a2,a3,a4,a5);var __PyObject_IsAbstract=Module["__PyObject_IsAbstract"]=a0=>(__PyObject_IsAbstract=Module["__PyObject_IsAbstract"]=wasmExports["_PyObject_IsAbstract"])(a0);var _PyException_GetCause=Module["_PyException_GetCause"]=a0=>(_PyException_GetCause=Module["_PyException_GetCause"]=wasmExports["PyException_GetCause"])(a0);var _PyException_SetCause=Module["_PyException_SetCause"]=(a0,a1)=>(_PyException_SetCause=Module["_PyException_SetCause"]=wasmExports["PyException_SetCause"])(a0,a1);var _PyException_GetContext=Module["_PyException_GetContext"]=a0=>(_PyException_GetContext=Module["_PyException_GetContext"]=wasmExports["PyException_GetContext"])(a0);var _PyException_SetContext=Module["_PyException_SetContext"]=(a0,a1)=>(_PyException_SetContext=Module["_PyException_SetContext"]=wasmExports["PyException_SetContext"])(a0,a1);var _PyException_GetArgs=Module["_PyException_GetArgs"]=a0=>(_PyException_GetArgs=Module["_PyException_GetArgs"]=wasmExports["PyException_GetArgs"])(a0);var _PyException_SetArgs=Module["_PyException_SetArgs"]=(a0,a1)=>(_PyException_SetArgs=Module["_PyException_SetArgs"]=wasmExports["PyException_SetArgs"])(a0,a1);var _PyExceptionClass_Name=Module["_PyExceptionClass_Name"]=a0=>(_PyExceptionClass_Name=Module["_PyExceptionClass_Name"]=wasmExports["PyExceptionClass_Name"])(a0);var __PyExc_CreateExceptionGroup=Module["__PyExc_CreateExceptionGroup"]=(a0,a1)=>(__PyExc_CreateExceptionGroup=Module["__PyExc_CreateExceptionGroup"]=wasmExports["_PyExc_CreateExceptionGroup"])(a0,a1);var __PyExc_PrepReraiseStar=Module["__PyExc_PrepReraiseStar"]=(a0,a1)=>(__PyExc_PrepReraiseStar=Module["__PyExc_PrepReraiseStar"]=wasmExports["_PyExc_PrepReraiseStar"])(a0,a1);var _PyUnstable_Exc_PrepReraiseStar=Module["_PyUnstable_Exc_PrepReraiseStar"]=(a0,a1)=>(_PyUnstable_Exc_PrepReraiseStar=Module["_PyUnstable_Exc_PrepReraiseStar"]=wasmExports["PyUnstable_Exc_PrepReraiseStar"])(a0,a1);var _PyUnicodeEncodeError_GetEncoding=Module["_PyUnicodeEncodeError_GetEncoding"]=a0=>(_PyUnicodeEncodeError_GetEncoding=Module["_PyUnicodeEncodeError_GetEncoding"]=wasmExports["PyUnicodeEncodeError_GetEncoding"])(a0);var _PyUnicodeDecodeError_GetEncoding=Module["_PyUnicodeDecodeError_GetEncoding"]=a0=>(_PyUnicodeDecodeError_GetEncoding=Module["_PyUnicodeDecodeError_GetEncoding"]=wasmExports["PyUnicodeDecodeError_GetEncoding"])(a0);var _PyUnicodeEncodeError_GetObject=Module["_PyUnicodeEncodeError_GetObject"]=a0=>(_PyUnicodeEncodeError_GetObject=Module["_PyUnicodeEncodeError_GetObject"]=wasmExports["PyUnicodeEncodeError_GetObject"])(a0);var _PyUnicodeDecodeError_GetObject=Module["_PyUnicodeDecodeError_GetObject"]=a0=>(_PyUnicodeDecodeError_GetObject=Module["_PyUnicodeDecodeError_GetObject"]=wasmExports["PyUnicodeDecodeError_GetObject"])(a0);var _PyUnicodeTranslateError_GetObject=Module["_PyUnicodeTranslateError_GetObject"]=a0=>(_PyUnicodeTranslateError_GetObject=Module["_PyUnicodeTranslateError_GetObject"]=wasmExports["PyUnicodeTranslateError_GetObject"])(a0);var _PyUnicodeEncodeError_GetStart=Module["_PyUnicodeEncodeError_GetStart"]=(a0,a1)=>(_PyUnicodeEncodeError_GetStart=Module["_PyUnicodeEncodeError_GetStart"]=wasmExports["PyUnicodeEncodeError_GetStart"])(a0,a1);var _PyUnicodeDecodeError_GetStart=Module["_PyUnicodeDecodeError_GetStart"]=(a0,a1)=>(_PyUnicodeDecodeError_GetStart=Module["_PyUnicodeDecodeError_GetStart"]=wasmExports["PyUnicodeDecodeError_GetStart"])(a0,a1);var _PyUnicodeTranslateError_GetStart=Module["_PyUnicodeTranslateError_GetStart"]=(a0,a1)=>(_PyUnicodeTranslateError_GetStart=Module["_PyUnicodeTranslateError_GetStart"]=wasmExports["PyUnicodeTranslateError_GetStart"])(a0,a1);var _PyUnicodeEncodeError_SetStart=Module["_PyUnicodeEncodeError_SetStart"]=(a0,a1)=>(_PyUnicodeEncodeError_SetStart=Module["_PyUnicodeEncodeError_SetStart"]=wasmExports["PyUnicodeEncodeError_SetStart"])(a0,a1);var _PyUnicodeDecodeError_SetStart=Module["_PyUnicodeDecodeError_SetStart"]=(a0,a1)=>(_PyUnicodeDecodeError_SetStart=Module["_PyUnicodeDecodeError_SetStart"]=wasmExports["PyUnicodeDecodeError_SetStart"])(a0,a1);var _PyUnicodeTranslateError_SetStart=Module["_PyUnicodeTranslateError_SetStart"]=(a0,a1)=>(_PyUnicodeTranslateError_SetStart=Module["_PyUnicodeTranslateError_SetStart"]=wasmExports["PyUnicodeTranslateError_SetStart"])(a0,a1);var _PyUnicodeEncodeError_GetEnd=Module["_PyUnicodeEncodeError_GetEnd"]=(a0,a1)=>(_PyUnicodeEncodeError_GetEnd=Module["_PyUnicodeEncodeError_GetEnd"]=wasmExports["PyUnicodeEncodeError_GetEnd"])(a0,a1);var _PyUnicodeDecodeError_GetEnd=Module["_PyUnicodeDecodeError_GetEnd"]=(a0,a1)=>(_PyUnicodeDecodeError_GetEnd=Module["_PyUnicodeDecodeError_GetEnd"]=wasmExports["PyUnicodeDecodeError_GetEnd"])(a0,a1);var _PyUnicodeTranslateError_GetEnd=Module["_PyUnicodeTranslateError_GetEnd"]=(a0,a1)=>(_PyUnicodeTranslateError_GetEnd=Module["_PyUnicodeTranslateError_GetEnd"]=wasmExports["PyUnicodeTranslateError_GetEnd"])(a0,a1);var _PyUnicodeEncodeError_SetEnd=Module["_PyUnicodeEncodeError_SetEnd"]=(a0,a1)=>(_PyUnicodeEncodeError_SetEnd=Module["_PyUnicodeEncodeError_SetEnd"]=wasmExports["PyUnicodeEncodeError_SetEnd"])(a0,a1);var _PyUnicodeDecodeError_SetEnd=Module["_PyUnicodeDecodeError_SetEnd"]=(a0,a1)=>(_PyUnicodeDecodeError_SetEnd=Module["_PyUnicodeDecodeError_SetEnd"]=wasmExports["PyUnicodeDecodeError_SetEnd"])(a0,a1);var _PyUnicodeTranslateError_SetEnd=Module["_PyUnicodeTranslateError_SetEnd"]=(a0,a1)=>(_PyUnicodeTranslateError_SetEnd=Module["_PyUnicodeTranslateError_SetEnd"]=wasmExports["PyUnicodeTranslateError_SetEnd"])(a0,a1);var _PyUnicodeEncodeError_GetReason=Module["_PyUnicodeEncodeError_GetReason"]=a0=>(_PyUnicodeEncodeError_GetReason=Module["_PyUnicodeEncodeError_GetReason"]=wasmExports["PyUnicodeEncodeError_GetReason"])(a0);var _PyUnicodeDecodeError_GetReason=Module["_PyUnicodeDecodeError_GetReason"]=a0=>(_PyUnicodeDecodeError_GetReason=Module["_PyUnicodeDecodeError_GetReason"]=wasmExports["PyUnicodeDecodeError_GetReason"])(a0);var _PyUnicodeTranslateError_GetReason=Module["_PyUnicodeTranslateError_GetReason"]=a0=>(_PyUnicodeTranslateError_GetReason=Module["_PyUnicodeTranslateError_GetReason"]=wasmExports["PyUnicodeTranslateError_GetReason"])(a0);var _PyUnicodeEncodeError_SetReason=Module["_PyUnicodeEncodeError_SetReason"]=(a0,a1)=>(_PyUnicodeEncodeError_SetReason=Module["_PyUnicodeEncodeError_SetReason"]=wasmExports["PyUnicodeEncodeError_SetReason"])(a0,a1);var _PyUnicodeDecodeError_SetReason=Module["_PyUnicodeDecodeError_SetReason"]=(a0,a1)=>(_PyUnicodeDecodeError_SetReason=Module["_PyUnicodeDecodeError_SetReason"]=wasmExports["PyUnicodeDecodeError_SetReason"])(a0,a1);var _PyUnicodeTranslateError_SetReason=Module["_PyUnicodeTranslateError_SetReason"]=(a0,a1)=>(_PyUnicodeTranslateError_SetReason=Module["_PyUnicodeTranslateError_SetReason"]=wasmExports["PyUnicodeTranslateError_SetReason"])(a0,a1);var _PyUnicodeDecodeError_Create=Module["_PyUnicodeDecodeError_Create"]=(a0,a1,a2,a3,a4,a5)=>(_PyUnicodeDecodeError_Create=Module["_PyUnicodeDecodeError_Create"]=wasmExports["PyUnicodeDecodeError_Create"])(a0,a1,a2,a3,a4,a5);var __PyUnicodeTranslateError_Create=Module["__PyUnicodeTranslateError_Create"]=(a0,a1,a2,a3)=>(__PyUnicodeTranslateError_Create=Module["__PyUnicodeTranslateError_Create"]=wasmExports["_PyUnicodeTranslateError_Create"])(a0,a1,a2,a3);var _PyModule_GetDict=Module["_PyModule_GetDict"]=a0=>(_PyModule_GetDict=Module["_PyModule_GetDict"]=wasmExports["PyModule_GetDict"])(a0);var _PyErr_NewException=Module["_PyErr_NewException"]=(a0,a1,a2)=>(_PyErr_NewException=Module["_PyErr_NewException"]=wasmExports["PyErr_NewException"])(a0,a1,a2);var __PyException_AddNote=Module["__PyException_AddNote"]=(a0,a1)=>(__PyException_AddNote=Module["__PyException_AddNote"]=wasmExports["_PyException_AddNote"])(a0,a1);var _PySet_Add=Module["_PySet_Add"]=(a0,a1)=>(_PySet_Add=Module["_PySet_Add"]=wasmExports["PySet_Add"])(a0,a1);var _PySet_Contains=Module["_PySet_Contains"]=(a0,a1)=>(_PySet_Contains=Module["_PySet_Contains"]=wasmExports["PySet_Contains"])(a0,a1);var _PyTuple_Size=Module["_PyTuple_Size"]=a0=>(_PyTuple_Size=Module["_PyTuple_Size"]=wasmExports["PyTuple_Size"])(a0);var _PyDict_Copy=Module["_PyDict_Copy"]=a0=>(_PyDict_Copy=Module["_PyDict_Copy"]=wasmExports["PyDict_Copy"])(a0);var _PyUnicode_ReadChar=Module["_PyUnicode_ReadChar"]=(a0,a1)=>(_PyUnicode_ReadChar=Module["_PyUnicode_ReadChar"]=wasmExports["PyUnicode_ReadChar"])(a0,a1);var _PyObject_GenericGetDict=Module["_PyObject_GenericGetDict"]=(a0,a1)=>(_PyObject_GenericGetDict=Module["_PyObject_GenericGetDict"]=wasmExports["PyObject_GenericGetDict"])(a0,a1);var _PyObject_GenericSetDict=Module["_PyObject_GenericSetDict"]=(a0,a1,a2)=>(_PyObject_GenericSetDict=Module["_PyObject_GenericSetDict"]=wasmExports["PyObject_GenericSetDict"])(a0,a1,a2);var _PyList_SetSlice=Module["_PyList_SetSlice"]=(a0,a1,a2,a3)=>(_PyList_SetSlice=Module["_PyList_SetSlice"]=wasmExports["PyList_SetSlice"])(a0,a1,a2,a3);var __PyUnicodeWriter_WriteASCIIString=Module["__PyUnicodeWriter_WriteASCIIString"]=(a0,a1,a2)=>(__PyUnicodeWriter_WriteASCIIString=Module["__PyUnicodeWriter_WriteASCIIString"]=wasmExports["_PyUnicodeWriter_WriteASCIIString"])(a0,a1,a2);var _PyObject_GC_Track=Module["_PyObject_GC_Track"]=a0=>(_PyObject_GC_Track=Module["_PyObject_GC_Track"]=wasmExports["PyObject_GC_Track"])(a0);var __PyGen_Finalize=Module["__PyGen_Finalize"]=a0=>(__PyGen_Finalize=Module["__PyGen_Finalize"]=wasmExports["_PyGen_Finalize"])(a0);var _PyObject_CallFinalizerFromDealloc=Module["_PyObject_CallFinalizerFromDealloc"]=a0=>(_PyObject_CallFinalizerFromDealloc=Module["_PyObject_CallFinalizerFromDealloc"]=wasmExports["PyObject_CallFinalizerFromDealloc"])(a0);var __PyObject_GC_NewVar=Module["__PyObject_GC_NewVar"]=(a0,a1)=>(__PyObject_GC_NewVar=Module["__PyObject_GC_NewVar"]=wasmExports["_PyObject_GC_NewVar"])(a0,a1);var _PyUnstable_InterpreterFrame_GetLine=Module["_PyUnstable_InterpreterFrame_GetLine"]=a0=>(_PyUnstable_InterpreterFrame_GetLine=Module["_PyUnstable_InterpreterFrame_GetLine"]=wasmExports["PyUnstable_InterpreterFrame_GetLine"])(a0);var _PyGen_NewWithQualName=Module["_PyGen_NewWithQualName"]=(a0,a1,a2)=>(_PyGen_NewWithQualName=Module["_PyGen_NewWithQualName"]=wasmExports["PyGen_NewWithQualName"])(a0,a1,a2);var _PyGen_New=Module["_PyGen_New"]=a0=>(_PyGen_New=Module["_PyGen_New"]=wasmExports["PyGen_New"])(a0);var _PyCoro_New=Module["_PyCoro_New"]=(a0,a1,a2)=>(_PyCoro_New=Module["_PyCoro_New"]=wasmExports["PyCoro_New"])(a0,a1,a2);var _PyAsyncGen_New=Module["_PyAsyncGen_New"]=(a0,a1,a2)=>(_PyAsyncGen_New=Module["_PyAsyncGen_New"]=wasmExports["PyAsyncGen_New"])(a0,a1,a2);var __PyErr_ChainStackItem=Module["__PyErr_ChainStackItem"]=a0=>(__PyErr_ChainStackItem=Module["__PyErr_ChainStackItem"]=wasmExports["_PyErr_ChainStackItem"])(a0);var __PyEval_EvalFrameDefault=Module["__PyEval_EvalFrameDefault"]=(a0,a1,a2)=>(__PyEval_EvalFrameDefault=Module["__PyEval_EvalFrameDefault"]=wasmExports["_PyEval_EvalFrameDefault"])(a0,a1,a2);var _PyFile_FromFd=Module["_PyFile_FromFd"]=(a0,a1,a2,a3,a4,a5,a6,a7)=>(_PyFile_FromFd=Module["_PyFile_FromFd"]=wasmExports["PyFile_FromFd"])(a0,a1,a2,a3,a4,a5,a6,a7);var _PyFile_GetLine=Module["_PyFile_GetLine"]=(a0,a1)=>(_PyFile_GetLine=Module["_PyFile_GetLine"]=wasmExports["PyFile_GetLine"])(a0,a1);var _PyFile_WriteObject=Module["_PyFile_WriteObject"]=(a0,a1,a2)=>(_PyFile_WriteObject=Module["_PyFile_WriteObject"]=wasmExports["PyFile_WriteObject"])(a0,a1,a2);var _PyFile_WriteString=Module["_PyFile_WriteString"]=(a0,a1)=>(_PyFile_WriteString=Module["_PyFile_WriteString"]=wasmExports["PyFile_WriteString"])(a0,a1);var _PyObject_AsFileDescriptor=Module["_PyObject_AsFileDescriptor"]=a0=>(_PyObject_AsFileDescriptor=Module["_PyObject_AsFileDescriptor"]=wasmExports["PyObject_AsFileDescriptor"])(a0);var __PyLong_FileDescriptor_Converter=Module["__PyLong_FileDescriptor_Converter"]=(a0,a1)=>(__PyLong_FileDescriptor_Converter=Module["__PyLong_FileDescriptor_Converter"]=wasmExports["_PyLong_FileDescriptor_Converter"])(a0,a1);var _flockfile=Module["_flockfile"]=a0=>(_flockfile=Module["_flockfile"]=wasmExports["flockfile"])(a0);var _getc_unlocked=Module["_getc_unlocked"]=a0=>(_getc_unlocked=Module["_getc_unlocked"]=wasmExports["getc_unlocked"])(a0);var _funlockfile=Module["_funlockfile"]=a0=>(_funlockfile=Module["_funlockfile"]=wasmExports["funlockfile"])(a0);var _Py_UniversalNewlineFgets=Module["_Py_UniversalNewlineFgets"]=(a0,a1,a2,a3)=>(_Py_UniversalNewlineFgets=Module["_Py_UniversalNewlineFgets"]=wasmExports["Py_UniversalNewlineFgets"])(a0,a1,a2,a3);var _PyFile_NewStdPrinter=Module["_PyFile_NewStdPrinter"]=a0=>(_PyFile_NewStdPrinter=Module["_PyFile_NewStdPrinter"]=wasmExports["PyFile_NewStdPrinter"])(a0);var _PyFile_SetOpenCodeHook=Module["_PyFile_SetOpenCodeHook"]=(a0,a1)=>(_PyFile_SetOpenCodeHook=Module["_PyFile_SetOpenCodeHook"]=wasmExports["PyFile_SetOpenCodeHook"])(a0,a1);var _Py_IsInitialized=Module["_Py_IsInitialized"]=()=>(_Py_IsInitialized=Module["_Py_IsInitialized"]=wasmExports["Py_IsInitialized"])();var _PyFile_OpenCodeObject=Module["_PyFile_OpenCodeObject"]=a0=>(_PyFile_OpenCodeObject=Module["_PyFile_OpenCodeObject"]=wasmExports["PyFile_OpenCodeObject"])(a0);var _PyFile_OpenCode=Module["_PyFile_OpenCode"]=a0=>(_PyFile_OpenCode=Module["_PyFile_OpenCode"]=wasmExports["PyFile_OpenCode"])(a0);var __PyUnicode_AsUTF8String=Module["__PyUnicode_AsUTF8String"]=(a0,a1)=>(__PyUnicode_AsUTF8String=Module["__PyUnicode_AsUTF8String"]=wasmExports["_PyUnicode_AsUTF8String"])(a0,a1);var __Py_write=Module["__Py_write"]=(a0,a1,a2)=>(__Py_write=Module["__Py_write"]=wasmExports["_Py_write"])(a0,a1,a2);var _PyFloat_GetMax=Module["_PyFloat_GetMax"]=()=>(_PyFloat_GetMax=Module["_PyFloat_GetMax"]=wasmExports["PyFloat_GetMax"])();var _PyFloat_GetMin=Module["_PyFloat_GetMin"]=()=>(_PyFloat_GetMin=Module["_PyFloat_GetMin"]=wasmExports["PyFloat_GetMin"])();var _PyFloat_GetInfo=Module["_PyFloat_GetInfo"]=()=>(_PyFloat_GetInfo=Module["_PyFloat_GetInfo"]=wasmExports["PyFloat_GetInfo"])();var _PyStructSequence_New=Module["_PyStructSequence_New"]=a0=>(_PyStructSequence_New=Module["_PyStructSequence_New"]=wasmExports["PyStructSequence_New"])(a0);var __PyLong_Sign=Module["__PyLong_Sign"]=a0=>(__PyLong_Sign=Module["__PyLong_Sign"]=wasmExports["_PyLong_Sign"])(a0);var _frexp=Module["_frexp"]=(a0,a1)=>(_frexp=Module["_frexp"]=wasmExports["frexp"])(a0,a1);var _modf=Module["_modf"]=(a0,a1)=>(_modf=Module["_modf"]=wasmExports["modf"])(a0,a1);var _PyLong_FromDouble=Module["_PyLong_FromDouble"]=a0=>(_PyLong_FromDouble=Module["_PyLong_FromDouble"]=wasmExports["PyLong_FromDouble"])(a0);var __PyLong_Lshift=Module["__PyLong_Lshift"]=(a0,a1)=>(__PyLong_Lshift=Module["__PyLong_Lshift"]=wasmExports["_PyLong_Lshift"])(a0,a1);var __PyFloat_DebugMallocStats=Module["__PyFloat_DebugMallocStats"]=a0=>(__PyFloat_DebugMallocStats=Module["__PyFloat_DebugMallocStats"]=wasmExports["_PyFloat_DebugMallocStats"])(a0);var __PyDebugAllocatorStats=Module["__PyDebugAllocatorStats"]=(a0,a1,a2,a3)=>(__PyDebugAllocatorStats=Module["__PyDebugAllocatorStats"]=wasmExports["_PyDebugAllocatorStats"])(a0,a1,a2,a3);var _PyFloat_Pack2=Module["_PyFloat_Pack2"]=(a0,a1,a2)=>(_PyFloat_Pack2=Module["_PyFloat_Pack2"]=wasmExports["PyFloat_Pack2"])(a0,a1,a2);var _ldexp=Module["_ldexp"]=(a0,a1)=>(_ldexp=Module["_ldexp"]=wasmExports["ldexp"])(a0,a1);var _PyFloat_Pack4=Module["_PyFloat_Pack4"]=(a0,a1,a2)=>(_PyFloat_Pack4=Module["_PyFloat_Pack4"]=wasmExports["PyFloat_Pack4"])(a0,a1,a2);var _PyFloat_Pack8=Module["_PyFloat_Pack8"]=(a0,a1,a2)=>(_PyFloat_Pack8=Module["_PyFloat_Pack8"]=wasmExports["PyFloat_Pack8"])(a0,a1,a2);var _PyFloat_Unpack2=Module["_PyFloat_Unpack2"]=(a0,a1)=>(_PyFloat_Unpack2=Module["_PyFloat_Unpack2"]=wasmExports["PyFloat_Unpack2"])(a0,a1);var _PyFloat_Unpack4=Module["_PyFloat_Unpack4"]=(a0,a1)=>(_PyFloat_Unpack4=Module["_PyFloat_Unpack4"]=wasmExports["PyFloat_Unpack4"])(a0,a1);var _PyFloat_Unpack8=Module["_PyFloat_Unpack8"]=(a0,a1)=>(_PyFloat_Unpack8=Module["_PyFloat_Unpack8"]=wasmExports["PyFloat_Unpack8"])(a0,a1);var _fmod=Module["_fmod"]=(a0,a1)=>(_fmod=Module["_fmod"]=wasmExports["fmod"])(a0,a1);var _PyErr_SetFromErrno=Module["_PyErr_SetFromErrno"]=a0=>(_PyErr_SetFromErrno=Module["_PyErr_SetFromErrno"]=wasmExports["PyErr_SetFromErrno"])(a0);var _round=Module["_round"]=a0=>(_round=Module["_round"]=wasmExports["round"])(a0);var __Py_dg_dtoa=Module["__Py_dg_dtoa"]=(a0,a1,a2,a3,a4,a5)=>(__Py_dg_dtoa=Module["__Py_dg_dtoa"]=wasmExports["_Py_dg_dtoa"])(a0,a1,a2,a3,a4,a5);var __Py_dg_strtod=Module["__Py_dg_strtod"]=(a0,a1)=>(__Py_dg_strtod=Module["__Py_dg_strtod"]=wasmExports["_Py_dg_strtod"])(a0,a1);var __Py_dg_freedtoa=Module["__Py_dg_freedtoa"]=a0=>(__Py_dg_freedtoa=Module["__Py_dg_freedtoa"]=wasmExports["_Py_dg_freedtoa"])(a0);var __Py_parse_inf_or_nan=Module["__Py_parse_inf_or_nan"]=(a0,a1)=>(__Py_parse_inf_or_nan=Module["__Py_parse_inf_or_nan"]=wasmExports["_Py_parse_inf_or_nan"])(a0,a1);var _strtol=Module["_strtol"]=(a0,a1,a2)=>(_strtol=Module["_strtol"]=wasmExports["strtol"])(a0,a1,a2);var __PyFloat_FormatAdvancedWriter=Module["__PyFloat_FormatAdvancedWriter"]=(a0,a1,a2,a3,a4)=>(__PyFloat_FormatAdvancedWriter=Module["__PyFloat_FormatAdvancedWriter"]=wasmExports["_PyFloat_FormatAdvancedWriter"])(a0,a1,a2,a3,a4);var _PyFrame_GetLineNumber=Module["_PyFrame_GetLineNumber"]=a0=>(_PyFrame_GetLineNumber=Module["_PyFrame_GetLineNumber"]=wasmExports["PyFrame_GetLineNumber"])(a0);var _PyFrame_New=Module["_PyFrame_New"]=(a0,a1,a2,a3)=>(_PyFrame_New=Module["_PyFrame_New"]=wasmExports["PyFrame_New"])(a0,a1,a2,a3);var _PyDict_Size=Module["_PyDict_Size"]=a0=>(_PyDict_Size=Module["_PyDict_Size"]=wasmExports["PyDict_Size"])(a0);var _PyDict_Merge=Module["_PyDict_Merge"]=(a0,a1,a2)=>(_PyDict_Merge=Module["_PyDict_Merge"]=wasmExports["PyDict_Merge"])(a0,a1,a2);var _PyFrame_GetVar=Module["_PyFrame_GetVar"]=(a0,a1)=>(_PyFrame_GetVar=Module["_PyFrame_GetVar"]=wasmExports["PyFrame_GetVar"])(a0,a1);var __PyUnicode_Equal=Module["__PyUnicode_Equal"]=(a0,a1)=>(__PyUnicode_Equal=Module["__PyUnicode_Equal"]=wasmExports["_PyUnicode_Equal"])(a0,a1);var _PyFrame_GetVarString=Module["_PyFrame_GetVarString"]=(a0,a1)=>(_PyFrame_GetVarString=Module["_PyFrame_GetVarString"]=wasmExports["PyFrame_GetVarString"])(a0,a1);var _PyFrame_FastToLocalsWithError=Module["_PyFrame_FastToLocalsWithError"]=a0=>(_PyFrame_FastToLocalsWithError=Module["_PyFrame_FastToLocalsWithError"]=wasmExports["PyFrame_FastToLocalsWithError"])(a0);var _PyFrame_FastToLocals=Module["_PyFrame_FastToLocals"]=a0=>(_PyFrame_FastToLocals=Module["_PyFrame_FastToLocals"]=wasmExports["PyFrame_FastToLocals"])(a0);var _PyFrame_LocalsToFast=Module["_PyFrame_LocalsToFast"]=(a0,a1)=>(_PyFrame_LocalsToFast=Module["_PyFrame_LocalsToFast"]=wasmExports["PyFrame_LocalsToFast"])(a0,a1);var __PyFrame_IsEntryFrame=Module["__PyFrame_IsEntryFrame"]=a0=>(__PyFrame_IsEntryFrame=Module["__PyFrame_IsEntryFrame"]=wasmExports["_PyFrame_IsEntryFrame"])(a0);var _PyFrame_GetCode=Module["_PyFrame_GetCode"]=a0=>(_PyFrame_GetCode=Module["_PyFrame_GetCode"]=wasmExports["PyFrame_GetCode"])(a0);var _PyFrame_GetBack=Module["_PyFrame_GetBack"]=a0=>(_PyFrame_GetBack=Module["_PyFrame_GetBack"]=wasmExports["PyFrame_GetBack"])(a0);var _PyFrame_GetLocals=Module["_PyFrame_GetLocals"]=a0=>(_PyFrame_GetLocals=Module["_PyFrame_GetLocals"]=wasmExports["PyFrame_GetLocals"])(a0);var _PyFrame_GetGlobals=Module["_PyFrame_GetGlobals"]=a0=>(_PyFrame_GetGlobals=Module["_PyFrame_GetGlobals"]=wasmExports["PyFrame_GetGlobals"])(a0);var _PyFrame_GetBuiltins=Module["_PyFrame_GetBuiltins"]=a0=>(_PyFrame_GetBuiltins=Module["_PyFrame_GetBuiltins"]=wasmExports["PyFrame_GetBuiltins"])(a0);var _PyFrame_GetLasti=Module["_PyFrame_GetLasti"]=a0=>(_PyFrame_GetLasti=Module["_PyFrame_GetLasti"]=wasmExports["PyFrame_GetLasti"])(a0);var _PyFrame_GetGenerator=Module["_PyFrame_GetGenerator"]=a0=>(_PyFrame_GetGenerator=Module["_PyFrame_GetGenerator"]=wasmExports["PyFrame_GetGenerator"])(a0);var _PyCompile_OpcodeStackEffect=Module["_PyCompile_OpcodeStackEffect"]=(a0,a1)=>(_PyCompile_OpcodeStackEffect=Module["_PyCompile_OpcodeStackEffect"]=wasmExports["PyCompile_OpcodeStackEffect"])(a0,a1);var _PyFunction_AddWatcher=Module["_PyFunction_AddWatcher"]=a0=>(_PyFunction_AddWatcher=Module["_PyFunction_AddWatcher"]=wasmExports["PyFunction_AddWatcher"])(a0);var _PyFunction_ClearWatcher=Module["_PyFunction_ClearWatcher"]=a0=>(_PyFunction_ClearWatcher=Module["_PyFunction_ClearWatcher"]=wasmExports["PyFunction_ClearWatcher"])(a0);var _PyFunction_NewWithQualName=Module["_PyFunction_NewWithQualName"]=(a0,a1,a2)=>(_PyFunction_NewWithQualName=Module["_PyFunction_NewWithQualName"]=wasmExports["PyFunction_NewWithQualName"])(a0,a1,a2);var _PyFunction_New=Module["_PyFunction_New"]=(a0,a1)=>(_PyFunction_New=Module["_PyFunction_New"]=wasmExports["PyFunction_New"])(a0,a1);var _PyFunction_GetCode=Module["_PyFunction_GetCode"]=a0=>(_PyFunction_GetCode=Module["_PyFunction_GetCode"]=wasmExports["PyFunction_GetCode"])(a0);var _PyFunction_GetGlobals=Module["_PyFunction_GetGlobals"]=a0=>(_PyFunction_GetGlobals=Module["_PyFunction_GetGlobals"]=wasmExports["PyFunction_GetGlobals"])(a0);var _PyFunction_GetModule=Module["_PyFunction_GetModule"]=a0=>(_PyFunction_GetModule=Module["_PyFunction_GetModule"]=wasmExports["PyFunction_GetModule"])(a0);var _PyFunction_GetDefaults=Module["_PyFunction_GetDefaults"]=a0=>(_PyFunction_GetDefaults=Module["_PyFunction_GetDefaults"]=wasmExports["PyFunction_GetDefaults"])(a0);var _PyFunction_SetDefaults=Module["_PyFunction_SetDefaults"]=(a0,a1)=>(_PyFunction_SetDefaults=Module["_PyFunction_SetDefaults"]=wasmExports["PyFunction_SetDefaults"])(a0,a1);var _PyFunction_SetVectorcall=Module["_PyFunction_SetVectorcall"]=(a0,a1)=>(_PyFunction_SetVectorcall=Module["_PyFunction_SetVectorcall"]=wasmExports["PyFunction_SetVectorcall"])(a0,a1);var _PyFunction_GetKwDefaults=Module["_PyFunction_GetKwDefaults"]=a0=>(_PyFunction_GetKwDefaults=Module["_PyFunction_GetKwDefaults"]=wasmExports["PyFunction_GetKwDefaults"])(a0);var _PyFunction_SetKwDefaults=Module["_PyFunction_SetKwDefaults"]=(a0,a1)=>(_PyFunction_SetKwDefaults=Module["_PyFunction_SetKwDefaults"]=wasmExports["PyFunction_SetKwDefaults"])(a0,a1);var _PyFunction_GetClosure=Module["_PyFunction_GetClosure"]=a0=>(_PyFunction_GetClosure=Module["_PyFunction_GetClosure"]=wasmExports["PyFunction_GetClosure"])(a0);var _PyFunction_SetClosure=Module["_PyFunction_SetClosure"]=(a0,a1)=>(_PyFunction_SetClosure=Module["_PyFunction_SetClosure"]=wasmExports["PyFunction_SetClosure"])(a0,a1);var _PyFunction_GetAnnotations=Module["_PyFunction_GetAnnotations"]=a0=>(_PyFunction_GetAnnotations=Module["_PyFunction_GetAnnotations"]=wasmExports["PyFunction_GetAnnotations"])(a0);var _PyFunction_SetAnnotations=Module["_PyFunction_SetAnnotations"]=(a0,a1)=>(_PyFunction_SetAnnotations=Module["_PyFunction_SetAnnotations"]=wasmExports["PyFunction_SetAnnotations"])(a0,a1);var _PyClassMethod_New=Module["_PyClassMethod_New"]=a0=>(_PyClassMethod_New=Module["_PyClassMethod_New"]=wasmExports["PyClassMethod_New"])(a0);var _PyStaticMethod_New=Module["_PyStaticMethod_New"]=a0=>(_PyStaticMethod_New=Module["_PyStaticMethod_New"]=wasmExports["PyStaticMethod_New"])(a0);var __PyInterpreterState_LookUpID=Module["__PyInterpreterState_LookUpID"]=a0=>(__PyInterpreterState_LookUpID=Module["__PyInterpreterState_LookUpID"]=wasmExports["_PyInterpreterState_LookUpID"])(a0);var __PyInterpreterState_IDDecref=Module["__PyInterpreterState_IDDecref"]=a0=>(__PyInterpreterState_IDDecref=Module["__PyInterpreterState_IDDecref"]=wasmExports["_PyInterpreterState_IDDecref"])(a0);var _PyLong_FromLongLong=Module["_PyLong_FromLongLong"]=a0=>(_PyLong_FromLongLong=Module["_PyLong_FromLongLong"]=wasmExports["PyLong_FromLongLong"])(a0);var _PyLong_AsLongLongAndOverflow=Module["_PyLong_AsLongLongAndOverflow"]=(a0,a1)=>(_PyLong_AsLongLongAndOverflow=Module["_PyLong_AsLongLongAndOverflow"]=wasmExports["PyLong_AsLongLongAndOverflow"])(a0,a1);var _PyArg_ParseTupleAndKeywords=Module["_PyArg_ParseTupleAndKeywords"]=(a0,a1,a2,a3,a4)=>(_PyArg_ParseTupleAndKeywords=Module["_PyArg_ParseTupleAndKeywords"]=wasmExports["PyArg_ParseTupleAndKeywords"])(a0,a1,a2,a3,a4);var __PyInterpreterState_IDIncref=Module["__PyInterpreterState_IDIncref"]=a0=>(__PyInterpreterState_IDIncref=Module["__PyInterpreterState_IDIncref"]=wasmExports["_PyInterpreterState_IDIncref"])(a0);var __PyInterpreterID_New=Module["__PyInterpreterID_New"]=a0=>(__PyInterpreterID_New=Module["__PyInterpreterID_New"]=wasmExports["_PyInterpreterID_New"])(a0);var __PyInterpreterState_GetIDObject=Module["__PyInterpreterState_GetIDObject"]=a0=>(__PyInterpreterState_GetIDObject=Module["__PyInterpreterState_GetIDObject"]=wasmExports["_PyInterpreterState_GetIDObject"])(a0);var __PyInterpreterState_IDInitref=Module["__PyInterpreterState_IDInitref"]=a0=>(__PyInterpreterState_IDInitref=Module["__PyInterpreterState_IDInitref"]=wasmExports["_PyInterpreterState_IDInitref"])(a0);var _PyInterpreterState_GetID=Module["_PyInterpreterState_GetID"]=a0=>(_PyInterpreterState_GetID=Module["_PyInterpreterState_GetID"]=wasmExports["PyInterpreterState_GetID"])(a0);var __PyInterpreterID_LookUp=Module["__PyInterpreterID_LookUp"]=a0=>(__PyInterpreterID_LookUp=Module["__PyInterpreterID_LookUp"]=wasmExports["_PyInterpreterID_LookUp"])(a0);var _PyLong_AsLongLong=Module["_PyLong_AsLongLong"]=a0=>(_PyLong_AsLongLong=Module["_PyLong_AsLongLong"]=wasmExports["PyLong_AsLongLong"])(a0);var _PyCallIter_New=Module["_PyCallIter_New"]=(a0,a1)=>(_PyCallIter_New=Module["_PyCallIter_New"]=wasmExports["PyCallIter_New"])(a0,a1);var __PyList_DebugMallocStats=Module["__PyList_DebugMallocStats"]=a0=>(__PyList_DebugMallocStats=Module["__PyList_DebugMallocStats"]=wasmExports["_PyList_DebugMallocStats"])(a0);var _PyList_SetItem=Module["_PyList_SetItem"]=(a0,a1,a2)=>(_PyList_SetItem=Module["_PyList_SetItem"]=wasmExports["PyList_SetItem"])(a0,a1,a2);var _PyList_Insert=Module["_PyList_Insert"]=(a0,a1,a2)=>(_PyList_Insert=Module["_PyList_Insert"]=wasmExports["PyList_Insert"])(a0,a1,a2);var _PyList_GetSlice=Module["_PyList_GetSlice"]=(a0,a1,a2)=>(_PyList_GetSlice=Module["_PyList_GetSlice"]=wasmExports["PyList_GetSlice"])(a0,a1,a2);var _Py_ReprEnter=Module["_Py_ReprEnter"]=a0=>(_Py_ReprEnter=Module["_Py_ReprEnter"]=wasmExports["Py_ReprEnter"])(a0);var __PyUnicodeWriter_WriteChar=Module["__PyUnicodeWriter_WriteChar"]=(a0,a1)=>(__PyUnicodeWriter_WriteChar=Module["__PyUnicodeWriter_WriteChar"]=wasmExports["_PyUnicodeWriter_WriteChar"])(a0,a1);var _Py_ReprLeave=Module["_Py_ReprLeave"]=a0=>(_Py_ReprLeave=Module["_Py_ReprLeave"]=wasmExports["Py_ReprLeave"])(a0);var __PyEval_SliceIndexNotNone=Module["__PyEval_SliceIndexNotNone"]=(a0,a1)=>(__PyEval_SliceIndexNotNone=Module["__PyEval_SliceIndexNotNone"]=wasmExports["_PyEval_SliceIndexNotNone"])(a0,a1);var _PyObject_HashNotImplemented=Module["_PyObject_HashNotImplemented"]=a0=>(_PyObject_HashNotImplemented=Module["_PyObject_HashNotImplemented"]=wasmExports["PyObject_HashNotImplemented"])(a0);var __PyLong_New=Module["__PyLong_New"]=a0=>(__PyLong_New=Module["__PyLong_New"]=wasmExports["_PyLong_New"])(a0);var __PyLong_FromDigits=Module["__PyLong_FromDigits"]=(a0,a1,a2)=>(__PyLong_FromDigits=Module["__PyLong_FromDigits"]=wasmExports["_PyLong_FromDigits"])(a0,a1,a2);var _PyLong_FromUnsignedLong=Module["_PyLong_FromUnsignedLong"]=a0=>(_PyLong_FromUnsignedLong=Module["_PyLong_FromUnsignedLong"]=wasmExports["PyLong_FromUnsignedLong"])(a0);var _PyLong_FromUnsignedLongLong=Module["_PyLong_FromUnsignedLongLong"]=a0=>(_PyLong_FromUnsignedLongLong=Module["_PyLong_FromUnsignedLongLong"]=wasmExports["PyLong_FromUnsignedLongLong"])(a0);var _PyLong_AsUnsignedLong=Module["_PyLong_AsUnsignedLong"]=a0=>(_PyLong_AsUnsignedLong=Module["_PyLong_AsUnsignedLong"]=wasmExports["PyLong_AsUnsignedLong"])(a0);var _PyLong_AsSize_t=Module["_PyLong_AsSize_t"]=a0=>(_PyLong_AsSize_t=Module["_PyLong_AsSize_t"]=wasmExports["PyLong_AsSize_t"])(a0);var _PyLong_AsUnsignedLongMask=Module["_PyLong_AsUnsignedLongMask"]=a0=>(_PyLong_AsUnsignedLongMask=Module["_PyLong_AsUnsignedLongMask"]=wasmExports["PyLong_AsUnsignedLongMask"])(a0);var __PyLong_FromByteArray=Module["__PyLong_FromByteArray"]=(a0,a1,a2,a3)=>(__PyLong_FromByteArray=Module["__PyLong_FromByteArray"]=wasmExports["_PyLong_FromByteArray"])(a0,a1,a2,a3);var _PyLong_AsVoidPtr=Module["_PyLong_AsVoidPtr"]=a0=>(_PyLong_AsVoidPtr=Module["_PyLong_AsVoidPtr"]=wasmExports["PyLong_AsVoidPtr"])(a0);var _PyLong_AsUnsignedLongLong=Module["_PyLong_AsUnsignedLongLong"]=a0=>(_PyLong_AsUnsignedLongLong=Module["_PyLong_AsUnsignedLongLong"]=wasmExports["PyLong_AsUnsignedLongLong"])(a0);var _PyLong_AsUnsignedLongLongMask=Module["_PyLong_AsUnsignedLongLongMask"]=a0=>(_PyLong_AsUnsignedLongLongMask=Module["_PyLong_AsUnsignedLongLongMask"]=wasmExports["PyLong_AsUnsignedLongLongMask"])(a0);var __PyLong_UnsignedShort_Converter=Module["__PyLong_UnsignedShort_Converter"]=(a0,a1)=>(__PyLong_UnsignedShort_Converter=Module["__PyLong_UnsignedShort_Converter"]=wasmExports["_PyLong_UnsignedShort_Converter"])(a0,a1);var __PyLong_UnsignedInt_Converter=Module["__PyLong_UnsignedInt_Converter"]=(a0,a1)=>(__PyLong_UnsignedInt_Converter=Module["__PyLong_UnsignedInt_Converter"]=wasmExports["_PyLong_UnsignedInt_Converter"])(a0,a1);var __PyLong_UnsignedLong_Converter=Module["__PyLong_UnsignedLong_Converter"]=(a0,a1)=>(__PyLong_UnsignedLong_Converter=Module["__PyLong_UnsignedLong_Converter"]=wasmExports["_PyLong_UnsignedLong_Converter"])(a0,a1);var __PyLong_UnsignedLongLong_Converter=Module["__PyLong_UnsignedLongLong_Converter"]=(a0,a1)=>(__PyLong_UnsignedLongLong_Converter=Module["__PyLong_UnsignedLongLong_Converter"]=wasmExports["_PyLong_UnsignedLongLong_Converter"])(a0,a1);var __PyLong_Size_t_Converter=Module["__PyLong_Size_t_Converter"]=(a0,a1)=>(__PyLong_Size_t_Converter=Module["__PyLong_Size_t_Converter"]=wasmExports["_PyLong_Size_t_Converter"])(a0,a1);var __PyUnicodeWriter_PrepareInternal=Module["__PyUnicodeWriter_PrepareInternal"]=(a0,a1,a2)=>(__PyUnicodeWriter_PrepareInternal=Module["__PyUnicodeWriter_PrepareInternal"]=wasmExports["_PyUnicodeWriter_PrepareInternal"])(a0,a1,a2);var __PyLong_FormatWriter=Module["__PyLong_FormatWriter"]=(a0,a1,a2,a3)=>(__PyLong_FormatWriter=Module["__PyLong_FormatWriter"]=wasmExports["_PyLong_FormatWriter"])(a0,a1,a2,a3);var __PyLong_Frexp=Module["__PyLong_Frexp"]=(a0,a1)=>(__PyLong_Frexp=Module["__PyLong_Frexp"]=wasmExports["_PyLong_Frexp"])(a0,a1);var __PyLong_Rshift=Module["__PyLong_Rshift"]=(a0,a1)=>(__PyLong_Rshift=Module["__PyLong_Rshift"]=wasmExports["_PyLong_Rshift"])(a0,a1);var __PyLong_GCD=Module["__PyLong_GCD"]=(a0,a1)=>(__PyLong_GCD=Module["__PyLong_GCD"]=wasmExports["_PyLong_GCD"])(a0,a1);var __PyLong_DivmodNear=Module["__PyLong_DivmodNear"]=(a0,a1)=>(__PyLong_DivmodNear=Module["__PyLong_DivmodNear"]=wasmExports["_PyLong_DivmodNear"])(a0,a1);var _PyLong_GetInfo=Module["_PyLong_GetInfo"]=()=>(_PyLong_GetInfo=Module["_PyLong_GetInfo"]=wasmExports["PyLong_GetInfo"])();var _PyUnstable_Long_IsCompact=Module["_PyUnstable_Long_IsCompact"]=a0=>(_PyUnstable_Long_IsCompact=Module["_PyUnstable_Long_IsCompact"]=wasmExports["PyUnstable_Long_IsCompact"])(a0);var _PyUnstable_Long_CompactValue=Module["_PyUnstable_Long_CompactValue"]=a0=>(_PyUnstable_Long_CompactValue=Module["_PyUnstable_Long_CompactValue"]=wasmExports["PyUnstable_Long_CompactValue"])(a0);var _PyObject_Bytes=Module["_PyObject_Bytes"]=a0=>(_PyObject_Bytes=Module["_PyObject_Bytes"]=wasmExports["PyObject_Bytes"])(a0);var __PyLong_FormatAdvancedWriter=Module["__PyLong_FormatAdvancedWriter"]=(a0,a1,a2,a3,a4)=>(__PyLong_FormatAdvancedWriter=Module["__PyLong_FormatAdvancedWriter"]=wasmExports["_PyLong_FormatAdvancedWriter"])(a0,a1,a2,a3,a4);var __PyDict_DebugMallocStats=Module["__PyDict_DebugMallocStats"]=a0=>(__PyDict_DebugMallocStats=Module["__PyDict_DebugMallocStats"]=wasmExports["_PyDict_DebugMallocStats"])(a0);var __PyDict_CheckConsistency=Module["__PyDict_CheckConsistency"]=(a0,a1)=>(__PyDict_CheckConsistency=Module["__PyDict_CheckConsistency"]=wasmExports["_PyDict_CheckConsistency"])(a0,a1);var __PyObject_AssertFailed=Module["__PyObject_AssertFailed"]=(a0,a1,a2,a3,a4,a5)=>(__PyObject_AssertFailed=Module["__PyObject_AssertFailed"]=wasmExports["_PyObject_AssertFailed"])(a0,a1,a2,a3,a4,a5);var __PyDict_HasOnlyStringKeys=Module["__PyDict_HasOnlyStringKeys"]=a0=>(__PyDict_HasOnlyStringKeys=Module["__PyDict_HasOnlyStringKeys"]=wasmExports["_PyDict_HasOnlyStringKeys"])(a0);var __PyDict_Next=Module["__PyDict_Next"]=(a0,a1,a2,a3,a4)=>(__PyDict_Next=Module["__PyDict_Next"]=wasmExports["_PyDict_Next"])(a0,a1,a2,a3,a4);var __PyDict_MaybeUntrack=Module["__PyDict_MaybeUntrack"]=a0=>(__PyDict_MaybeUntrack=Module["__PyDict_MaybeUntrack"]=wasmExports["_PyDict_MaybeUntrack"])(a0);var _PyObject_IS_GC=Module["_PyObject_IS_GC"]=a0=>(_PyObject_IS_GC=Module["_PyObject_IS_GC"]=wasmExports["PyObject_IS_GC"])(a0);var __PyDict_NewPresized=Module["__PyDict_NewPresized"]=a0=>(__PyDict_NewPresized=Module["__PyDict_NewPresized"]=wasmExports["_PyDict_NewPresized"])(a0);var _PyDict_GetItem=Module["_PyDict_GetItem"]=(a0,a1)=>(_PyDict_GetItem=Module["_PyDict_GetItem"]=wasmExports["PyDict_GetItem"])(a0,a1);var __PyDict_GetItemWithError=Module["__PyDict_GetItemWithError"]=(a0,a1)=>(__PyDict_GetItemWithError=Module["__PyDict_GetItemWithError"]=wasmExports["_PyDict_GetItemWithError"])(a0,a1);var __PyDict_GetItemIdWithError=Module["__PyDict_GetItemIdWithError"]=(a0,a1)=>(__PyDict_GetItemIdWithError=Module["__PyDict_GetItemIdWithError"]=wasmExports["_PyDict_GetItemIdWithError"])(a0,a1);var __PyDict_GetItemStringWithError=Module["__PyDict_GetItemStringWithError"]=(a0,a1)=>(__PyDict_GetItemStringWithError=Module["__PyDict_GetItemStringWithError"]=wasmExports["_PyDict_GetItemStringWithError"])(a0,a1);var __PyDict_SetItem_KnownHash=Module["__PyDict_SetItem_KnownHash"]=(a0,a1,a2,a3)=>(__PyDict_SetItem_KnownHash=Module["__PyDict_SetItem_KnownHash"]=wasmExports["_PyDict_SetItem_KnownHash"])(a0,a1,a2,a3);var _PyDict_DelItem=Module["_PyDict_DelItem"]=(a0,a1)=>(_PyDict_DelItem=Module["_PyDict_DelItem"]=wasmExports["PyDict_DelItem"])(a0,a1);var __PyDict_DelItem_KnownHash=Module["__PyDict_DelItem_KnownHash"]=(a0,a1,a2)=>(__PyDict_DelItem_KnownHash=Module["__PyDict_DelItem_KnownHash"]=wasmExports["_PyDict_DelItem_KnownHash"])(a0,a1,a2);var __PyErr_SetKeyError=Module["__PyErr_SetKeyError"]=a0=>(__PyErr_SetKeyError=Module["__PyErr_SetKeyError"]=wasmExports["_PyErr_SetKeyError"])(a0);var __PyDict_DelItemIf=Module["__PyDict_DelItemIf"]=(a0,a1,a2)=>(__PyDict_DelItemIf=Module["__PyDict_DelItemIf"]=wasmExports["_PyDict_DelItemIf"])(a0,a1,a2);var _PyDict_Clear=Module["_PyDict_Clear"]=a0=>(_PyDict_Clear=Module["_PyDict_Clear"]=wasmExports["PyDict_Clear"])(a0);var __PyDict_Pop=Module["__PyDict_Pop"]=(a0,a1,a2)=>(__PyDict_Pop=Module["__PyDict_Pop"]=wasmExports["_PyDict_Pop"])(a0,a1,a2);var _PyDict_MergeFromSeq2=Module["_PyDict_MergeFromSeq2"]=(a0,a1,a2)=>(_PyDict_MergeFromSeq2=Module["_PyDict_MergeFromSeq2"]=wasmExports["PyDict_MergeFromSeq2"])(a0,a1,a2);var _PyDict_SetDefault=Module["_PyDict_SetDefault"]=(a0,a1,a2)=>(_PyDict_SetDefault=Module["_PyDict_SetDefault"]=wasmExports["PyDict_SetDefault"])(a0,a1,a2);var _PyDict_Update=Module["_PyDict_Update"]=(a0,a1)=>(_PyDict_Update=Module["_PyDict_Update"]=wasmExports["PyDict_Update"])(a0,a1);var __PyDict_MergeEx=Module["__PyDict_MergeEx"]=(a0,a1,a2)=>(__PyDict_MergeEx=Module["__PyDict_MergeEx"]=wasmExports["_PyDict_MergeEx"])(a0,a1,a2);var __PyDict_SizeOf=Module["__PyDict_SizeOf"]=a0=>(__PyDict_SizeOf=Module["__PyDict_SizeOf"]=wasmExports["_PyDict_SizeOf"])(a0);var __PyDict_Contains_KnownHash=Module["__PyDict_Contains_KnownHash"]=(a0,a1,a2)=>(__PyDict_Contains_KnownHash=Module["__PyDict_Contains_KnownHash"]=wasmExports["_PyDict_Contains_KnownHash"])(a0,a1,a2);var __PyDict_ContainsId=Module["__PyDict_ContainsId"]=(a0,a1)=>(__PyDict_ContainsId=Module["__PyDict_ContainsId"]=wasmExports["_PyDict_ContainsId"])(a0,a1);var _PyArg_ValidateKeywordArguments=Module["_PyArg_ValidateKeywordArguments"]=a0=>(_PyArg_ValidateKeywordArguments=Module["_PyArg_ValidateKeywordArguments"]=wasmExports["PyArg_ValidateKeywordArguments"])(a0);var _PyDict_GetItemString=Module["_PyDict_GetItemString"]=(a0,a1)=>(_PyDict_GetItemString=Module["_PyDict_GetItemString"]=wasmExports["PyDict_GetItemString"])(a0,a1);var __PyDict_SetItemId=Module["__PyDict_SetItemId"]=(a0,a1,a2)=>(__PyDict_SetItemId=Module["__PyDict_SetItemId"]=wasmExports["_PyDict_SetItemId"])(a0,a1,a2);var __PyDict_DelItemId=Module["__PyDict_DelItemId"]=(a0,a1)=>(__PyDict_DelItemId=Module["__PyDict_DelItemId"]=wasmExports["_PyDict_DelItemId"])(a0,a1);var _PyDict_DelItemString=Module["_PyDict_DelItemString"]=(a0,a1)=>(_PyDict_DelItemString=Module["_PyDict_DelItemString"]=wasmExports["PyDict_DelItemString"])(a0,a1);var __PyDictView_New=Module["__PyDictView_New"]=(a0,a1)=>(__PyDictView_New=Module["__PyDictView_New"]=wasmExports["_PyDictView_New"])(a0,a1);var __PyDictView_Intersect=Module["__PyDictView_Intersect"]=(a0,a1)=>(__PyDictView_Intersect=Module["__PyDictView_Intersect"]=wasmExports["_PyDictView_Intersect"])(a0,a1);var __PyObject_VisitManagedDict=Module["__PyObject_VisitManagedDict"]=(a0,a1,a2)=>(__PyObject_VisitManagedDict=Module["__PyObject_VisitManagedDict"]=wasmExports["_PyObject_VisitManagedDict"])(a0,a1,a2);var __PyObject_ClearManagedDict=Module["__PyObject_ClearManagedDict"]=a0=>(__PyObject_ClearManagedDict=Module["__PyObject_ClearManagedDict"]=wasmExports["_PyObject_ClearManagedDict"])(a0);var _PyDict_Watch=Module["_PyDict_Watch"]=(a0,a1)=>(_PyDict_Watch=Module["_PyDict_Watch"]=wasmExports["PyDict_Watch"])(a0,a1);var _PyDict_Unwatch=Module["_PyDict_Unwatch"]=(a0,a1)=>(_PyDict_Unwatch=Module["_PyDict_Unwatch"]=wasmExports["PyDict_Unwatch"])(a0,a1);var _PyDict_AddWatcher=Module["_PyDict_AddWatcher"]=a0=>(_PyDict_AddWatcher=Module["_PyDict_AddWatcher"]=wasmExports["PyDict_AddWatcher"])(a0);var _PyDict_ClearWatcher=Module["_PyDict_ClearWatcher"]=a0=>(_PyDict_ClearWatcher=Module["_PyDict_ClearWatcher"]=wasmExports["PyDict_ClearWatcher"])(a0);var _PyODict_New=Module["_PyODict_New"]=()=>(_PyODict_New=Module["_PyODict_New"]=wasmExports["PyODict_New"])();var _PyODict_SetItem=Module["_PyODict_SetItem"]=(a0,a1,a2)=>(_PyODict_SetItem=Module["_PyODict_SetItem"]=wasmExports["PyODict_SetItem"])(a0,a1,a2);var __PyErr_ChainExceptions1=Module["__PyErr_ChainExceptions1"]=a0=>(__PyErr_ChainExceptions1=Module["__PyErr_ChainExceptions1"]=wasmExports["_PyErr_ChainExceptions1"])(a0);var _PyODict_DelItem=Module["_PyODict_DelItem"]=(a0,a1)=>(_PyODict_DelItem=Module["_PyODict_DelItem"]=wasmExports["PyODict_DelItem"])(a0,a1);var _PyMemoryView_FromMemory=Module["_PyMemoryView_FromMemory"]=(a0,a1,a2)=>(_PyMemoryView_FromMemory=Module["_PyMemoryView_FromMemory"]=wasmExports["PyMemoryView_FromMemory"])(a0,a1,a2);var _PyMemoryView_FromBuffer=Module["_PyMemoryView_FromBuffer"]=a0=>(_PyMemoryView_FromBuffer=Module["_PyMemoryView_FromBuffer"]=wasmExports["PyMemoryView_FromBuffer"])(a0);var _PyMemoryView_GetContiguous=Module["_PyMemoryView_GetContiguous"]=(a0,a1,a2)=>(_PyMemoryView_GetContiguous=Module["_PyMemoryView_GetContiguous"]=wasmExports["PyMemoryView_GetContiguous"])(a0,a1,a2);var _PyUnicode_AsASCIIString=Module["_PyUnicode_AsASCIIString"]=a0=>(_PyUnicode_AsASCIIString=Module["_PyUnicode_AsASCIIString"]=wasmExports["PyUnicode_AsASCIIString"])(a0);var _PyCFunction_New=Module["_PyCFunction_New"]=(a0,a1)=>(_PyCFunction_New=Module["_PyCFunction_New"]=wasmExports["PyCFunction_New"])(a0,a1);var _PyCFunction_NewEx=Module["_PyCFunction_NewEx"]=(a0,a1,a2)=>(_PyCFunction_NewEx=Module["_PyCFunction_NewEx"]=wasmExports["PyCFunction_NewEx"])(a0,a1,a2);var _PyCFunction_GetFunction=Module["_PyCFunction_GetFunction"]=a0=>(_PyCFunction_GetFunction=Module["_PyCFunction_GetFunction"]=wasmExports["PyCFunction_GetFunction"])(a0);var _PyCFunction_GetSelf=Module["_PyCFunction_GetSelf"]=a0=>(_PyCFunction_GetSelf=Module["_PyCFunction_GetSelf"]=wasmExports["PyCFunction_GetSelf"])(a0);var _PyCFunction_GetFlags=Module["_PyCFunction_GetFlags"]=a0=>(_PyCFunction_GetFlags=Module["_PyCFunction_GetFlags"]=wasmExports["PyCFunction_GetFlags"])(a0);var _PyModuleDef_Init=Module["_PyModuleDef_Init"]=a0=>(_PyModuleDef_Init=Module["_PyModuleDef_Init"]=wasmExports["PyModuleDef_Init"])(a0);var _PyModule_NewObject=Module["_PyModule_NewObject"]=a0=>(_PyModule_NewObject=Module["_PyModule_NewObject"]=wasmExports["PyModule_NewObject"])(a0);var _PyModule_New=Module["_PyModule_New"]=a0=>(_PyModule_New=Module["_PyModule_New"]=wasmExports["PyModule_New"])(a0);var __PyImport_IsInitialized=Module["__PyImport_IsInitialized"]=a0=>(__PyImport_IsInitialized=Module["__PyImport_IsInitialized"]=wasmExports["_PyImport_IsInitialized"])(a0);var __PyModule_CreateInitialized=Module["__PyModule_CreateInitialized"]=(a0,a1)=>(__PyModule_CreateInitialized=Module["__PyModule_CreateInitialized"]=wasmExports["_PyModule_CreateInitialized"])(a0,a1);var _PyModule_SetDocString=Module["_PyModule_SetDocString"]=(a0,a1)=>(_PyModule_SetDocString=Module["_PyModule_SetDocString"]=wasmExports["PyModule_SetDocString"])(a0,a1);var _PyModule_FromDefAndSpec2=Module["_PyModule_FromDefAndSpec2"]=(a0,a1,a2)=>(_PyModule_FromDefAndSpec2=Module["_PyModule_FromDefAndSpec2"]=wasmExports["PyModule_FromDefAndSpec2"])(a0,a1,a2);var __PyImport_CheckSubinterpIncompatibleExtensionAllowed=Module["__PyImport_CheckSubinterpIncompatibleExtensionAllowed"]=a0=>(__PyImport_CheckSubinterpIncompatibleExtensionAllowed=Module["__PyImport_CheckSubinterpIncompatibleExtensionAllowed"]=wasmExports["_PyImport_CheckSubinterpIncompatibleExtensionAllowed"])(a0);var _PyModule_ExecDef=Module["_PyModule_ExecDef"]=(a0,a1)=>(_PyModule_ExecDef=Module["_PyModule_ExecDef"]=wasmExports["PyModule_ExecDef"])(a0,a1);var _PyModule_GetName=Module["_PyModule_GetName"]=a0=>(_PyModule_GetName=Module["_PyModule_GetName"]=wasmExports["PyModule_GetName"])(a0);var _PyModule_GetFilenameObject=Module["_PyModule_GetFilenameObject"]=a0=>(_PyModule_GetFilenameObject=Module["_PyModule_GetFilenameObject"]=wasmExports["PyModule_GetFilenameObject"])(a0);var _PyModule_GetFilename=Module["_PyModule_GetFilename"]=a0=>(_PyModule_GetFilename=Module["_PyModule_GetFilename"]=wasmExports["PyModule_GetFilename"])(a0);var _PyModule_GetDef=Module["_PyModule_GetDef"]=a0=>(_PyModule_GetDef=Module["_PyModule_GetDef"]=wasmExports["PyModule_GetDef"])(a0);var _PyModule_GetState=Module["_PyModule_GetState"]=a0=>(_PyModule_GetState=Module["_PyModule_GetState"]=wasmExports["PyModule_GetState"])(a0);var __PyModule_Clear=Module["__PyModule_Clear"]=a0=>(__PyModule_Clear=Module["__PyModule_Clear"]=wasmExports["_PyModule_Clear"])(a0);var __PyModule_ClearDict=Module["__PyModule_ClearDict"]=a0=>(__PyModule_ClearDict=Module["__PyModule_ClearDict"]=wasmExports["_PyModule_ClearDict"])(a0);var __PyModuleSpec_IsInitializing=Module["__PyModuleSpec_IsInitializing"]=a0=>(__PyModuleSpec_IsInitializing=Module["__PyModuleSpec_IsInitializing"]=wasmExports["_PyModuleSpec_IsInitializing"])(a0);var __PyObject_GenericGetAttrWithDict=Module["__PyObject_GenericGetAttrWithDict"]=(a0,a1,a2,a3)=>(__PyObject_GenericGetAttrWithDict=Module["__PyObject_GenericGetAttrWithDict"]=wasmExports["_PyObject_GenericGetAttrWithDict"])(a0,a1,a2,a3);var _PySys_FormatStderr=Module["_PySys_FormatStderr"]=(a0,a1)=>(_PySys_FormatStderr=Module["_PySys_FormatStderr"]=wasmExports["PySys_FormatStderr"])(a0,a1);var _PyUnicode_Join=Module["_PyUnicode_Join"]=(a0,a1)=>(_PyUnicode_Join=Module["_PyUnicode_Join"]=wasmExports["PyUnicode_Join"])(a0,a1);var __PyNamespace_New=Module["__PyNamespace_New"]=a0=>(__PyNamespace_New=Module["__PyNamespace_New"]=wasmExports["_PyNamespace_New"])(a0);var __PyObject_CheckConsistency=Module["__PyObject_CheckConsistency"]=(a0,a1)=>(__PyObject_CheckConsistency=Module["__PyObject_CheckConsistency"]=wasmExports["_PyObject_CheckConsistency"])(a0,a1);var __PyType_CheckConsistency=Module["__PyType_CheckConsistency"]=a0=>(__PyType_CheckConsistency=Module["__PyType_CheckConsistency"]=wasmExports["_PyType_CheckConsistency"])(a0);var __PyUnicode_CheckConsistency=Module["__PyUnicode_CheckConsistency"]=(a0,a1)=>(__PyUnicode_CheckConsistency=Module["__PyUnicode_CheckConsistency"]=wasmExports["_PyUnicode_CheckConsistency"])(a0,a1);var __PyObject_IsFreed=Module["__PyObject_IsFreed"]=a0=>(__PyObject_IsFreed=Module["__PyObject_IsFreed"]=wasmExports["_PyObject_IsFreed"])(a0);var _fiprintf=Module["_fiprintf"]=(a0,a1,a2)=>(_fiprintf=Module["_fiprintf"]=wasmExports["fiprintf"])(a0,a1,a2);var _fwrite=Module["_fwrite"]=(a0,a1,a2,a3)=>(_fwrite=Module["_fwrite"]=wasmExports["fwrite"])(a0,a1,a2,a3);var _fputc=Module["_fputc"]=(a0,a1)=>(_fputc=Module["_fputc"]=wasmExports["fputc"])(a0,a1);var __PyObject_Dump=Module["__PyObject_Dump"]=a0=>(__PyObject_Dump=Module["__PyObject_Dump"]=wasmExports["_PyObject_Dump"])(a0);var _Py_IncRef=Module["_Py_IncRef"]=a0=>(_Py_IncRef=Module["_Py_IncRef"]=wasmExports["Py_IncRef"])(a0);var _Py_DecRef=Module["_Py_DecRef"]=a0=>(_Py_DecRef=Module["_Py_DecRef"]=wasmExports["Py_DecRef"])(a0);var __Py_IncRef=Module["__Py_IncRef"]=a0=>(__Py_IncRef=Module["__Py_IncRef"]=wasmExports["_Py_IncRef"])(a0);var __Py_DecRef=Module["__Py_DecRef"]=a0=>(__Py_DecRef=Module["__Py_DecRef"]=wasmExports["_Py_DecRef"])(a0);var _PyObject_Init=Module["_PyObject_Init"]=(a0,a1)=>(_PyObject_Init=Module["_PyObject_Init"]=wasmExports["PyObject_Init"])(a0,a1);var _PyObject_InitVar=Module["_PyObject_InitVar"]=(a0,a1,a2)=>(_PyObject_InitVar=Module["_PyObject_InitVar"]=wasmExports["PyObject_InitVar"])(a0,a1,a2);var _PyObject_CallFinalizer=Module["_PyObject_CallFinalizer"]=a0=>(_PyObject_CallFinalizer=Module["_PyObject_CallFinalizer"]=wasmExports["PyObject_CallFinalizer"])(a0);var _PyObject_Print=Module["_PyObject_Print"]=(a0,a1,a2)=>(_PyObject_Print=Module["_PyObject_Print"]=wasmExports["PyObject_Print"])(a0,a1,a2);var _ferror=Module["_ferror"]=a0=>(_ferror=Module["_ferror"]=wasmExports["ferror"])(a0);var __Py_BreakPoint=Module["__Py_BreakPoint"]=()=>(__Py_BreakPoint=Module["__Py_BreakPoint"]=wasmExports["_Py_BreakPoint"])();var _PyGILState_Ensure=Module["_PyGILState_Ensure"]=()=>(_PyGILState_Ensure=Module["_PyGILState_Ensure"]=wasmExports["PyGILState_Ensure"])();var _PyGILState_Release=Module["_PyGILState_Release"]=a0=>(_PyGILState_Release=Module["_PyGILState_Release"]=wasmExports["PyGILState_Release"])(a0);var __PyUnicode_AsASCIIString=Module["__PyUnicode_AsASCIIString"]=(a0,a1)=>(__PyUnicode_AsASCIIString=Module["__PyUnicode_AsASCIIString"]=wasmExports["_PyUnicode_AsASCIIString"])(a0,a1);var _PyUnicode_DecodeASCII=Module["_PyUnicode_DecodeASCII"]=(a0,a1,a2)=>(_PyUnicode_DecodeASCII=Module["_PyUnicode_DecodeASCII"]=wasmExports["PyUnicode_DecodeASCII"])(a0,a1,a2);var _PyObject_HasAttrString=Module["_PyObject_HasAttrString"]=(a0,a1)=>(_PyObject_HasAttrString=Module["_PyObject_HasAttrString"]=wasmExports["PyObject_HasAttrString"])(a0,a1);var __PyObject_LookupAttrId=Module["__PyObject_LookupAttrId"]=(a0,a1,a2)=>(__PyObject_LookupAttrId=Module["__PyObject_LookupAttrId"]=wasmExports["_PyObject_LookupAttrId"])(a0,a1,a2);var __PyObject_GetDictPtr=Module["__PyObject_GetDictPtr"]=a0=>(__PyObject_GetDictPtr=Module["__PyObject_GetDictPtr"]=wasmExports["_PyObject_GetDictPtr"])(a0);var __PyObject_GenericSetAttrWithDict=Module["__PyObject_GenericSetAttrWithDict"]=(a0,a1,a2,a3)=>(__PyObject_GenericSetAttrWithDict=Module["__PyObject_GenericSetAttrWithDict"]=wasmExports["_PyObject_GenericSetAttrWithDict"])(a0,a1,a2,a3);var _PyObject_Not=Module["_PyObject_Not"]=a0=>(_PyObject_Not=Module["_PyObject_Not"]=wasmExports["PyObject_Not"])(a0);var __PyObject_DebugTypeStats=Module["__PyObject_DebugTypeStats"]=a0=>(__PyObject_DebugTypeStats=Module["__PyObject_DebugTypeStats"]=wasmExports["_PyObject_DebugTypeStats"])(a0);var __PyTuple_DebugMallocStats=Module["__PyTuple_DebugMallocStats"]=a0=>(__PyTuple_DebugMallocStats=Module["__PyTuple_DebugMallocStats"]=wasmExports["_PyTuple_DebugMallocStats"])(a0);var _PyThreadState_GetDict=Module["_PyThreadState_GetDict"]=()=>(_PyThreadState_GetDict=Module["_PyThreadState_GetDict"]=wasmExports["PyThreadState_GetDict"])();var _PyThread_tss_get=Module["_PyThread_tss_get"]=a0=>(_PyThread_tss_get=Module["_PyThread_tss_get"]=wasmExports["PyThread_tss_get"])(a0);var _PyMem_RawMalloc=Module["_PyMem_RawMalloc"]=a0=>(_PyMem_RawMalloc=Module["_PyMem_RawMalloc"]=wasmExports["PyMem_RawMalloc"])(a0);var _PyThread_tss_set=Module["_PyThread_tss_set"]=(a0,a1)=>(_PyThread_tss_set=Module["_PyThread_tss_set"]=wasmExports["PyThread_tss_set"])(a0,a1);var _PyThread_tss_is_created=Module["_PyThread_tss_is_created"]=a0=>(_PyThread_tss_is_created=Module["_PyThread_tss_is_created"]=wasmExports["PyThread_tss_is_created"])(a0);var _PyObject_GET_WEAKREFS_LISTPTR=Module["_PyObject_GET_WEAKREFS_LISTPTR"]=a0=>(_PyObject_GET_WEAKREFS_LISTPTR=Module["_PyObject_GET_WEAKREFS_LISTPTR"]=wasmExports["PyObject_GET_WEAKREFS_LISTPTR"])(a0);var _Py_NewRef=Module["_Py_NewRef"]=a0=>(_Py_NewRef=Module["_Py_NewRef"]=wasmExports["Py_NewRef"])(a0);var _Py_XNewRef=Module["_Py_XNewRef"]=a0=>(_Py_XNewRef=Module["_Py_XNewRef"]=wasmExports["Py_XNewRef"])(a0);var _Py_Is=Module["_Py_Is"]=(a0,a1)=>(_Py_Is=Module["_Py_Is"]=wasmExports["Py_Is"])(a0,a1);var _Py_IsNone=Module["_Py_IsNone"]=a0=>(_Py_IsNone=Module["_Py_IsNone"]=wasmExports["Py_IsNone"])(a0);var _Py_IsTrue=Module["_Py_IsTrue"]=a0=>(_Py_IsTrue=Module["_Py_IsTrue"]=wasmExports["Py_IsTrue"])(a0);var _Py_IsFalse=Module["_Py_IsFalse"]=a0=>(_Py_IsFalse=Module["_Py_IsFalse"]=wasmExports["Py_IsFalse"])(a0);var _calloc=Module["_calloc"]=(a0,a1)=>(_calloc=Module["_calloc"]=wasmExports["calloc"])(a0,a1);var _realloc=Module["_realloc"]=(a0,a1)=>(_realloc=Module["_realloc"]=wasmExports["realloc"])(a0,a1);var __PyMem_SetDefaultAllocator=Module["__PyMem_SetDefaultAllocator"]=(a0,a1)=>(__PyMem_SetDefaultAllocator=Module["__PyMem_SetDefaultAllocator"]=wasmExports["_PyMem_SetDefaultAllocator"])(a0,a1);var __PyMem_GetAllocatorName=Module["__PyMem_GetAllocatorName"]=(a0,a1)=>(__PyMem_GetAllocatorName=Module["__PyMem_GetAllocatorName"]=wasmExports["_PyMem_GetAllocatorName"])(a0,a1);var __PyMem_SetupAllocators=Module["__PyMem_SetupAllocators"]=a0=>(__PyMem_SetupAllocators=Module["__PyMem_SetupAllocators"]=wasmExports["_PyMem_SetupAllocators"])(a0);var __PyMem_GetCurrentAllocatorName=Module["__PyMem_GetCurrentAllocatorName"]=()=>(__PyMem_GetCurrentAllocatorName=Module["__PyMem_GetCurrentAllocatorName"]=wasmExports["_PyMem_GetCurrentAllocatorName"])();var _PyMem_SetupDebugHooks=Module["_PyMem_SetupDebugHooks"]=()=>(_PyMem_SetupDebugHooks=Module["_PyMem_SetupDebugHooks"]=wasmExports["PyMem_SetupDebugHooks"])();var _PyMem_GetAllocator=Module["_PyMem_GetAllocator"]=(a0,a1)=>(_PyMem_GetAllocator=Module["_PyMem_GetAllocator"]=wasmExports["PyMem_GetAllocator"])(a0,a1);var _PyMem_SetAllocator=Module["_PyMem_SetAllocator"]=(a0,a1)=>(_PyMem_SetAllocator=Module["_PyMem_SetAllocator"]=wasmExports["PyMem_SetAllocator"])(a0,a1);var _PyObject_SetArenaAllocator=Module["_PyObject_SetArenaAllocator"]=a0=>(_PyObject_SetArenaAllocator=Module["_PyObject_SetArenaAllocator"]=wasmExports["PyObject_SetArenaAllocator"])(a0);var _PyMem_RawCalloc=Module["_PyMem_RawCalloc"]=(a0,a1)=>(_PyMem_RawCalloc=Module["_PyMem_RawCalloc"]=wasmExports["PyMem_RawCalloc"])(a0,a1);var __PyMem_RawWcsdup=Module["__PyMem_RawWcsdup"]=a0=>(__PyMem_RawWcsdup=Module["__PyMem_RawWcsdup"]=wasmExports["_PyMem_RawWcsdup"])(a0);var _wcslen=Module["_wcslen"]=a0=>(_wcslen=Module["_wcslen"]=wasmExports["wcslen"])(a0);var __PyMem_RawStrdup=Module["__PyMem_RawStrdup"]=a0=>(__PyMem_RawStrdup=Module["__PyMem_RawStrdup"]=wasmExports["_PyMem_RawStrdup"])(a0);var __PyMem_Strdup=Module["__PyMem_Strdup"]=a0=>(__PyMem_Strdup=Module["__PyMem_Strdup"]=wasmExports["_PyMem_Strdup"])(a0);var _PyPickleBuffer_FromObject=Module["_PyPickleBuffer_FromObject"]=a0=>(_PyPickleBuffer_FromObject=Module["_PyPickleBuffer_FromObject"]=wasmExports["PyPickleBuffer_FromObject"])(a0);var _PyPickleBuffer_GetBuffer=Module["_PyPickleBuffer_GetBuffer"]=a0=>(_PyPickleBuffer_GetBuffer=Module["_PyPickleBuffer_GetBuffer"]=wasmExports["PyPickleBuffer_GetBuffer"])(a0);var _PyPickleBuffer_Release=Module["_PyPickleBuffer_Release"]=a0=>(_PyPickleBuffer_Release=Module["_PyPickleBuffer_Release"]=wasmExports["PyPickleBuffer_Release"])(a0);var __PySlice_GetLongIndices=Module["__PySlice_GetLongIndices"]=(a0,a1,a2,a3,a4)=>(__PySlice_GetLongIndices=Module["__PySlice_GetLongIndices"]=wasmExports["_PySlice_GetLongIndices"])(a0,a1,a2,a3,a4);var _PySet_Size=Module["_PySet_Size"]=a0=>(_PySet_Size=Module["_PySet_Size"]=wasmExports["PySet_Size"])(a0);var _PySet_Clear=Module["_PySet_Clear"]=a0=>(_PySet_Clear=Module["_PySet_Clear"]=wasmExports["PySet_Clear"])(a0);var _PySet_Pop=Module["_PySet_Pop"]=a0=>(_PySet_Pop=Module["_PySet_Pop"]=wasmExports["PySet_Pop"])(a0);var _PySlice_New=Module["_PySlice_New"]=(a0,a1,a2)=>(_PySlice_New=Module["_PySlice_New"]=wasmExports["PySlice_New"])(a0,a1,a2);var _PySlice_GetIndices=Module["_PySlice_GetIndices"]=(a0,a1,a2,a3,a4)=>(_PySlice_GetIndices=Module["_PySlice_GetIndices"]=wasmExports["PySlice_GetIndices"])(a0,a1,a2,a3,a4);var _PySlice_GetIndicesEx=Module["_PySlice_GetIndicesEx"]=(a0,a1,a2,a3,a4,a5)=>(_PySlice_GetIndicesEx=Module["_PySlice_GetIndicesEx"]=wasmExports["PySlice_GetIndicesEx"])(a0,a1,a2,a3,a4,a5);var _PyStructSequence_SetItem=Module["_PyStructSequence_SetItem"]=(a0,a1,a2)=>(_PyStructSequence_SetItem=Module["_PyStructSequence_SetItem"]=wasmExports["PyStructSequence_SetItem"])(a0,a1,a2);var _PyStructSequence_GetItem=Module["_PyStructSequence_GetItem"]=(a0,a1)=>(_PyStructSequence_GetItem=Module["_PyStructSequence_GetItem"]=wasmExports["PyStructSequence_GetItem"])(a0,a1);var _PyStructSequence_InitType2=Module["_PyStructSequence_InitType2"]=(a0,a1)=>(_PyStructSequence_InitType2=Module["_PyStructSequence_InitType2"]=wasmExports["PyStructSequence_InitType2"])(a0,a1);var _PyStructSequence_InitType=Module["_PyStructSequence_InitType"]=(a0,a1)=>(_PyStructSequence_InitType=Module["_PyStructSequence_InitType"]=wasmExports["PyStructSequence_InitType"])(a0,a1);var __PyStructSequence_NewType=Module["__PyStructSequence_NewType"]=(a0,a1)=>(__PyStructSequence_NewType=Module["__PyStructSequence_NewType"]=wasmExports["_PyStructSequence_NewType"])(a0,a1);var _PyStructSequence_NewType=Module["_PyStructSequence_NewType"]=a0=>(_PyStructSequence_NewType=Module["_PyStructSequence_NewType"]=wasmExports["PyStructSequence_NewType"])(a0);var _PyTuple_SetItem=Module["_PyTuple_SetItem"]=(a0,a1,a2)=>(_PyTuple_SetItem=Module["_PyTuple_SetItem"]=wasmExports["PyTuple_SetItem"])(a0,a1,a2);var __PyTuple_MaybeUntrack=Module["__PyTuple_MaybeUntrack"]=a0=>(__PyTuple_MaybeUntrack=Module["__PyTuple_MaybeUntrack"]=wasmExports["_PyTuple_MaybeUntrack"])(a0);var __PyObject_GC_Resize=Module["__PyObject_GC_Resize"]=(a0,a1)=>(__PyObject_GC_Resize=Module["__PyObject_GC_Resize"]=wasmExports["_PyObject_GC_Resize"])(a0,a1);var _PyType_GetDict=Module["_PyType_GetDict"]=a0=>(_PyType_GetDict=Module["_PyType_GetDict"]=wasmExports["PyType_GetDict"])(a0);var _strrchr=Module["_strrchr"]=(a0,a1)=>(_strrchr=Module["_strrchr"]=wasmExports["strrchr"])(a0,a1);var _PyType_ClearCache=Module["_PyType_ClearCache"]=()=>(_PyType_ClearCache=Module["_PyType_ClearCache"]=wasmExports["PyType_ClearCache"])();var _PyType_AddWatcher=Module["_PyType_AddWatcher"]=a0=>(_PyType_AddWatcher=Module["_PyType_AddWatcher"]=wasmExports["PyType_AddWatcher"])(a0);var _PyType_ClearWatcher=Module["_PyType_ClearWatcher"]=a0=>(_PyType_ClearWatcher=Module["_PyType_ClearWatcher"]=wasmExports["PyType_ClearWatcher"])(a0);var _PyType_Watch=Module["_PyType_Watch"]=(a0,a1)=>(_PyType_Watch=Module["_PyType_Watch"]=wasmExports["PyType_Watch"])(a0,a1);var _PyType_Unwatch=Module["_PyType_Unwatch"]=(a0,a1)=>(_PyType_Unwatch=Module["_PyType_Unwatch"]=wasmExports["PyType_Unwatch"])(a0,a1);var _PyType_Modified=Module["_PyType_Modified"]=a0=>(_PyType_Modified=Module["_PyType_Modified"]=wasmExports["PyType_Modified"])(a0);var _PyUnstable_Type_AssignVersionTag=Module["_PyUnstable_Type_AssignVersionTag"]=a0=>(_PyUnstable_Type_AssignVersionTag=Module["_PyUnstable_Type_AssignVersionTag"]=wasmExports["PyUnstable_Type_AssignVersionTag"])(a0);var __PyObject_LookupSpecialId=Module["__PyObject_LookupSpecialId"]=(a0,a1)=>(__PyObject_LookupSpecialId=Module["__PyObject_LookupSpecialId"]=wasmExports["_PyObject_LookupSpecialId"])(a0,a1);var _PyType_GetFlags=Module["_PyType_GetFlags"]=a0=>(_PyType_GetFlags=Module["_PyType_GetFlags"]=wasmExports["PyType_GetFlags"])(a0);var _PyType_SUPPORTS_WEAKREFS=Module["_PyType_SUPPORTS_WEAKREFS"]=a0=>(_PyType_SUPPORTS_WEAKREFS=Module["_PyType_SUPPORTS_WEAKREFS"]=wasmExports["PyType_SUPPORTS_WEAKREFS"])(a0);var __PyType_CalculateMetaclass=Module["__PyType_CalculateMetaclass"]=(a0,a1)=>(__PyType_CalculateMetaclass=Module["__PyType_CalculateMetaclass"]=wasmExports["_PyType_CalculateMetaclass"])(a0,a1);var _PyType_FromMetaclass=Module["_PyType_FromMetaclass"]=(a0,a1,a2,a3)=>(_PyType_FromMetaclass=Module["_PyType_FromMetaclass"]=wasmExports["PyType_FromMetaclass"])(a0,a1,a2,a3);var _PyType_FromModuleAndSpec=Module["_PyType_FromModuleAndSpec"]=(a0,a1,a2)=>(_PyType_FromModuleAndSpec=Module["_PyType_FromModuleAndSpec"]=wasmExports["PyType_FromModuleAndSpec"])(a0,a1,a2);var _PyType_FromSpec=Module["_PyType_FromSpec"]=a0=>(_PyType_FromSpec=Module["_PyType_FromSpec"]=wasmExports["PyType_FromSpec"])(a0);var _PyType_GetName=Module["_PyType_GetName"]=a0=>(_PyType_GetName=Module["_PyType_GetName"]=wasmExports["PyType_GetName"])(a0);var _PyType_GetSlot=Module["_PyType_GetSlot"]=(a0,a1)=>(_PyType_GetSlot=Module["_PyType_GetSlot"]=wasmExports["PyType_GetSlot"])(a0,a1);var _PyType_GetModule=Module["_PyType_GetModule"]=a0=>(_PyType_GetModule=Module["_PyType_GetModule"]=wasmExports["PyType_GetModule"])(a0);var _PyType_GetModuleState=Module["_PyType_GetModuleState"]=a0=>(_PyType_GetModuleState=Module["_PyType_GetModuleState"]=wasmExports["PyType_GetModuleState"])(a0);var _PyType_GetModuleByDef=Module["_PyType_GetModuleByDef"]=(a0,a1)=>(_PyType_GetModuleByDef=Module["_PyType_GetModuleByDef"]=wasmExports["PyType_GetModuleByDef"])(a0,a1);var _PyObject_GetTypeData=Module["_PyObject_GetTypeData"]=(a0,a1)=>(_PyObject_GetTypeData=Module["_PyObject_GetTypeData"]=wasmExports["PyObject_GetTypeData"])(a0,a1);var _PyType_GetTypeDataSize=Module["_PyType_GetTypeDataSize"]=a0=>(_PyType_GetTypeDataSize=Module["_PyType_GetTypeDataSize"]=wasmExports["PyType_GetTypeDataSize"])(a0);var _PyObject_GetItemData=Module["_PyObject_GetItemData"]=a0=>(_PyObject_GetItemData=Module["_PyObject_GetItemData"]=wasmExports["PyObject_GetItemData"])(a0);var __PyType_LookupId=Module["__PyType_LookupId"]=(a0,a1)=>(__PyType_LookupId=Module["__PyType_LookupId"]=wasmExports["_PyType_LookupId"])(a0,a1);var _PyArg_ParseTuple=Module["_PyArg_ParseTuple"]=(a0,a1,a2)=>(_PyArg_ParseTuple=Module["_PyArg_ParseTuple"]=wasmExports["PyArg_ParseTuple"])(a0,a1,a2);var _PyUnicode_IsIdentifier=Module["_PyUnicode_IsIdentifier"]=a0=>(_PyUnicode_IsIdentifier=Module["_PyUnicode_IsIdentifier"]=wasmExports["PyUnicode_IsIdentifier"])(a0);var _PyEval_GetGlobals=Module["_PyEval_GetGlobals"]=()=>(_PyEval_GetGlobals=Module["_PyEval_GetGlobals"]=wasmExports["PyEval_GetGlobals"])();var __PyWeakref_ClearRef=Module["__PyWeakref_ClearRef"]=a0=>(__PyWeakref_ClearRef=Module["__PyWeakref_ClearRef"]=wasmExports["_PyWeakref_ClearRef"])(a0);var _PyWeakref_NewRef=Module["_PyWeakref_NewRef"]=(a0,a1)=>(_PyWeakref_NewRef=Module["_PyWeakref_NewRef"]=wasmExports["PyWeakref_NewRef"])(a0,a1);var _PyImport_GetModule=Module["_PyImport_GetModule"]=a0=>(_PyImport_GetModule=Module["_PyImport_GetModule"]=wasmExports["PyImport_GetModule"])(a0);var _PyImport_Import=Module["_PyImport_Import"]=a0=>(_PyImport_Import=Module["_PyImport_Import"]=wasmExports["PyImport_Import"])(a0);var __PyArg_UnpackKeywordsWithVararg=Module["__PyArg_UnpackKeywordsWithVararg"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)=>(__PyArg_UnpackKeywordsWithVararg=Module["__PyArg_UnpackKeywordsWithVararg"]=wasmExports["_PyArg_UnpackKeywordsWithVararg"])(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);var __Py_hashtable_len=Module["__Py_hashtable_len"]=a0=>(__Py_hashtable_len=Module["__Py_hashtable_len"]=wasmExports["_Py_hashtable_len"])(a0);var __Py_GetErrorHandler=Module["__Py_GetErrorHandler"]=a0=>(__Py_GetErrorHandler=Module["__Py_GetErrorHandler"]=wasmExports["_Py_GetErrorHandler"])(a0);var __PyUnicode_FastCopyCharacters=Module["__PyUnicode_FastCopyCharacters"]=(a0,a1,a2,a3,a4)=>(__PyUnicode_FastCopyCharacters=Module["__PyUnicode_FastCopyCharacters"]=wasmExports["_PyUnicode_FastCopyCharacters"])(a0,a1,a2,a3,a4);var _PyUnicode_CopyCharacters=Module["_PyUnicode_CopyCharacters"]=(a0,a1,a2,a3,a4)=>(_PyUnicode_CopyCharacters=Module["_PyUnicode_CopyCharacters"]=wasmExports["PyUnicode_CopyCharacters"])(a0,a1,a2,a3,a4);var _PyUnicode_Resize=Module["_PyUnicode_Resize"]=(a0,a1)=>(_PyUnicode_Resize=Module["_PyUnicode_Resize"]=wasmExports["PyUnicode_Resize"])(a0,a1);var _PyUnicode_FromWideChar=Module["_PyUnicode_FromWideChar"]=(a0,a1)=>(_PyUnicode_FromWideChar=Module["_PyUnicode_FromWideChar"]=wasmExports["PyUnicode_FromWideChar"])(a0,a1);var _PyUnicode_FromKindAndData=Module["_PyUnicode_FromKindAndData"]=(a0,a1,a2)=>(_PyUnicode_FromKindAndData=Module["_PyUnicode_FromKindAndData"]=wasmExports["PyUnicode_FromKindAndData"])(a0,a1,a2);var __PyUnicode_FindMaxChar=Module["__PyUnicode_FindMaxChar"]=(a0,a1,a2)=>(__PyUnicode_FindMaxChar=Module["__PyUnicode_FindMaxChar"]=wasmExports["_PyUnicode_FindMaxChar"])(a0,a1,a2);var _PyUnicode_AsUCS4=Module["_PyUnicode_AsUCS4"]=(a0,a1,a2,a3)=>(_PyUnicode_AsUCS4=Module["_PyUnicode_AsUCS4"]=wasmExports["PyUnicode_AsUCS4"])(a0,a1,a2,a3);var _PyUnicode_AsUCS4Copy=Module["_PyUnicode_AsUCS4Copy"]=a0=>(_PyUnicode_AsUCS4Copy=Module["_PyUnicode_AsUCS4Copy"]=wasmExports["PyUnicode_AsUCS4Copy"])(a0);var _PyUnicode_Fill=Module["_PyUnicode_Fill"]=(a0,a1,a2,a3)=>(_PyUnicode_Fill=Module["_PyUnicode_Fill"]=wasmExports["PyUnicode_Fill"])(a0,a1,a2,a3);var _PyUnicode_AsWideChar=Module["_PyUnicode_AsWideChar"]=(a0,a1,a2)=>(_PyUnicode_AsWideChar=Module["_PyUnicode_AsWideChar"]=wasmExports["PyUnicode_AsWideChar"])(a0,a1,a2);var _PyUnicode_AsWideCharString=Module["_PyUnicode_AsWideCharString"]=(a0,a1)=>(_PyUnicode_AsWideCharString=Module["_PyUnicode_AsWideCharString"]=wasmExports["PyUnicode_AsWideCharString"])(a0,a1);var __PyUnicode_WideCharString_Converter=Module["__PyUnicode_WideCharString_Converter"]=(a0,a1)=>(__PyUnicode_WideCharString_Converter=Module["__PyUnicode_WideCharString_Converter"]=wasmExports["_PyUnicode_WideCharString_Converter"])(a0,a1);var __PyUnicode_WideCharString_Opt_Converter=Module["__PyUnicode_WideCharString_Opt_Converter"]=(a0,a1)=>(__PyUnicode_WideCharString_Opt_Converter=Module["__PyUnicode_WideCharString_Opt_Converter"]=wasmExports["_PyUnicode_WideCharString_Opt_Converter"])(a0,a1);var _PyUnicode_FromOrdinal=Module["_PyUnicode_FromOrdinal"]=a0=>(_PyUnicode_FromOrdinal=Module["_PyUnicode_FromOrdinal"]=wasmExports["PyUnicode_FromOrdinal"])(a0);var _PyUnicode_FromObject=Module["_PyUnicode_FromObject"]=a0=>(_PyUnicode_FromObject=Module["_PyUnicode_FromObject"]=wasmExports["PyUnicode_FromObject"])(a0);var __PyInterpreterState_GetConfig=Module["__PyInterpreterState_GetConfig"]=a0=>(__PyInterpreterState_GetConfig=Module["__PyInterpreterState_GetConfig"]=wasmExports["_PyInterpreterState_GetConfig"])(a0);var __PyCodec_Lookup=Module["__PyCodec_Lookup"]=a0=>(__PyCodec_Lookup=Module["__PyCodec_Lookup"]=wasmExports["_PyCodec_Lookup"])(a0);var _PyCodec_LookupError=Module["_PyCodec_LookupError"]=a0=>(_PyCodec_LookupError=Module["_PyCodec_LookupError"]=wasmExports["PyCodec_LookupError"])(a0);var _PyUnicode_DecodeUTF16Stateful=Module["_PyUnicode_DecodeUTF16Stateful"]=(a0,a1,a2,a3,a4)=>(_PyUnicode_DecodeUTF16Stateful=Module["_PyUnicode_DecodeUTF16Stateful"]=wasmExports["PyUnicode_DecodeUTF16Stateful"])(a0,a1,a2,a3,a4);var _PyUnicode_DecodeUTF32Stateful=Module["_PyUnicode_DecodeUTF32Stateful"]=(a0,a1,a2,a3,a4)=>(_PyUnicode_DecodeUTF32Stateful=Module["_PyUnicode_DecodeUTF32Stateful"]=wasmExports["PyUnicode_DecodeUTF32Stateful"])(a0,a1,a2,a3,a4);var __PyCodec_DecodeText=Module["__PyCodec_DecodeText"]=(a0,a1,a2)=>(__PyCodec_DecodeText=Module["__PyCodec_DecodeText"]=wasmExports["_PyCodec_DecodeText"])(a0,a1,a2);var _PyUnicode_DecodeUTF16=Module["_PyUnicode_DecodeUTF16"]=(a0,a1,a2,a3)=>(_PyUnicode_DecodeUTF16=Module["_PyUnicode_DecodeUTF16"]=wasmExports["PyUnicode_DecodeUTF16"])(a0,a1,a2,a3);var _PyUnicode_DecodeUTF32=Module["_PyUnicode_DecodeUTF32"]=(a0,a1,a2,a3)=>(_PyUnicode_DecodeUTF32=Module["_PyUnicode_DecodeUTF32"]=wasmExports["PyUnicode_DecodeUTF32"])(a0,a1,a2,a3);var _PyUnicode_AsDecodedObject=Module["_PyUnicode_AsDecodedObject"]=(a0,a1,a2)=>(_PyUnicode_AsDecodedObject=Module["_PyUnicode_AsDecodedObject"]=wasmExports["PyUnicode_AsDecodedObject"])(a0,a1,a2);var _PyCodec_Decode=Module["_PyCodec_Decode"]=(a0,a1,a2)=>(_PyCodec_Decode=Module["_PyCodec_Decode"]=wasmExports["PyCodec_Decode"])(a0,a1,a2);var _PyUnicode_AsDecodedUnicode=Module["_PyUnicode_AsDecodedUnicode"]=(a0,a1,a2)=>(_PyUnicode_AsDecodedUnicode=Module["_PyUnicode_AsDecodedUnicode"]=wasmExports["PyUnicode_AsDecodedUnicode"])(a0,a1,a2);var _PyUnicode_AsEncodedObject=Module["_PyUnicode_AsEncodedObject"]=(a0,a1,a2)=>(_PyUnicode_AsEncodedObject=Module["_PyUnicode_AsEncodedObject"]=wasmExports["PyUnicode_AsEncodedObject"])(a0,a1,a2);var _PyCodec_Encode=Module["_PyCodec_Encode"]=(a0,a1,a2)=>(_PyCodec_Encode=Module["_PyCodec_Encode"]=wasmExports["PyCodec_Encode"])(a0,a1,a2);var _PyUnicode_EncodeLocale=Module["_PyUnicode_EncodeLocale"]=(a0,a1)=>(_PyUnicode_EncodeLocale=Module["_PyUnicode_EncodeLocale"]=wasmExports["PyUnicode_EncodeLocale"])(a0,a1);var __Py_EncodeLocaleEx=Module["__Py_EncodeLocaleEx"]=(a0,a1,a2,a3,a4,a5)=>(__Py_EncodeLocaleEx=Module["__Py_EncodeLocaleEx"]=wasmExports["_Py_EncodeLocaleEx"])(a0,a1,a2,a3,a4,a5);var _PyCodec_StrictErrors=Module["_PyCodec_StrictErrors"]=a0=>(_PyCodec_StrictErrors=Module["_PyCodec_StrictErrors"]=wasmExports["PyCodec_StrictErrors"])(a0);var _PyUnicode_EncodeFSDefault=Module["_PyUnicode_EncodeFSDefault"]=a0=>(_PyUnicode_EncodeFSDefault=Module["_PyUnicode_EncodeFSDefault"]=wasmExports["PyUnicode_EncodeFSDefault"])(a0);var __PyUnicode_EncodeUTF16=Module["__PyUnicode_EncodeUTF16"]=(a0,a1,a2)=>(__PyUnicode_EncodeUTF16=Module["__PyUnicode_EncodeUTF16"]=wasmExports["_PyUnicode_EncodeUTF16"])(a0,a1,a2);var __PyUnicode_EncodeUTF32=Module["__PyUnicode_EncodeUTF32"]=(a0,a1,a2)=>(__PyUnicode_EncodeUTF32=Module["__PyUnicode_EncodeUTF32"]=wasmExports["_PyUnicode_EncodeUTF32"])(a0,a1,a2);var __PyCodec_EncodeText=Module["__PyCodec_EncodeText"]=(a0,a1,a2)=>(__PyCodec_EncodeText=Module["__PyCodec_EncodeText"]=wasmExports["_PyCodec_EncodeText"])(a0,a1,a2);var _wcscmp=Module["_wcscmp"]=(a0,a1)=>(_wcscmp=Module["_wcscmp"]=wasmExports["wcscmp"])(a0,a1);var __PyUnicode_AsLatin1String=Module["__PyUnicode_AsLatin1String"]=(a0,a1)=>(__PyUnicode_AsLatin1String=Module["__PyUnicode_AsLatin1String"]=wasmExports["_PyUnicode_AsLatin1String"])(a0,a1);var _PyUnicode_AsEncodedUnicode=Module["_PyUnicode_AsEncodedUnicode"]=(a0,a1,a2)=>(_PyUnicode_AsEncodedUnicode=Module["_PyUnicode_AsEncodedUnicode"]=wasmExports["PyUnicode_AsEncodedUnicode"])(a0,a1,a2);var _PyUnicode_DecodeLocaleAndSize=Module["_PyUnicode_DecodeLocaleAndSize"]=(a0,a1,a2)=>(_PyUnicode_DecodeLocaleAndSize=Module["_PyUnicode_DecodeLocaleAndSize"]=wasmExports["PyUnicode_DecodeLocaleAndSize"])(a0,a1,a2);var __Py_DecodeLocaleEx=Module["__Py_DecodeLocaleEx"]=(a0,a1,a2,a3,a4,a5)=>(__Py_DecodeLocaleEx=Module["__Py_DecodeLocaleEx"]=wasmExports["_Py_DecodeLocaleEx"])(a0,a1,a2,a3,a4,a5);var _PyUnicode_DecodeLocale=Module["_PyUnicode_DecodeLocale"]=(a0,a1)=>(_PyUnicode_DecodeLocale=Module["_PyUnicode_DecodeLocale"]=wasmExports["PyUnicode_DecodeLocale"])(a0,a1);var _PyUnicode_DecodeFSDefaultAndSize=Module["_PyUnicode_DecodeFSDefaultAndSize"]=(a0,a1)=>(_PyUnicode_DecodeFSDefaultAndSize=Module["_PyUnicode_DecodeFSDefaultAndSize"]=wasmExports["PyUnicode_DecodeFSDefaultAndSize"])(a0,a1);var _PyUnicode_FSConverter=Module["_PyUnicode_FSConverter"]=(a0,a1)=>(_PyUnicode_FSConverter=Module["_PyUnicode_FSConverter"]=wasmExports["PyUnicode_FSConverter"])(a0,a1);var _PyOS_FSPath=Module["_PyOS_FSPath"]=a0=>(_PyOS_FSPath=Module["_PyOS_FSPath"]=wasmExports["PyOS_FSPath"])(a0);var _PyUnicode_FSDecoder=Module["_PyUnicode_FSDecoder"]=(a0,a1)=>(_PyUnicode_FSDecoder=Module["_PyUnicode_FSDecoder"]=wasmExports["PyUnicode_FSDecoder"])(a0,a1);var _wmemchr=Module["_wmemchr"]=(a0,a1,a2)=>(_wmemchr=Module["_wmemchr"]=wasmExports["wmemchr"])(a0,a1,a2);var _PyUnicode_GetSize=Module["_PyUnicode_GetSize"]=a0=>(_PyUnicode_GetSize=Module["_PyUnicode_GetSize"]=wasmExports["PyUnicode_GetSize"])(a0);var _PyUnicode_WriteChar=Module["_PyUnicode_WriteChar"]=(a0,a1,a2)=>(_PyUnicode_WriteChar=Module["_PyUnicode_WriteChar"]=wasmExports["PyUnicode_WriteChar"])(a0,a1,a2);var _PyUnicode_DecodeUTF7=Module["_PyUnicode_DecodeUTF7"]=(a0,a1,a2)=>(_PyUnicode_DecodeUTF7=Module["_PyUnicode_DecodeUTF7"]=wasmExports["PyUnicode_DecodeUTF7"])(a0,a1,a2);var _PyUnicode_DecodeUTF7Stateful=Module["_PyUnicode_DecodeUTF7Stateful"]=(a0,a1,a2,a3)=>(_PyUnicode_DecodeUTF7Stateful=Module["_PyUnicode_DecodeUTF7Stateful"]=wasmExports["PyUnicode_DecodeUTF7Stateful"])(a0,a1,a2,a3);var __PyUnicode_EncodeUTF7=Module["__PyUnicode_EncodeUTF7"]=(a0,a1,a2,a3)=>(__PyUnicode_EncodeUTF7=Module["__PyUnicode_EncodeUTF7"]=wasmExports["_PyUnicode_EncodeUTF7"])(a0,a1,a2,a3);var __Py_DecodeUTF8Ex=Module["__Py_DecodeUTF8Ex"]=(a0,a1,a2,a3,a4,a5)=>(__Py_DecodeUTF8Ex=Module["__Py_DecodeUTF8Ex"]=wasmExports["_Py_DecodeUTF8Ex"])(a0,a1,a2,a3,a4,a5);var __Py_DecodeUTF8_surrogateescape=Module["__Py_DecodeUTF8_surrogateescape"]=(a0,a1,a2)=>(__Py_DecodeUTF8_surrogateescape=Module["__Py_DecodeUTF8_surrogateescape"]=wasmExports["_Py_DecodeUTF8_surrogateescape"])(a0,a1,a2);var __Py_EncodeUTF8Ex=Module["__Py_EncodeUTF8Ex"]=(a0,a1,a2,a3,a4,a5)=>(__Py_EncodeUTF8Ex=Module["__Py_EncodeUTF8Ex"]=wasmExports["_Py_EncodeUTF8Ex"])(a0,a1,a2,a3,a4,a5);var _PyUnicode_AsUTF32String=Module["_PyUnicode_AsUTF32String"]=a0=>(_PyUnicode_AsUTF32String=Module["_PyUnicode_AsUTF32String"]=wasmExports["PyUnicode_AsUTF32String"])(a0);var _PyUnicode_AsUTF16String=Module["_PyUnicode_AsUTF16String"]=a0=>(_PyUnicode_AsUTF16String=Module["_PyUnicode_AsUTF16String"]=wasmExports["PyUnicode_AsUTF16String"])(a0);var __PyUnicode_DecodeUnicodeEscapeStateful=Module["__PyUnicode_DecodeUnicodeEscapeStateful"]=(a0,a1,a2,a3)=>(__PyUnicode_DecodeUnicodeEscapeStateful=Module["__PyUnicode_DecodeUnicodeEscapeStateful"]=wasmExports["_PyUnicode_DecodeUnicodeEscapeStateful"])(a0,a1,a2,a3);var _PyUnicode_DecodeUnicodeEscape=Module["_PyUnicode_DecodeUnicodeEscape"]=(a0,a1,a2)=>(_PyUnicode_DecodeUnicodeEscape=Module["_PyUnicode_DecodeUnicodeEscape"]=wasmExports["PyUnicode_DecodeUnicodeEscape"])(a0,a1,a2);var _PyUnicode_AsUnicodeEscapeString=Module["_PyUnicode_AsUnicodeEscapeString"]=a0=>(_PyUnicode_AsUnicodeEscapeString=Module["_PyUnicode_AsUnicodeEscapeString"]=wasmExports["PyUnicode_AsUnicodeEscapeString"])(a0);var __PyUnicode_DecodeRawUnicodeEscapeStateful=Module["__PyUnicode_DecodeRawUnicodeEscapeStateful"]=(a0,a1,a2,a3)=>(__PyUnicode_DecodeRawUnicodeEscapeStateful=Module["__PyUnicode_DecodeRawUnicodeEscapeStateful"]=wasmExports["_PyUnicode_DecodeRawUnicodeEscapeStateful"])(a0,a1,a2,a3);var _PyUnicode_DecodeRawUnicodeEscape=Module["_PyUnicode_DecodeRawUnicodeEscape"]=(a0,a1,a2)=>(_PyUnicode_DecodeRawUnicodeEscape=Module["_PyUnicode_DecodeRawUnicodeEscape"]=wasmExports["PyUnicode_DecodeRawUnicodeEscape"])(a0,a1,a2);var _PyUnicode_AsRawUnicodeEscapeString=Module["_PyUnicode_AsRawUnicodeEscapeString"]=a0=>(_PyUnicode_AsRawUnicodeEscapeString=Module["_PyUnicode_AsRawUnicodeEscapeString"]=wasmExports["PyUnicode_AsRawUnicodeEscapeString"])(a0);var _PyUnicode_AsLatin1String=Module["_PyUnicode_AsLatin1String"]=a0=>(_PyUnicode_AsLatin1String=Module["_PyUnicode_AsLatin1String"]=wasmExports["PyUnicode_AsLatin1String"])(a0);var __PyUnicodeWriter_PrepareKindInternal=Module["__PyUnicodeWriter_PrepareKindInternal"]=(a0,a1)=>(__PyUnicodeWriter_PrepareKindInternal=Module["__PyUnicodeWriter_PrepareKindInternal"]=wasmExports["_PyUnicodeWriter_PrepareKindInternal"])(a0,a1);var _PyUnicode_DecodeCharmap=Module["_PyUnicode_DecodeCharmap"]=(a0,a1,a2,a3)=>(_PyUnicode_DecodeCharmap=Module["_PyUnicode_DecodeCharmap"]=wasmExports["PyUnicode_DecodeCharmap"])(a0,a1,a2,a3);var _PyUnicode_BuildEncodingMap=Module["_PyUnicode_BuildEncodingMap"]=a0=>(_PyUnicode_BuildEncodingMap=Module["_PyUnicode_BuildEncodingMap"]=wasmExports["PyUnicode_BuildEncodingMap"])(a0);var __PyUnicode_EncodeCharmap=Module["__PyUnicode_EncodeCharmap"]=(a0,a1,a2)=>(__PyUnicode_EncodeCharmap=Module["__PyUnicode_EncodeCharmap"]=wasmExports["_PyUnicode_EncodeCharmap"])(a0,a1,a2);var _PyUnicode_AsCharmapString=Module["_PyUnicode_AsCharmapString"]=(a0,a1)=>(_PyUnicode_AsCharmapString=Module["_PyUnicode_AsCharmapString"]=wasmExports["PyUnicode_AsCharmapString"])(a0,a1);var _PyUnicode_Translate=Module["_PyUnicode_Translate"]=(a0,a1,a2)=>(_PyUnicode_Translate=Module["_PyUnicode_Translate"]=wasmExports["PyUnicode_Translate"])(a0,a1,a2);var __PyUnicode_IsWhitespace=Module["__PyUnicode_IsWhitespace"]=a0=>(__PyUnicode_IsWhitespace=Module["__PyUnicode_IsWhitespace"]=wasmExports["_PyUnicode_IsWhitespace"])(a0);var __PyUnicode_ToDecimalDigit=Module["__PyUnicode_ToDecimalDigit"]=a0=>(__PyUnicode_ToDecimalDigit=Module["__PyUnicode_ToDecimalDigit"]=wasmExports["_PyUnicode_ToDecimalDigit"])(a0);var __PyUnicode_InsertThousandsGrouping=Module["__PyUnicode_InsertThousandsGrouping"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8)=>(__PyUnicode_InsertThousandsGrouping=Module["__PyUnicode_InsertThousandsGrouping"]=wasmExports["_PyUnicode_InsertThousandsGrouping"])(a0,a1,a2,a3,a4,a5,a6,a7,a8);var _PyUnicode_Count=Module["_PyUnicode_Count"]=(a0,a1,a2,a3)=>(_PyUnicode_Count=Module["_PyUnicode_Count"]=wasmExports["PyUnicode_Count"])(a0,a1,a2,a3);var _PyUnicode_Find=Module["_PyUnicode_Find"]=(a0,a1,a2,a3,a4)=>(_PyUnicode_Find=Module["_PyUnicode_Find"]=wasmExports["PyUnicode_Find"])(a0,a1,a2,a3,a4);var _PyUnicode_FindChar=Module["_PyUnicode_FindChar"]=(a0,a1,a2,a3,a4)=>(_PyUnicode_FindChar=Module["_PyUnicode_FindChar"]=wasmExports["PyUnicode_FindChar"])(a0,a1,a2,a3,a4);var _PyUnicode_Tailmatch=Module["_PyUnicode_Tailmatch"]=(a0,a1,a2,a3,a4)=>(_PyUnicode_Tailmatch=Module["_PyUnicode_Tailmatch"]=wasmExports["PyUnicode_Tailmatch"])(a0,a1,a2,a3,a4);var __PyUnicode_JoinArray=Module["__PyUnicode_JoinArray"]=(a0,a1,a2)=>(__PyUnicode_JoinArray=Module["__PyUnicode_JoinArray"]=wasmExports["_PyUnicode_JoinArray"])(a0,a1,a2);var __PyUnicode_FastFill=Module["__PyUnicode_FastFill"]=(a0,a1,a2,a3)=>(__PyUnicode_FastFill=Module["__PyUnicode_FastFill"]=wasmExports["_PyUnicode_FastFill"])(a0,a1,a2,a3);var _PyUnicode_Splitlines=Module["_PyUnicode_Splitlines"]=(a0,a1)=>(_PyUnicode_Splitlines=Module["_PyUnicode_Splitlines"]=wasmExports["PyUnicode_Splitlines"])(a0,a1);var __PyUnicode_IsLinebreak=Module["__PyUnicode_IsLinebreak"]=a0=>(__PyUnicode_IsLinebreak=Module["__PyUnicode_IsLinebreak"]=wasmExports["_PyUnicode_IsLinebreak"])(a0);var _wmemcmp=Module["_wmemcmp"]=(a0,a1,a2)=>(_wmemcmp=Module["_wmemcmp"]=wasmExports["wmemcmp"])(a0,a1,a2);var __PyUnicode_EqualToASCIIId=Module["__PyUnicode_EqualToASCIIId"]=(a0,a1)=>(__PyUnicode_EqualToASCIIId=Module["__PyUnicode_EqualToASCIIId"]=wasmExports["_PyUnicode_EqualToASCIIId"])(a0,a1);var _PyUnicode_RichCompare=Module["_PyUnicode_RichCompare"]=(a0,a1,a2)=>(_PyUnicode_RichCompare=Module["_PyUnicode_RichCompare"]=wasmExports["PyUnicode_RichCompare"])(a0,a1,a2);var _PyUnicode_Contains=Module["_PyUnicode_Contains"]=(a0,a1)=>(_PyUnicode_Contains=Module["_PyUnicode_Contains"]=wasmExports["PyUnicode_Contains"])(a0,a1);var _PyUnicode_Concat=Module["_PyUnicode_Concat"]=(a0,a1)=>(_PyUnicode_Concat=Module["_PyUnicode_Concat"]=wasmExports["PyUnicode_Concat"])(a0,a1);var _PyUnicode_Append=Module["_PyUnicode_Append"]=(a0,a1)=>(_PyUnicode_Append=Module["_PyUnicode_Append"]=wasmExports["PyUnicode_Append"])(a0,a1);var _PyUnicode_AppendAndDel=Module["_PyUnicode_AppendAndDel"]=(a0,a1)=>(_PyUnicode_AppendAndDel=Module["_PyUnicode_AppendAndDel"]=wasmExports["PyUnicode_AppendAndDel"])(a0,a1);var __PyUnicode_IsXidStart=Module["__PyUnicode_IsXidStart"]=a0=>(__PyUnicode_IsXidStart=Module["__PyUnicode_IsXidStart"]=wasmExports["_PyUnicode_IsXidStart"])(a0);var __PyUnicode_IsXidContinue=Module["__PyUnicode_IsXidContinue"]=a0=>(__PyUnicode_IsXidContinue=Module["__PyUnicode_IsXidContinue"]=wasmExports["_PyUnicode_IsXidContinue"])(a0);var __PyUnicode_XStrip=Module["__PyUnicode_XStrip"]=(a0,a1,a2)=>(__PyUnicode_XStrip=Module["__PyUnicode_XStrip"]=wasmExports["_PyUnicode_XStrip"])(a0,a1,a2);var _PyUnicode_Replace=Module["_PyUnicode_Replace"]=(a0,a1,a2,a3)=>(_PyUnicode_Replace=Module["_PyUnicode_Replace"]=wasmExports["PyUnicode_Replace"])(a0,a1,a2,a3);var _PyUnicode_Split=Module["_PyUnicode_Split"]=(a0,a1,a2)=>(_PyUnicode_Split=Module["_PyUnicode_Split"]=wasmExports["PyUnicode_Split"])(a0,a1,a2);var _PyUnicode_Partition=Module["_PyUnicode_Partition"]=(a0,a1)=>(_PyUnicode_Partition=Module["_PyUnicode_Partition"]=wasmExports["PyUnicode_Partition"])(a0,a1);var _PyUnicode_RPartition=Module["_PyUnicode_RPartition"]=(a0,a1)=>(_PyUnicode_RPartition=Module["_PyUnicode_RPartition"]=wasmExports["PyUnicode_RPartition"])(a0,a1);var _PyUnicode_RSplit=Module["_PyUnicode_RSplit"]=(a0,a1,a2)=>(_PyUnicode_RSplit=Module["_PyUnicode_RSplit"]=wasmExports["PyUnicode_RSplit"])(a0,a1,a2);var __PyUnicodeWriter_WriteSubstring=Module["__PyUnicodeWriter_WriteSubstring"]=(a0,a1,a2,a3)=>(__PyUnicodeWriter_WriteSubstring=Module["__PyUnicodeWriter_WriteSubstring"]=wasmExports["_PyUnicodeWriter_WriteSubstring"])(a0,a1,a2,a3);var __PyUnicodeWriter_WriteLatin1String=Module["__PyUnicodeWriter_WriteLatin1String"]=(a0,a1,a2)=>(__PyUnicodeWriter_WriteLatin1String=Module["__PyUnicodeWriter_WriteLatin1String"]=wasmExports["_PyUnicodeWriter_WriteLatin1String"])(a0,a1,a2);var _PyUnicode_Format=Module["_PyUnicode_Format"]=(a0,a1)=>(_PyUnicode_Format=Module["_PyUnicode_Format"]=wasmExports["PyUnicode_Format"])(a0,a1);var __Py_hashtable_new_full=Module["__Py_hashtable_new_full"]=(a0,a1,a2,a3,a4)=>(__Py_hashtable_new_full=Module["__Py_hashtable_new_full"]=wasmExports["_Py_hashtable_new_full"])(a0,a1,a2,a3,a4);var __Py_hashtable_get=Module["__Py_hashtable_get"]=(a0,a1)=>(__Py_hashtable_get=Module["__Py_hashtable_get"]=wasmExports["_Py_hashtable_get"])(a0,a1);var __Py_hashtable_set=Module["__Py_hashtable_set"]=(a0,a1,a2)=>(__Py_hashtable_set=Module["__Py_hashtable_set"]=wasmExports["_Py_hashtable_set"])(a0,a1,a2);var _PyUnicode_InternImmortal=Module["_PyUnicode_InternImmortal"]=a0=>(_PyUnicode_InternImmortal=Module["_PyUnicode_InternImmortal"]=wasmExports["PyUnicode_InternImmortal"])(a0);var __Py_hashtable_destroy=Module["__Py_hashtable_destroy"]=a0=>(__Py_hashtable_destroy=Module["__Py_hashtable_destroy"]=wasmExports["_Py_hashtable_destroy"])(a0);var _PyInit__string=Module["_PyInit__string"]=()=>(_PyInit__string=Module["_PyInit__string"]=wasmExports["PyInit__string"])();var __PyUnicode_IsLowercase=Module["__PyUnicode_IsLowercase"]=a0=>(__PyUnicode_IsLowercase=Module["__PyUnicode_IsLowercase"]=wasmExports["_PyUnicode_IsLowercase"])(a0);var __PyUnicode_IsUppercase=Module["__PyUnicode_IsUppercase"]=a0=>(__PyUnicode_IsUppercase=Module["__PyUnicode_IsUppercase"]=wasmExports["_PyUnicode_IsUppercase"])(a0);var __PyUnicode_IsTitlecase=Module["__PyUnicode_IsTitlecase"]=a0=>(__PyUnicode_IsTitlecase=Module["__PyUnicode_IsTitlecase"]=wasmExports["_PyUnicode_IsTitlecase"])(a0);var __PyUnicode_IsDecimalDigit=Module["__PyUnicode_IsDecimalDigit"]=a0=>(__PyUnicode_IsDecimalDigit=Module["__PyUnicode_IsDecimalDigit"]=wasmExports["_PyUnicode_IsDecimalDigit"])(a0);var __PyUnicode_IsDigit=Module["__PyUnicode_IsDigit"]=a0=>(__PyUnicode_IsDigit=Module["__PyUnicode_IsDigit"]=wasmExports["_PyUnicode_IsDigit"])(a0);var __PyUnicode_IsNumeric=Module["__PyUnicode_IsNumeric"]=a0=>(__PyUnicode_IsNumeric=Module["__PyUnicode_IsNumeric"]=wasmExports["_PyUnicode_IsNumeric"])(a0);var __PyUnicode_IsAlpha=Module["__PyUnicode_IsAlpha"]=a0=>(__PyUnicode_IsAlpha=Module["__PyUnicode_IsAlpha"]=wasmExports["_PyUnicode_IsAlpha"])(a0);var __PyUnicode_FormatAdvancedWriter=Module["__PyUnicode_FormatAdvancedWriter"]=(a0,a1,a2,a3,a4)=>(__PyUnicode_FormatAdvancedWriter=Module["__PyUnicode_FormatAdvancedWriter"]=wasmExports["_PyUnicode_FormatAdvancedWriter"])(a0,a1,a2,a3,a4);var __PyUnicode_ToTitleFull=Module["__PyUnicode_ToTitleFull"]=(a0,a1)=>(__PyUnicode_ToTitleFull=Module["__PyUnicode_ToTitleFull"]=wasmExports["_PyUnicode_ToTitleFull"])(a0,a1);var __PyUnicode_IsCaseIgnorable=Module["__PyUnicode_IsCaseIgnorable"]=a0=>(__PyUnicode_IsCaseIgnorable=Module["__PyUnicode_IsCaseIgnorable"]=wasmExports["_PyUnicode_IsCaseIgnorable"])(a0);var __PyUnicode_IsCased=Module["__PyUnicode_IsCased"]=a0=>(__PyUnicode_IsCased=Module["__PyUnicode_IsCased"]=wasmExports["_PyUnicode_IsCased"])(a0);var __PyUnicode_ToLowerFull=Module["__PyUnicode_ToLowerFull"]=(a0,a1)=>(__PyUnicode_ToLowerFull=Module["__PyUnicode_ToLowerFull"]=wasmExports["_PyUnicode_ToLowerFull"])(a0,a1);var __PyUnicode_ToFoldedFull=Module["__PyUnicode_ToFoldedFull"]=(a0,a1)=>(__PyUnicode_ToFoldedFull=Module["__PyUnicode_ToFoldedFull"]=wasmExports["_PyUnicode_ToFoldedFull"])(a0,a1);var __PyUnicode_ToUpperFull=Module["__PyUnicode_ToUpperFull"]=(a0,a1)=>(__PyUnicode_ToUpperFull=Module["__PyUnicode_ToUpperFull"]=wasmExports["_PyUnicode_ToUpperFull"])(a0,a1);var __PyUnicode_ToNumeric=Module["__PyUnicode_ToNumeric"]=a0=>(__PyUnicode_ToNumeric=Module["__PyUnicode_ToNumeric"]=wasmExports["_PyUnicode_ToNumeric"])(a0);var __PyUnicode_ToTitlecase=Module["__PyUnicode_ToTitlecase"]=a0=>(__PyUnicode_ToTitlecase=Module["__PyUnicode_ToTitlecase"]=wasmExports["_PyUnicode_ToTitlecase"])(a0);var __PyUnicode_ToDigit=Module["__PyUnicode_ToDigit"]=a0=>(__PyUnicode_ToDigit=Module["__PyUnicode_ToDigit"]=wasmExports["_PyUnicode_ToDigit"])(a0);var __PyUnicode_ToUppercase=Module["__PyUnicode_ToUppercase"]=a0=>(__PyUnicode_ToUppercase=Module["__PyUnicode_ToUppercase"]=wasmExports["_PyUnicode_ToUppercase"])(a0);var __PyUnicode_ToLowercase=Module["__PyUnicode_ToLowercase"]=a0=>(__PyUnicode_ToLowercase=Module["__PyUnicode_ToLowercase"]=wasmExports["_PyUnicode_ToLowercase"])(a0);var __PyWeakref_GetWeakrefCount=Module["__PyWeakref_GetWeakrefCount"]=a0=>(__PyWeakref_GetWeakrefCount=Module["__PyWeakref_GetWeakrefCount"]=wasmExports["_PyWeakref_GetWeakrefCount"])(a0);var _PyWeakref_NewProxy=Module["_PyWeakref_NewProxy"]=(a0,a1)=>(_PyWeakref_NewProxy=Module["_PyWeakref_NewProxy"]=wasmExports["PyWeakref_NewProxy"])(a0,a1);var _PyWeakref_GetObject=Module["_PyWeakref_GetObject"]=a0=>(_PyWeakref_GetObject=Module["_PyWeakref_GetObject"]=wasmExports["PyWeakref_GetObject"])(a0);var _PyErr_ResourceWarning=Module["_PyErr_ResourceWarning"]=(a0,a1,a2,a3)=>(_PyErr_ResourceWarning=Module["_PyErr_ResourceWarning"]=wasmExports["PyErr_ResourceWarning"])(a0,a1,a2,a3);var _PyErr_WarnExplicit=Module["_PyErr_WarnExplicit"]=(a0,a1,a2,a3,a4,a5)=>(_PyErr_WarnExplicit=Module["_PyErr_WarnExplicit"]=wasmExports["PyErr_WarnExplicit"])(a0,a1,a2,a3,a4,a5);var _PyErr_WarnExplicitFormat=Module["_PyErr_WarnExplicitFormat"]=(a0,a1,a2,a3,a4,a5,a6)=>(_PyErr_WarnExplicitFormat=Module["_PyErr_WarnExplicitFormat"]=wasmExports["PyErr_WarnExplicitFormat"])(a0,a1,a2,a3,a4,a5,a6);var __Py_IsInterpreterFinalizing=Module["__Py_IsInterpreterFinalizing"]=a0=>(__Py_IsInterpreterFinalizing=Module["__Py_IsInterpreterFinalizing"]=wasmExports["_Py_IsInterpreterFinalizing"])(a0);var __PyWarnings_Init=Module["__PyWarnings_Init"]=()=>(__PyWarnings_Init=Module["__PyWarnings_Init"]=wasmExports["_PyWarnings_Init"])();var _PyThreadState_GetFrame=Module["_PyThreadState_GetFrame"]=a0=>(_PyThreadState_GetFrame=Module["_PyThreadState_GetFrame"]=wasmExports["PyThreadState_GetFrame"])(a0);var __PySys_GetAttr=Module["__PySys_GetAttr"]=(a0,a1)=>(__PySys_GetAttr=Module["__PySys_GetAttr"]=wasmExports["_PySys_GetAttr"])(a0,a1);var __Py_DisplaySourceLine=Module["__Py_DisplaySourceLine"]=(a0,a1,a2,a3,a4,a5)=>(__Py_DisplaySourceLine=Module["__Py_DisplaySourceLine"]=wasmExports["_Py_DisplaySourceLine"])(a0,a1,a2,a3,a4,a5);var _PyModule_AddObjectRef=Module["_PyModule_AddObjectRef"]=(a0,a1,a2)=>(_PyModule_AddObjectRef=Module["_PyModule_AddObjectRef"]=wasmExports["PyModule_AddObjectRef"])(a0,a1,a2);var _PyInit__ast=Module["_PyInit__ast"]=()=>(_PyInit__ast=Module["_PyInit__ast"]=wasmExports["PyInit__ast"])();var _PyModule_AddIntConstant=Module["_PyModule_AddIntConstant"]=(a0,a1,a2)=>(_PyModule_AddIntConstant=Module["_PyModule_AddIntConstant"]=wasmExports["PyModule_AddIntConstant"])(a0,a1,a2);var _PyInit__tokenize=Module["_PyInit__tokenize"]=()=>(_PyInit__tokenize=Module["_PyInit__tokenize"]=wasmExports["PyInit__tokenize"])();var _PyModule_AddType=Module["_PyModule_AddType"]=(a0,a1)=>(_PyModule_AddType=Module["_PyModule_AddType"]=wasmExports["PyModule_AddType"])(a0,a1);var _PyErr_SyntaxLocationObject=Module["_PyErr_SyntaxLocationObject"]=(a0,a1,a2)=>(_PyErr_SyntaxLocationObject=Module["_PyErr_SyntaxLocationObject"]=wasmExports["PyErr_SyntaxLocationObject"])(a0,a1,a2);var _snprintf=Module["_snprintf"]=(a0,a1,a2,a3)=>(_snprintf=Module["_snprintf"]=wasmExports["snprintf"])(a0,a1,a2,a3);var _PyImport_ImportModuleLevelObject=Module["_PyImport_ImportModuleLevelObject"]=(a0,a1,a2,a3,a4)=>(_PyImport_ImportModuleLevelObject=Module["_PyImport_ImportModuleLevelObject"]=wasmExports["PyImport_ImportModuleLevelObject"])(a0,a1,a2,a3,a4);var _PyEval_MergeCompilerFlags=Module["_PyEval_MergeCompilerFlags"]=a0=>(_PyEval_MergeCompilerFlags=Module["_PyEval_MergeCompilerFlags"]=wasmExports["PyEval_MergeCompilerFlags"])(a0);var __PyArena_New=Module["__PyArena_New"]=()=>(__PyArena_New=Module["__PyArena_New"]=wasmExports["_PyArena_New"])();var __PyArena_Free=Module["__PyArena_Free"]=a0=>(__PyArena_Free=Module["__PyArena_Free"]=wasmExports["_PyArena_Free"])(a0);var __PyAST_Compile=Module["__PyAST_Compile"]=(a0,a1,a2,a3,a4)=>(__PyAST_Compile=Module["__PyAST_Compile"]=wasmExports["_PyAST_Compile"])(a0,a1,a2,a3,a4);var __Py_SourceAsString=Module["__Py_SourceAsString"]=(a0,a1,a2,a3,a4)=>(__Py_SourceAsString=Module["__Py_SourceAsString"]=wasmExports["_Py_SourceAsString"])(a0,a1,a2,a3,a4);var _Py_CompileStringObject=Module["_Py_CompileStringObject"]=(a0,a1,a2,a3,a4)=>(_Py_CompileStringObject=Module["_Py_CompileStringObject"]=wasmExports["Py_CompileStringObject"])(a0,a1,a2,a3,a4);var _PyEval_GetBuiltins=Module["_PyEval_GetBuiltins"]=()=>(_PyEval_GetBuiltins=Module["_PyEval_GetBuiltins"]=wasmExports["PyEval_GetBuiltins"])();var _PyEval_EvalCode=Module["_PyEval_EvalCode"]=(a0,a1,a2)=>(_PyEval_EvalCode=Module["_PyEval_EvalCode"]=wasmExports["PyEval_EvalCode"])(a0,a1,a2);var _PyRun_StringFlags=Module["_PyRun_StringFlags"]=(a0,a1,a2,a3,a4)=>(_PyRun_StringFlags=Module["_PyRun_StringFlags"]=wasmExports["PyRun_StringFlags"])(a0,a1,a2,a3,a4);var _PyEval_EvalCodeEx=Module["_PyEval_EvalCodeEx"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)=>(_PyEval_EvalCodeEx=Module["_PyEval_EvalCodeEx"]=wasmExports["PyEval_EvalCodeEx"])(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);var _Py_GetRecursionLimit=Module["_Py_GetRecursionLimit"]=()=>(_Py_GetRecursionLimit=Module["_Py_GetRecursionLimit"]=wasmExports["Py_GetRecursionLimit"])();var _Py_SetRecursionLimit=Module["_Py_SetRecursionLimit"]=a0=>(_Py_SetRecursionLimit=Module["_Py_SetRecursionLimit"]=wasmExports["Py_SetRecursionLimit"])(a0);var _PyEval_EvalFrame=Module["_PyEval_EvalFrame"]=a0=>(_PyEval_EvalFrame=Module["_PyEval_EvalFrame"]=wasmExports["PyEval_EvalFrame"])(a0);var _PyEval_EvalFrameEx=Module["_PyEval_EvalFrameEx"]=(a0,a1)=>(_PyEval_EvalFrameEx=Module["_PyEval_EvalFrameEx"]=wasmExports["PyEval_EvalFrameEx"])(a0,a1);var _PyTraceBack_Here=Module["_PyTraceBack_Here"]=a0=>(_PyTraceBack_Here=Module["_PyTraceBack_Here"]=wasmExports["PyTraceBack_Here"])(a0);var _PyErr_SetHandledException=Module["_PyErr_SetHandledException"]=a0=>(_PyErr_SetHandledException=Module["_PyErr_SetHandledException"]=wasmExports["PyErr_SetHandledException"])(a0);var __PyErr_GetTopmostException=Module["__PyErr_GetTopmostException"]=a0=>(__PyErr_GetTopmostException=Module["__PyErr_GetTopmostException"]=wasmExports["_PyErr_GetTopmostException"])(a0);var __PyErr_SetObject=Module["__PyErr_SetObject"]=(a0,a1,a2)=>(__PyErr_SetObject=Module["__PyErr_SetObject"]=wasmExports["_PyErr_SetObject"])(a0,a1,a2);var _PyThreadState_EnterTracing=Module["_PyThreadState_EnterTracing"]=a0=>(_PyThreadState_EnterTracing=Module["_PyThreadState_EnterTracing"]=wasmExports["PyThreadState_EnterTracing"])(a0);var _PyThreadState_LeaveTracing=Module["_PyThreadState_LeaveTracing"]=a0=>(_PyThreadState_LeaveTracing=Module["_PyThreadState_LeaveTracing"]=wasmExports["PyThreadState_LeaveTracing"])(a0);var _PyEval_SetProfile=Module["_PyEval_SetProfile"]=(a0,a1)=>(_PyEval_SetProfile=Module["_PyEval_SetProfile"]=wasmExports["PyEval_SetProfile"])(a0,a1);var __PyEval_SetProfile=Module["__PyEval_SetProfile"]=(a0,a1,a2)=>(__PyEval_SetProfile=Module["__PyEval_SetProfile"]=wasmExports["_PyEval_SetProfile"])(a0,a1,a2);var __PyErr_WriteUnraisableMsg=Module["__PyErr_WriteUnraisableMsg"]=(a0,a1)=>(__PyErr_WriteUnraisableMsg=Module["__PyErr_WriteUnraisableMsg"]=wasmExports["_PyErr_WriteUnraisableMsg"])(a0,a1);var _PyEval_SetProfileAllThreads=Module["_PyEval_SetProfileAllThreads"]=(a0,a1)=>(_PyEval_SetProfileAllThreads=Module["_PyEval_SetProfileAllThreads"]=wasmExports["PyEval_SetProfileAllThreads"])(a0,a1);var _PyInterpreterState_ThreadHead=Module["_PyInterpreterState_ThreadHead"]=a0=>(_PyInterpreterState_ThreadHead=Module["_PyInterpreterState_ThreadHead"]=wasmExports["PyInterpreterState_ThreadHead"])(a0);var _PyThreadState_Next=Module["_PyThreadState_Next"]=a0=>(_PyThreadState_Next=Module["_PyThreadState_Next"]=wasmExports["PyThreadState_Next"])(a0);var _PyEval_SetTrace=Module["_PyEval_SetTrace"]=(a0,a1)=>(_PyEval_SetTrace=Module["_PyEval_SetTrace"]=wasmExports["PyEval_SetTrace"])(a0,a1);var __PyEval_SetTrace=Module["__PyEval_SetTrace"]=(a0,a1,a2)=>(__PyEval_SetTrace=Module["__PyEval_SetTrace"]=wasmExports["_PyEval_SetTrace"])(a0,a1,a2);var _PyEval_SetTraceAllThreads=Module["_PyEval_SetTraceAllThreads"]=(a0,a1)=>(_PyEval_SetTraceAllThreads=Module["_PyEval_SetTraceAllThreads"]=wasmExports["PyEval_SetTraceAllThreads"])(a0,a1);var _PyEval_GetFrame=Module["_PyEval_GetFrame"]=()=>(_PyEval_GetFrame=Module["_PyEval_GetFrame"]=wasmExports["PyEval_GetFrame"])();var __PyEval_GetBuiltinId=Module["__PyEval_GetBuiltinId"]=a0=>(__PyEval_GetBuiltinId=Module["__PyEval_GetBuiltinId"]=wasmExports["_PyEval_GetBuiltinId"])(a0);var _PyEval_GetLocals=Module["_PyEval_GetLocals"]=()=>(_PyEval_GetLocals=Module["_PyEval_GetLocals"]=wasmExports["PyEval_GetLocals"])();var _PyEval_GetFuncName=Module["_PyEval_GetFuncName"]=a0=>(_PyEval_GetFuncName=Module["_PyEval_GetFuncName"]=wasmExports["PyEval_GetFuncName"])(a0);var _PyEval_GetFuncDesc=Module["_PyEval_GetFuncDesc"]=a0=>(_PyEval_GetFuncDesc=Module["_PyEval_GetFuncDesc"]=wasmExports["PyEval_GetFuncDesc"])(a0);var _PyUnstable_Eval_RequestCodeExtraIndex=Module["_PyUnstable_Eval_RequestCodeExtraIndex"]=a0=>(_PyUnstable_Eval_RequestCodeExtraIndex=Module["_PyUnstable_Eval_RequestCodeExtraIndex"]=wasmExports["PyUnstable_Eval_RequestCodeExtraIndex"])(a0);var _PyCodec_Register=Module["_PyCodec_Register"]=a0=>(_PyCodec_Register=Module["_PyCodec_Register"]=wasmExports["PyCodec_Register"])(a0);var _PyCodec_Unregister=Module["_PyCodec_Unregister"]=a0=>(_PyCodec_Unregister=Module["_PyCodec_Unregister"]=wasmExports["PyCodec_Unregister"])(a0);var _PyCodec_KnownEncoding=Module["_PyCodec_KnownEncoding"]=a0=>(_PyCodec_KnownEncoding=Module["_PyCodec_KnownEncoding"]=wasmExports["PyCodec_KnownEncoding"])(a0);var __PyCodecInfo_GetIncrementalDecoder=Module["__PyCodecInfo_GetIncrementalDecoder"]=(a0,a1)=>(__PyCodecInfo_GetIncrementalDecoder=Module["__PyCodecInfo_GetIncrementalDecoder"]=wasmExports["_PyCodecInfo_GetIncrementalDecoder"])(a0,a1);var __PyCodecInfo_GetIncrementalEncoder=Module["__PyCodecInfo_GetIncrementalEncoder"]=(a0,a1)=>(__PyCodecInfo_GetIncrementalEncoder=Module["__PyCodecInfo_GetIncrementalEncoder"]=wasmExports["_PyCodecInfo_GetIncrementalEncoder"])(a0,a1);var _PyCodec_Encoder=Module["_PyCodec_Encoder"]=a0=>(_PyCodec_Encoder=Module["_PyCodec_Encoder"]=wasmExports["PyCodec_Encoder"])(a0);var _PyCodec_Decoder=Module["_PyCodec_Decoder"]=a0=>(_PyCodec_Decoder=Module["_PyCodec_Decoder"]=wasmExports["PyCodec_Decoder"])(a0);var _PyCodec_IncrementalEncoder=Module["_PyCodec_IncrementalEncoder"]=(a0,a1)=>(_PyCodec_IncrementalEncoder=Module["_PyCodec_IncrementalEncoder"]=wasmExports["PyCodec_IncrementalEncoder"])(a0,a1);var _PyCodec_IncrementalDecoder=Module["_PyCodec_IncrementalDecoder"]=(a0,a1)=>(_PyCodec_IncrementalDecoder=Module["_PyCodec_IncrementalDecoder"]=wasmExports["PyCodec_IncrementalDecoder"])(a0,a1);var _PyCodec_StreamReader=Module["_PyCodec_StreamReader"]=(a0,a1,a2)=>(_PyCodec_StreamReader=Module["_PyCodec_StreamReader"]=wasmExports["PyCodec_StreamReader"])(a0,a1,a2);var _PyCodec_StreamWriter=Module["_PyCodec_StreamWriter"]=(a0,a1,a2)=>(_PyCodec_StreamWriter=Module["_PyCodec_StreamWriter"]=wasmExports["PyCodec_StreamWriter"])(a0,a1,a2);var __PyCodec_LookupTextEncoding=Module["__PyCodec_LookupTextEncoding"]=(a0,a1)=>(__PyCodec_LookupTextEncoding=Module["__PyCodec_LookupTextEncoding"]=wasmExports["_PyCodec_LookupTextEncoding"])(a0,a1);var _PyCodec_RegisterError=Module["_PyCodec_RegisterError"]=(a0,a1)=>(_PyCodec_RegisterError=Module["_PyCodec_RegisterError"]=wasmExports["PyCodec_RegisterError"])(a0,a1);var _PyCodec_IgnoreErrors=Module["_PyCodec_IgnoreErrors"]=a0=>(_PyCodec_IgnoreErrors=Module["_PyCodec_IgnoreErrors"]=wasmExports["PyCodec_IgnoreErrors"])(a0);var _PyCodec_ReplaceErrors=Module["_PyCodec_ReplaceErrors"]=a0=>(_PyCodec_ReplaceErrors=Module["_PyCodec_ReplaceErrors"]=wasmExports["PyCodec_ReplaceErrors"])(a0);var _PyCodec_XMLCharRefReplaceErrors=Module["_PyCodec_XMLCharRefReplaceErrors"]=a0=>(_PyCodec_XMLCharRefReplaceErrors=Module["_PyCodec_XMLCharRefReplaceErrors"]=wasmExports["PyCodec_XMLCharRefReplaceErrors"])(a0);var _PyCodec_BackslashReplaceErrors=Module["_PyCodec_BackslashReplaceErrors"]=a0=>(_PyCodec_BackslashReplaceErrors=Module["_PyCodec_BackslashReplaceErrors"]=wasmExports["PyCodec_BackslashReplaceErrors"])(a0);var _PyCodec_NameReplaceErrors=Module["_PyCodec_NameReplaceErrors"]=a0=>(_PyCodec_NameReplaceErrors=Module["_PyCodec_NameReplaceErrors"]=wasmExports["PyCodec_NameReplaceErrors"])(a0);var _PyCompile_OpcodeStackEffectWithJump=Module["_PyCompile_OpcodeStackEffectWithJump"]=(a0,a1,a2)=>(_PyCompile_OpcodeStackEffectWithJump=Module["_PyCompile_OpcodeStackEffectWithJump"]=wasmExports["PyCompile_OpcodeStackEffectWithJump"])(a0,a1,a2);var __PyCompile_CodeGen=Module["__PyCompile_CodeGen"]=(a0,a1,a2,a3,a4)=>(__PyCompile_CodeGen=Module["__PyCompile_CodeGen"]=wasmExports["_PyCompile_CodeGen"])(a0,a1,a2,a3,a4);var __PyCompile_OptimizeCfg=Module["__PyCompile_OptimizeCfg"]=(a0,a1,a2)=>(__PyCompile_OptimizeCfg=Module["__PyCompile_OptimizeCfg"]=wasmExports["_PyCompile_OptimizeCfg"])(a0,a1,a2);var __PyCompile_Assemble=Module["__PyCompile_Assemble"]=(a0,a1,a2)=>(__PyCompile_Assemble=Module["__PyCompile_Assemble"]=wasmExports["_PyCompile_Assemble"])(a0,a1,a2);var _PyCode_Optimize=Module["_PyCode_Optimize"]=(a0,a1,a2,a3)=>(_PyCode_Optimize=Module["_PyCode_Optimize"]=wasmExports["PyCode_Optimize"])(a0,a1,a2,a3);var _PySymtable_Lookup=Module["_PySymtable_Lookup"]=(a0,a1)=>(_PySymtable_Lookup=Module["_PySymtable_Lookup"]=wasmExports["PySymtable_Lookup"])(a0,a1);var _PyErr_ProgramTextObject=Module["_PyErr_ProgramTextObject"]=(a0,a1)=>(_PyErr_ProgramTextObject=Module["_PyErr_ProgramTextObject"]=wasmExports["PyErr_ProgramTextObject"])(a0,a1);var __PyContext_NewHamtForTests=Module["__PyContext_NewHamtForTests"]=()=>(__PyContext_NewHamtForTests=Module["__PyContext_NewHamtForTests"]=wasmExports["_PyContext_NewHamtForTests"])();var _PyContext_New=Module["_PyContext_New"]=()=>(_PyContext_New=Module["_PyContext_New"]=wasmExports["PyContext_New"])();var _PyContext_Copy=Module["_PyContext_Copy"]=a0=>(_PyContext_Copy=Module["_PyContext_Copy"]=wasmExports["PyContext_Copy"])(a0);var _PyContext_CopyCurrent=Module["_PyContext_CopyCurrent"]=()=>(_PyContext_CopyCurrent=Module["_PyContext_CopyCurrent"]=wasmExports["PyContext_CopyCurrent"])();var _PyContext_Enter=Module["_PyContext_Enter"]=a0=>(_PyContext_Enter=Module["_PyContext_Enter"]=wasmExports["PyContext_Enter"])(a0);var _PyContext_Exit=Module["_PyContext_Exit"]=a0=>(_PyContext_Exit=Module["_PyContext_Exit"]=wasmExports["PyContext_Exit"])(a0);var _PyContextVar_New=Module["_PyContextVar_New"]=(a0,a1)=>(_PyContextVar_New=Module["_PyContextVar_New"]=wasmExports["PyContextVar_New"])(a0,a1);var _PyContextVar_Get=Module["_PyContextVar_Get"]=(a0,a1,a2)=>(_PyContextVar_Get=Module["_PyContextVar_Get"]=wasmExports["PyContextVar_Get"])(a0,a1,a2);var _PyContextVar_Set=Module["_PyContextVar_Set"]=(a0,a1)=>(_PyContextVar_Set=Module["_PyContextVar_Set"]=wasmExports["PyContextVar_Set"])(a0,a1);var _PyContextVar_Reset=Module["_PyContextVar_Reset"]=(a0,a1)=>(_PyContextVar_Reset=Module["_PyContextVar_Reset"]=wasmExports["PyContextVar_Reset"])(a0,a1);var __PyErr_Restore=Module["__PyErr_Restore"]=(a0,a1,a2,a3)=>(__PyErr_Restore=Module["__PyErr_Restore"]=wasmExports["_PyErr_Restore"])(a0,a1,a2,a3);var __PyErr_SetNone=Module["__PyErr_SetNone"]=(a0,a1)=>(__PyErr_SetNone=Module["__PyErr_SetNone"]=wasmExports["_PyErr_SetNone"])(a0,a1);var __PyErr_NormalizeException=Module["__PyErr_NormalizeException"]=(a0,a1,a2,a3)=>(__PyErr_NormalizeException=Module["__PyErr_NormalizeException"]=wasmExports["_PyErr_NormalizeException"])(a0,a1,a2,a3);var __PyErr_Fetch=Module["__PyErr_Fetch"]=(a0,a1,a2,a3)=>(__PyErr_Fetch=Module["__PyErr_Fetch"]=wasmExports["_PyErr_Fetch"])(a0,a1,a2,a3);var __PyErr_GetExcInfo=Module["__PyErr_GetExcInfo"]=(a0,a1,a2,a3)=>(__PyErr_GetExcInfo=Module["__PyErr_GetExcInfo"]=wasmExports["_PyErr_GetExcInfo"])(a0,a1,a2,a3);var __PyErr_GetHandledException=Module["__PyErr_GetHandledException"]=a0=>(__PyErr_GetHandledException=Module["__PyErr_GetHandledException"]=wasmExports["_PyErr_GetHandledException"])(a0);var _PyErr_GetHandledException=Module["_PyErr_GetHandledException"]=()=>(_PyErr_GetHandledException=Module["_PyErr_GetHandledException"]=wasmExports["PyErr_GetHandledException"])();var __PyErr_SetHandledException=Module["__PyErr_SetHandledException"]=(a0,a1)=>(__PyErr_SetHandledException=Module["__PyErr_SetHandledException"]=wasmExports["_PyErr_SetHandledException"])(a0,a1);var _PyErr_GetExcInfo=Module["_PyErr_GetExcInfo"]=(a0,a1,a2)=>(_PyErr_GetExcInfo=Module["_PyErr_GetExcInfo"]=wasmExports["PyErr_GetExcInfo"])(a0,a1,a2);var _PyErr_SetExcInfo=Module["_PyErr_SetExcInfo"]=(a0,a1,a2)=>(_PyErr_SetExcInfo=Module["_PyErr_SetExcInfo"]=wasmExports["PyErr_SetExcInfo"])(a0,a1,a2);var __PyErr_StackItemToExcInfoTuple=Module["__PyErr_StackItemToExcInfoTuple"]=a0=>(__PyErr_StackItemToExcInfoTuple=Module["__PyErr_StackItemToExcInfoTuple"]=wasmExports["_PyErr_StackItemToExcInfoTuple"])(a0);var __PyErr_ChainExceptions=Module["__PyErr_ChainExceptions"]=(a0,a1,a2)=>(__PyErr_ChainExceptions=Module["__PyErr_ChainExceptions"]=wasmExports["_PyErr_ChainExceptions"])(a0,a1,a2);var _PyErr_SetFromErrnoWithFilenameObject=Module["_PyErr_SetFromErrnoWithFilenameObject"]=(a0,a1)=>(_PyErr_SetFromErrnoWithFilenameObject=Module["_PyErr_SetFromErrnoWithFilenameObject"]=wasmExports["PyErr_SetFromErrnoWithFilenameObject"])(a0,a1);var _PyErr_SetFromErrnoWithFilenameObjects=Module["_PyErr_SetFromErrnoWithFilenameObjects"]=(a0,a1,a2)=>(_PyErr_SetFromErrnoWithFilenameObjects=Module["_PyErr_SetFromErrnoWithFilenameObjects"]=wasmExports["PyErr_SetFromErrnoWithFilenameObjects"])(a0,a1,a2);var _strerror=Module["_strerror"]=a0=>(_strerror=Module["_strerror"]=wasmExports["strerror"])(a0);var _PyErr_SetImportErrorSubclass=Module["_PyErr_SetImportErrorSubclass"]=(a0,a1,a2,a3)=>(_PyErr_SetImportErrorSubclass=Module["_PyErr_SetImportErrorSubclass"]=wasmExports["PyErr_SetImportErrorSubclass"])(a0,a1,a2,a3);var _PyErr_SetImportError=Module["_PyErr_SetImportError"]=(a0,a1,a2)=>(_PyErr_SetImportError=Module["_PyErr_SetImportError"]=wasmExports["PyErr_SetImportError"])(a0,a1,a2);var _PyErr_BadInternalCall=Module["_PyErr_BadInternalCall"]=()=>(_PyErr_BadInternalCall=Module["_PyErr_BadInternalCall"]=wasmExports["PyErr_BadInternalCall"])();var _PyErr_FormatV=Module["_PyErr_FormatV"]=(a0,a1,a2)=>(_PyErr_FormatV=Module["_PyErr_FormatV"]=wasmExports["PyErr_FormatV"])(a0,a1,a2);var _PyErr_NewExceptionWithDoc=Module["_PyErr_NewExceptionWithDoc"]=(a0,a1,a2,a3)=>(_PyErr_NewExceptionWithDoc=Module["_PyErr_NewExceptionWithDoc"]=wasmExports["PyErr_NewExceptionWithDoc"])(a0,a1,a2,a3);var _PyTraceBack_Print=Module["_PyTraceBack_Print"]=(a0,a1)=>(_PyTraceBack_Print=Module["_PyTraceBack_Print"]=wasmExports["PyTraceBack_Print"])(a0,a1);var __PyTraceBack_FromFrame=Module["__PyTraceBack_FromFrame"]=(a0,a1)=>(__PyTraceBack_FromFrame=Module["__PyTraceBack_FromFrame"]=wasmExports["_PyTraceBack_FromFrame"])(a0,a1);var _PyErr_SyntaxLocation=Module["_PyErr_SyntaxLocation"]=(a0,a1)=>(_PyErr_SyntaxLocation=Module["_PyErr_SyntaxLocation"]=wasmExports["PyErr_SyntaxLocation"])(a0,a1);var _PyErr_SyntaxLocationEx=Module["_PyErr_SyntaxLocationEx"]=(a0,a1,a2)=>(_PyErr_SyntaxLocationEx=Module["_PyErr_SyntaxLocationEx"]=wasmExports["PyErr_SyntaxLocationEx"])(a0,a1,a2);var _PyErr_RangedSyntaxLocationObject=Module["_PyErr_RangedSyntaxLocationObject"]=(a0,a1,a2,a3,a4)=>(_PyErr_RangedSyntaxLocationObject=Module["_PyErr_RangedSyntaxLocationObject"]=wasmExports["PyErr_RangedSyntaxLocationObject"])(a0,a1,a2,a3,a4);var _PyErr_ProgramText=Module["_PyErr_ProgramText"]=(a0,a1)=>(_PyErr_ProgramText=Module["_PyErr_ProgramText"]=wasmExports["PyErr_ProgramText"])(a0,a1);var __Py_fopen_obj=Module["__Py_fopen_obj"]=(a0,a1)=>(__Py_fopen_obj=Module["__Py_fopen_obj"]=wasmExports["_Py_fopen_obj"])(a0,a1);var _PyUnstable_InterpreterFrame_GetCode=Module["_PyUnstable_InterpreterFrame_GetCode"]=a0=>(_PyUnstable_InterpreterFrame_GetCode=Module["_PyUnstable_InterpreterFrame_GetCode"]=wasmExports["PyUnstable_InterpreterFrame_GetCode"])(a0);var _PyUnstable_InterpreterFrame_GetLasti=Module["_PyUnstable_InterpreterFrame_GetLasti"]=a0=>(_PyUnstable_InterpreterFrame_GetLasti=Module["_PyUnstable_InterpreterFrame_GetLasti"]=wasmExports["PyUnstable_InterpreterFrame_GetLasti"])(a0);var _Py_FrozenMain=Module["_Py_FrozenMain"]=(a0,a1)=>(_Py_FrozenMain=Module["_Py_FrozenMain"]=wasmExports["Py_FrozenMain"])(a0,a1);var __PyRuntime_Initialize=Module["__PyRuntime_Initialize"]=a0=>(__PyRuntime_Initialize=Module["__PyRuntime_Initialize"]=wasmExports["_PyRuntime_Initialize"])(a0);var _Py_GETENV=Module["_Py_GETENV"]=a0=>(_Py_GETENV=Module["_Py_GETENV"]=wasmExports["Py_GETENV"])(a0);var _Py_GetVersion=Module["_Py_GetVersion"]=()=>(_Py_GetVersion=Module["_Py_GetVersion"]=wasmExports["Py_GetVersion"])();var _Py_GetCopyright=Module["_Py_GetCopyright"]=()=>(_Py_GetCopyright=Module["_Py_GetCopyright"]=wasmExports["Py_GetCopyright"])();var _PyImport_ImportFrozenModule=Module["_PyImport_ImportFrozenModule"]=a0=>(_PyImport_ImportFrozenModule=Module["_PyImport_ImportFrozenModule"]=wasmExports["PyImport_ImportFrozenModule"])(a0);var _PyRun_AnyFileExFlags=Module["_PyRun_AnyFileExFlags"]=(a0,a1,a2,a3)=>(_PyRun_AnyFileExFlags=Module["_PyRun_AnyFileExFlags"]=wasmExports["PyRun_AnyFileExFlags"])(a0,a1,a2,a3);var _Py_FinalizeEx=Module["_Py_FinalizeEx"]=()=>(_Py_FinalizeEx=Module["_Py_FinalizeEx"]=wasmExports["Py_FinalizeEx"])();var _PyArg_Parse=Module["_PyArg_Parse"]=(a0,a1,a2)=>(_PyArg_Parse=Module["_PyArg_Parse"]=wasmExports["PyArg_Parse"])(a0,a1,a2);var __PyArg_Parse_SizeT=Module["__PyArg_Parse_SizeT"]=(a0,a1,a2)=>(__PyArg_Parse_SizeT=Module["__PyArg_Parse_SizeT"]=wasmExports["_PyArg_Parse_SizeT"])(a0,a1,a2);var __PyArg_ParseStack=Module["__PyArg_ParseStack"]=(a0,a1,a2,a3)=>(__PyArg_ParseStack=Module["__PyArg_ParseStack"]=wasmExports["_PyArg_ParseStack"])(a0,a1,a2,a3);var _PyArg_VaParse=Module["_PyArg_VaParse"]=(a0,a1,a2)=>(_PyArg_VaParse=Module["_PyArg_VaParse"]=wasmExports["PyArg_VaParse"])(a0,a1,a2);var __PyArg_VaParse_SizeT=Module["__PyArg_VaParse_SizeT"]=(a0,a1,a2)=>(__PyArg_VaParse_SizeT=Module["__PyArg_VaParse_SizeT"]=wasmExports["_PyArg_VaParse_SizeT"])(a0,a1,a2);var _PyArg_VaParseTupleAndKeywords=Module["_PyArg_VaParseTupleAndKeywords"]=(a0,a1,a2,a3,a4)=>(_PyArg_VaParseTupleAndKeywords=Module["_PyArg_VaParseTupleAndKeywords"]=wasmExports["PyArg_VaParseTupleAndKeywords"])(a0,a1,a2,a3,a4);var __PyArg_VaParseTupleAndKeywords_SizeT=Module["__PyArg_VaParseTupleAndKeywords_SizeT"]=(a0,a1,a2,a3,a4)=>(__PyArg_VaParseTupleAndKeywords_SizeT=Module["__PyArg_VaParseTupleAndKeywords_SizeT"]=wasmExports["_PyArg_VaParseTupleAndKeywords_SizeT"])(a0,a1,a2,a3,a4);var __PyArg_ParseTupleAndKeywordsFast=Module["__PyArg_ParseTupleAndKeywordsFast"]=(a0,a1,a2,a3)=>(__PyArg_ParseTupleAndKeywordsFast=Module["__PyArg_ParseTupleAndKeywordsFast"]=wasmExports["_PyArg_ParseTupleAndKeywordsFast"])(a0,a1,a2,a3);var __PyArg_ParseTupleAndKeywordsFast_SizeT=Module["__PyArg_ParseTupleAndKeywordsFast_SizeT"]=(a0,a1,a2,a3)=>(__PyArg_ParseTupleAndKeywordsFast_SizeT=Module["__PyArg_ParseTupleAndKeywordsFast_SizeT"]=wasmExports["_PyArg_ParseTupleAndKeywordsFast_SizeT"])(a0,a1,a2,a3);var __PyArg_ParseStackAndKeywords=Module["__PyArg_ParseStackAndKeywords"]=(a0,a1,a2,a3,a4)=>(__PyArg_ParseStackAndKeywords=Module["__PyArg_ParseStackAndKeywords"]=wasmExports["_PyArg_ParseStackAndKeywords"])(a0,a1,a2,a3,a4);var __PyArg_VaParseTupleAndKeywordsFast=Module["__PyArg_VaParseTupleAndKeywordsFast"]=(a0,a1,a2,a3)=>(__PyArg_VaParseTupleAndKeywordsFast=Module["__PyArg_VaParseTupleAndKeywordsFast"]=wasmExports["_PyArg_VaParseTupleAndKeywordsFast"])(a0,a1,a2,a3);var __PyArg_VaParseTupleAndKeywordsFast_SizeT=Module["__PyArg_VaParseTupleAndKeywordsFast_SizeT"]=(a0,a1,a2,a3)=>(__PyArg_VaParseTupleAndKeywordsFast_SizeT=Module["__PyArg_VaParseTupleAndKeywordsFast_SizeT"]=wasmExports["_PyArg_VaParseTupleAndKeywordsFast_SizeT"])(a0,a1,a2,a3);var __PyArg_NoPositional=Module["__PyArg_NoPositional"]=(a0,a1)=>(__PyArg_NoPositional=Module["__PyArg_NoPositional"]=wasmExports["_PyArg_NoPositional"])(a0,a1);var _Py_GetCompiler=Module["_Py_GetCompiler"]=()=>(_Py_GetCompiler=Module["_Py_GetCompiler"]=wasmExports["Py_GetCompiler"])();var _Py_GetPlatform=Module["_Py_GetPlatform"]=()=>(_Py_GetPlatform=Module["_Py_GetPlatform"]=wasmExports["Py_GetPlatform"])();var __PyEval_SetSwitchInterval=Module["__PyEval_SetSwitchInterval"]=a0=>(__PyEval_SetSwitchInterval=Module["__PyEval_SetSwitchInterval"]=wasmExports["_PyEval_SetSwitchInterval"])(a0);var __PyEval_GetSwitchInterval=Module["__PyEval_GetSwitchInterval"]=()=>(__PyEval_GetSwitchInterval=Module["__PyEval_GetSwitchInterval"]=wasmExports["_PyEval_GetSwitchInterval"])();var _PyEval_ThreadsInitialized=Module["_PyEval_ThreadsInitialized"]=()=>(_PyEval_ThreadsInitialized=Module["_PyEval_ThreadsInitialized"]=wasmExports["PyEval_ThreadsInitialized"])();var _PyThread_init_thread=Module["_PyThread_init_thread"]=()=>(_PyThread_init_thread=Module["_PyThread_init_thread"]=wasmExports["PyThread_init_thread"])();var _pthread_mutex_lock=Module["_pthread_mutex_lock"]=a0=>(_pthread_mutex_lock=Module["_pthread_mutex_lock"]=wasmExports["pthread_mutex_lock"])(a0);var _pthread_cond_timedwait=Module["_pthread_cond_timedwait"]=(a0,a1,a2)=>(_pthread_cond_timedwait=Module["_pthread_cond_timedwait"]=wasmExports["pthread_cond_timedwait"])(a0,a1,a2);var _pthread_mutex_unlock=Module["_pthread_mutex_unlock"]=a0=>(_pthread_mutex_unlock=Module["_pthread_mutex_unlock"]=wasmExports["pthread_mutex_unlock"])(a0);var _pthread_cond_signal=Module["_pthread_cond_signal"]=a0=>(_pthread_cond_signal=Module["_pthread_cond_signal"]=wasmExports["pthread_cond_signal"])(a0);var _PyThread_exit_thread=Module["_PyThread_exit_thread"]=()=>(_PyThread_exit_thread=Module["_PyThread_exit_thread"]=wasmExports["PyThread_exit_thread"])();var _PyThread_get_thread_ident=Module["_PyThread_get_thread_ident"]=()=>(_PyThread_get_thread_ident=Module["_PyThread_get_thread_ident"]=wasmExports["PyThread_get_thread_ident"])();var _pthread_cond_destroy=Module["_pthread_cond_destroy"]=a0=>(_pthread_cond_destroy=Module["_pthread_cond_destroy"]=wasmExports["pthread_cond_destroy"])(a0);var _pthread_mutex_destroy=Module["_pthread_mutex_destroy"]=a0=>(_pthread_mutex_destroy=Module["_pthread_mutex_destroy"]=wasmExports["pthread_mutex_destroy"])(a0);var _PyEval_InitThreads=Module["_PyEval_InitThreads"]=()=>(_PyEval_InitThreads=Module["_PyEval_InitThreads"]=wasmExports["PyEval_InitThreads"])();var _PyEval_AcquireLock=Module["_PyEval_AcquireLock"]=()=>(_PyEval_AcquireLock=Module["_PyEval_AcquireLock"]=wasmExports["PyEval_AcquireLock"])();var _PyEval_ReleaseLock=Module["_PyEval_ReleaseLock"]=()=>(_PyEval_ReleaseLock=Module["_PyEval_ReleaseLock"]=wasmExports["PyEval_ReleaseLock"])();var _pthread_cond_wait=Module["_pthread_cond_wait"]=(a0,a1)=>(_pthread_cond_wait=Module["_pthread_cond_wait"]=wasmExports["pthread_cond_wait"])(a0,a1);var _PyEval_AcquireThread=Module["_PyEval_AcquireThread"]=a0=>(_PyEval_AcquireThread=Module["_PyEval_AcquireThread"]=wasmExports["PyEval_AcquireThread"])(a0);var _PyEval_ReleaseThread=Module["_PyEval_ReleaseThread"]=a0=>(_PyEval_ReleaseThread=Module["_PyEval_ReleaseThread"]=wasmExports["PyEval_ReleaseThread"])(a0);var __PyThread_at_fork_reinit=Module["__PyThread_at_fork_reinit"]=a0=>(__PyThread_at_fork_reinit=Module["__PyThread_at_fork_reinit"]=wasmExports["_PyThread_at_fork_reinit"])(a0);var __PyThreadState_DeleteExcept=Module["__PyThreadState_DeleteExcept"]=a0=>(__PyThreadState_DeleteExcept=Module["__PyThreadState_DeleteExcept"]=wasmExports["_PyThreadState_DeleteExcept"])(a0);var __PyEval_SignalAsyncExc=Module["__PyEval_SignalAsyncExc"]=a0=>(__PyEval_SignalAsyncExc=Module["__PyEval_SignalAsyncExc"]=wasmExports["_PyEval_SignalAsyncExc"])(a0);var __PyEval_SignalReceived=Module["__PyEval_SignalReceived"]=a0=>(__PyEval_SignalReceived=Module["__PyEval_SignalReceived"]=wasmExports["_PyEval_SignalReceived"])(a0);var __PyEval_AddPendingCall=Module["__PyEval_AddPendingCall"]=(a0,a1,a2,a3)=>(__PyEval_AddPendingCall=Module["__PyEval_AddPendingCall"]=wasmExports["_PyEval_AddPendingCall"])(a0,a1,a2,a3);var _Py_AddPendingCall=Module["_Py_AddPendingCall"]=(a0,a1)=>(_Py_AddPendingCall=Module["_Py_AddPendingCall"]=wasmExports["Py_AddPendingCall"])(a0,a1);var __PyErr_Print=Module["__PyErr_Print"]=a0=>(__PyErr_Print=Module["__PyErr_Print"]=wasmExports["_PyErr_Print"])(a0);var __PyEval_MakePendingCalls=Module["__PyEval_MakePendingCalls"]=a0=>(__PyEval_MakePendingCalls=Module["__PyEval_MakePendingCalls"]=wasmExports["_PyEval_MakePendingCalls"])(a0);var __PyErr_CheckSignalsTstate=Module["__PyErr_CheckSignalsTstate"]=a0=>(__PyErr_CheckSignalsTstate=Module["__PyErr_CheckSignalsTstate"]=wasmExports["_PyErr_CheckSignalsTstate"])(a0);var _Py_MakePendingCalls=Module["_Py_MakePendingCalls"]=()=>(_Py_MakePendingCalls=Module["_Py_MakePendingCalls"]=wasmExports["Py_MakePendingCalls"])();var _PyThread_free_lock=Module["_PyThread_free_lock"]=a0=>(_PyThread_free_lock=Module["_PyThread_free_lock"]=wasmExports["PyThread_free_lock"])(a0);var _pthread_mutex_init=Module["_pthread_mutex_init"]=(a0,a1)=>(_pthread_mutex_init=Module["_pthread_mutex_init"]=wasmExports["pthread_mutex_init"])(a0,a1);var __Py_hashtable_hash_ptr=Module["__Py_hashtable_hash_ptr"]=a0=>(__Py_hashtable_hash_ptr=Module["__Py_hashtable_hash_ptr"]=wasmExports["_Py_hashtable_hash_ptr"])(a0);var __Py_HashPointerRaw=Module["__Py_HashPointerRaw"]=a0=>(__Py_HashPointerRaw=Module["__Py_HashPointerRaw"]=wasmExports["_Py_HashPointerRaw"])(a0);var __Py_hashtable_compare_direct=Module["__Py_hashtable_compare_direct"]=(a0,a1)=>(__Py_hashtable_compare_direct=Module["__Py_hashtable_compare_direct"]=wasmExports["_Py_hashtable_compare_direct"])(a0,a1);var __Py_hashtable_size=Module["__Py_hashtable_size"]=a0=>(__Py_hashtable_size=Module["__Py_hashtable_size"]=wasmExports["_Py_hashtable_size"])(a0);var __Py_hashtable_steal=Module["__Py_hashtable_steal"]=(a0,a1)=>(__Py_hashtable_steal=Module["__Py_hashtable_steal"]=wasmExports["_Py_hashtable_steal"])(a0,a1);var __Py_hashtable_foreach=Module["__Py_hashtable_foreach"]=(a0,a1,a2)=>(__Py_hashtable_foreach=Module["__Py_hashtable_foreach"]=wasmExports["_Py_hashtable_foreach"])(a0,a1,a2);var __Py_hashtable_new=Module["__Py_hashtable_new"]=(a0,a1)=>(__Py_hashtable_new=Module["__Py_hashtable_new"]=wasmExports["_Py_hashtable_new"])(a0,a1);var __Py_hashtable_clear=Module["__Py_hashtable_clear"]=a0=>(__Py_hashtable_clear=Module["__Py_hashtable_clear"]=wasmExports["_Py_hashtable_clear"])(a0);var __PyImport_AcquireLock=Module["__PyImport_AcquireLock"]=a0=>(__PyImport_AcquireLock=Module["__PyImport_AcquireLock"]=wasmExports["_PyImport_AcquireLock"])(a0);var __PyImport_ReleaseLock=Module["__PyImport_ReleaseLock"]=a0=>(__PyImport_ReleaseLock=Module["__PyImport_ReleaseLock"]=wasmExports["_PyImport_ReleaseLock"])(a0);var __PyImport_GetModuleId=Module["__PyImport_GetModuleId"]=a0=>(__PyImport_GetModuleId=Module["__PyImport_GetModuleId"]=wasmExports["_PyImport_GetModuleId"])(a0);var __PyImport_SetModule=Module["__PyImport_SetModule"]=(a0,a1)=>(__PyImport_SetModule=Module["__PyImport_SetModule"]=wasmExports["_PyImport_SetModule"])(a0,a1);var __PyImport_SetModuleString=Module["__PyImport_SetModuleString"]=(a0,a1)=>(__PyImport_SetModuleString=Module["__PyImport_SetModuleString"]=wasmExports["_PyImport_SetModuleString"])(a0,a1);var _PyImport_AddModuleObject=Module["_PyImport_AddModuleObject"]=a0=>(_PyImport_AddModuleObject=Module["_PyImport_AddModuleObject"]=wasmExports["PyImport_AddModuleObject"])(a0);var _PyImport_AddModule=Module["_PyImport_AddModule"]=a0=>(_PyImport_AddModule=Module["_PyImport_AddModule"]=wasmExports["PyImport_AddModule"])(a0);var _PyState_FindModule=Module["_PyState_FindModule"]=a0=>(_PyState_FindModule=Module["_PyState_FindModule"]=wasmExports["PyState_FindModule"])(a0);var __PyState_AddModule=Module["__PyState_AddModule"]=(a0,a1,a2)=>(__PyState_AddModule=Module["__PyState_AddModule"]=wasmExports["_PyState_AddModule"])(a0,a1,a2);var _PyState_AddModule=Module["_PyState_AddModule"]=(a0,a1)=>(_PyState_AddModule=Module["_PyState_AddModule"]=wasmExports["PyState_AddModule"])(a0,a1);var _PyState_RemoveModule=Module["_PyState_RemoveModule"]=a0=>(_PyState_RemoveModule=Module["_PyState_RemoveModule"]=wasmExports["PyState_RemoveModule"])(a0);var __PyImport_ClearExtension=Module["__PyImport_ClearExtension"]=(a0,a1)=>(__PyImport_ClearExtension=Module["__PyImport_ClearExtension"]=wasmExports["_PyImport_ClearExtension"])(a0,a1);var __PyInterpreterState_HasFeature=Module["__PyInterpreterState_HasFeature"]=(a0,a1)=>(__PyInterpreterState_HasFeature=Module["__PyInterpreterState_HasFeature"]=wasmExports["_PyInterpreterState_HasFeature"])(a0,a1);var __PyImport_FixupExtensionObject=Module["__PyImport_FixupExtensionObject"]=(a0,a1,a2,a3)=>(__PyImport_FixupExtensionObject=Module["__PyImport_FixupExtensionObject"]=wasmExports["_PyImport_FixupExtensionObject"])(a0,a1,a2,a3);var __PyImport_FixupBuiltin=Module["__PyImport_FixupBuiltin"]=(a0,a1,a2)=>(__PyImport_FixupBuiltin=Module["__PyImport_FixupBuiltin"]=wasmExports["_PyImport_FixupBuiltin"])(a0,a1,a2);var _PyImport_ExtendInittab=Module["_PyImport_ExtendInittab"]=a0=>(_PyImport_ExtendInittab=Module["_PyImport_ExtendInittab"]=wasmExports["PyImport_ExtendInittab"])(a0);var _PyImport_GetMagicNumber=Module["_PyImport_GetMagicNumber"]=()=>(_PyImport_GetMagicNumber=Module["_PyImport_GetMagicNumber"]=wasmExports["PyImport_GetMagicNumber"])();var _PyImport_GetMagicTag=Module["_PyImport_GetMagicTag"]=()=>(_PyImport_GetMagicTag=Module["_PyImport_GetMagicTag"]=wasmExports["PyImport_GetMagicTag"])();var _PyImport_ExecCodeModule=Module["_PyImport_ExecCodeModule"]=(a0,a1)=>(_PyImport_ExecCodeModule=Module["_PyImport_ExecCodeModule"]=wasmExports["PyImport_ExecCodeModule"])(a0,a1);var _PyImport_ExecCodeModuleObject=Module["_PyImport_ExecCodeModuleObject"]=(a0,a1,a2,a3)=>(_PyImport_ExecCodeModuleObject=Module["_PyImport_ExecCodeModuleObject"]=wasmExports["PyImport_ExecCodeModuleObject"])(a0,a1,a2,a3);var _PyImport_ExecCodeModuleWithPathnames=Module["_PyImport_ExecCodeModuleWithPathnames"]=(a0,a1,a2,a3)=>(_PyImport_ExecCodeModuleWithPathnames=Module["_PyImport_ExecCodeModuleWithPathnames"]=wasmExports["PyImport_ExecCodeModuleWithPathnames"])(a0,a1,a2,a3);var _PyImport_ExecCodeModuleEx=Module["_PyImport_ExecCodeModuleEx"]=(a0,a1,a2)=>(_PyImport_ExecCodeModuleEx=Module["_PyImport_ExecCodeModuleEx"]=wasmExports["PyImport_ExecCodeModuleEx"])(a0,a1,a2);var _PyImport_ImportFrozenModuleObject=Module["_PyImport_ImportFrozenModuleObject"]=a0=>(_PyImport_ImportFrozenModuleObject=Module["_PyImport_ImportFrozenModuleObject"]=wasmExports["PyImport_ImportFrozenModuleObject"])(a0);var _PyMarshal_ReadObjectFromString=Module["_PyMarshal_ReadObjectFromString"]=(a0,a1)=>(_PyMarshal_ReadObjectFromString=Module["_PyMarshal_ReadObjectFromString"]=wasmExports["PyMarshal_ReadObjectFromString"])(a0,a1);var _PyImport_GetImporter=Module["_PyImport_GetImporter"]=a0=>(_PyImport_GetImporter=Module["_PyImport_GetImporter"]=wasmExports["PyImport_GetImporter"])(a0);var _PyImport_ImportModuleNoBlock=Module["_PyImport_ImportModuleNoBlock"]=a0=>(_PyImport_ImportModuleNoBlock=Module["_PyImport_ImportModuleNoBlock"]=wasmExports["PyImport_ImportModuleNoBlock"])(a0);var __PyTime_GetPerfCounter=Module["__PyTime_GetPerfCounter"]=()=>(__PyTime_GetPerfCounter=Module["__PyTime_GetPerfCounter"]=wasmExports["_PyTime_GetPerfCounter"])();var __PyTime_AsMicroseconds=Module["__PyTime_AsMicroseconds"]=(a0,a1)=>(__PyTime_AsMicroseconds=Module["__PyTime_AsMicroseconds"]=wasmExports["_PyTime_AsMicroseconds"])(a0,a1);var _PyImport_ImportModuleLevel=Module["_PyImport_ImportModuleLevel"]=(a0,a1,a2,a3,a4)=>(_PyImport_ImportModuleLevel=Module["_PyImport_ImportModuleLevel"]=wasmExports["PyImport_ImportModuleLevel"])(a0,a1,a2,a3,a4);var _PyImport_ReloadModule=Module["_PyImport_ReloadModule"]=a0=>(_PyImport_ReloadModule=Module["_PyImport_ReloadModule"]=wasmExports["PyImport_ReloadModule"])(a0);var _PyStatus_NoMemory=Module["_PyStatus_NoMemory"]=a0=>(_PyStatus_NoMemory=Module["_PyStatus_NoMemory"]=wasmExports["PyStatus_NoMemory"])(a0);var __PyImport_GetModuleAttr=Module["__PyImport_GetModuleAttr"]=(a0,a1)=>(__PyImport_GetModuleAttr=Module["__PyImport_GetModuleAttr"]=wasmExports["_PyImport_GetModuleAttr"])(a0,a1);var _PyInit__imp=Module["_PyInit__imp"]=()=>(_PyInit__imp=Module["_PyInit__imp"]=wasmExports["PyInit__imp"])();var _getenv=Module["_getenv"]=a0=>(_getenv=Module["_getenv"]=wasmExports["getenv"])(a0);var _PyStatus_Ok=Module["_PyStatus_Ok"]=a0=>(_PyStatus_Ok=Module["_PyStatus_Ok"]=wasmExports["PyStatus_Ok"])(a0);var _PyStatus_Error=Module["_PyStatus_Error"]=(a0,a1)=>(_PyStatus_Error=Module["_PyStatus_Error"]=wasmExports["PyStatus_Error"])(a0,a1);var _PyStatus_Exit=Module["_PyStatus_Exit"]=(a0,a1)=>(_PyStatus_Exit=Module["_PyStatus_Exit"]=wasmExports["PyStatus_Exit"])(a0,a1);var _PyStatus_IsError=Module["_PyStatus_IsError"]=a0=>(_PyStatus_IsError=Module["_PyStatus_IsError"]=wasmExports["PyStatus_IsError"])(a0);var _PyStatus_IsExit=Module["_PyStatus_IsExit"]=a0=>(_PyStatus_IsExit=Module["_PyStatus_IsExit"]=wasmExports["PyStatus_IsExit"])(a0);var __PyErr_SetFromPyStatus=Module["__PyErr_SetFromPyStatus"]=a0=>(__PyErr_SetFromPyStatus=Module["__PyErr_SetFromPyStatus"]=wasmExports["_PyErr_SetFromPyStatus"])(a0);var __PyWideStringList_Clear=Module["__PyWideStringList_Clear"]=a0=>(__PyWideStringList_Clear=Module["__PyWideStringList_Clear"]=wasmExports["_PyWideStringList_Clear"])(a0);var __PyWideStringList_Copy=Module["__PyWideStringList_Copy"]=(a0,a1)=>(__PyWideStringList_Copy=Module["__PyWideStringList_Copy"]=wasmExports["_PyWideStringList_Copy"])(a0,a1);var _PyWideStringList_Insert=Module["_PyWideStringList_Insert"]=(a0,a1,a2,a3)=>(_PyWideStringList_Insert=Module["_PyWideStringList_Insert"]=wasmExports["PyWideStringList_Insert"])(a0,a1,a2,a3);var _PyWideStringList_Append=Module["_PyWideStringList_Append"]=(a0,a1,a2)=>(_PyWideStringList_Append=Module["_PyWideStringList_Append"]=wasmExports["PyWideStringList_Append"])(a0,a1,a2);var __PyWideStringList_Extend=Module["__PyWideStringList_Extend"]=(a0,a1,a2)=>(__PyWideStringList_Extend=Module["__PyWideStringList_Extend"]=wasmExports["_PyWideStringList_Extend"])(a0,a1,a2);var __PyWideStringList_AsList=Module["__PyWideStringList_AsList"]=a0=>(__PyWideStringList_AsList=Module["__PyWideStringList_AsList"]=wasmExports["_PyWideStringList_AsList"])(a0);var _Py_SetStandardStreamEncoding=Module["_Py_SetStandardStreamEncoding"]=(a0,a1)=>(_Py_SetStandardStreamEncoding=Module["_Py_SetStandardStreamEncoding"]=wasmExports["Py_SetStandardStreamEncoding"])(a0,a1);var __Py_ClearStandardStreamEncoding=Module["__Py_ClearStandardStreamEncoding"]=()=>(__Py_ClearStandardStreamEncoding=Module["__Py_ClearStandardStreamEncoding"]=wasmExports["_Py_ClearStandardStreamEncoding"])();var __Py_ClearArgcArgv=Module["__Py_ClearArgcArgv"]=()=>(__Py_ClearArgcArgv=Module["__Py_ClearArgcArgv"]=wasmExports["_Py_ClearArgcArgv"])();var _Py_GetArgcArgv=Module["_Py_GetArgcArgv"]=(a0,a1)=>(_Py_GetArgcArgv=Module["_Py_GetArgcArgv"]=wasmExports["Py_GetArgcArgv"])(a0,a1);var __PyConfig_InitCompatConfig=Module["__PyConfig_InitCompatConfig"]=a0=>(__PyConfig_InitCompatConfig=Module["__PyConfig_InitCompatConfig"]=wasmExports["_PyConfig_InitCompatConfig"])(a0);var _PyConfig_InitIsolatedConfig=Module["_PyConfig_InitIsolatedConfig"]=a0=>(_PyConfig_InitIsolatedConfig=Module["_PyConfig_InitIsolatedConfig"]=wasmExports["PyConfig_InitIsolatedConfig"])(a0);var _PyConfig_SetString=Module["_PyConfig_SetString"]=(a0,a1,a2,a3)=>(_PyConfig_SetString=Module["_PyConfig_SetString"]=wasmExports["PyConfig_SetString"])(a0,a1,a2,a3);var __Py_PreInitializeFromConfig=Module["__Py_PreInitializeFromConfig"]=(a0,a1,a2)=>(__Py_PreInitializeFromConfig=Module["__Py_PreInitializeFromConfig"]=wasmExports["_Py_PreInitializeFromConfig"])(a0,a1,a2);var _Py_DecodeLocale=Module["_Py_DecodeLocale"]=(a0,a1)=>(_Py_DecodeLocale=Module["_Py_DecodeLocale"]=wasmExports["Py_DecodeLocale"])(a0,a1);var __PyConfig_AsDict=Module["__PyConfig_AsDict"]=a0=>(__PyConfig_AsDict=Module["__PyConfig_AsDict"]=wasmExports["_PyConfig_AsDict"])(a0);var __PyConfig_FromDict=Module["__PyConfig_FromDict"]=(a0,a1)=>(__PyConfig_FromDict=Module["__PyConfig_FromDict"]=wasmExports["_PyConfig_FromDict"])(a0,a1);var __Py_get_xoption=Module["__Py_get_xoption"]=(a0,a1)=>(__Py_get_xoption=Module["__Py_get_xoption"]=wasmExports["_Py_get_xoption"])(a0,a1);var _wcschr=Module["_wcschr"]=(a0,a1)=>(_wcschr=Module["_wcschr"]=wasmExports["wcschr"])(a0,a1);var _setvbuf=Module["_setvbuf"]=(a0,a1,a2,a3)=>(_setvbuf=Module["_setvbuf"]=wasmExports["setvbuf"])(a0,a1,a2,a3);var __PyArgv_AsWstrList=Module["__PyArgv_AsWstrList"]=(a0,a1,a2)=>(__PyArgv_AsWstrList=Module["__PyArgv_AsWstrList"]=wasmExports["_PyArgv_AsWstrList"])(a0,a1,a2);var _PyConfig_SetArgv=Module["_PyConfig_SetArgv"]=(a0,a1,a2,a3)=>(_PyConfig_SetArgv=Module["_PyConfig_SetArgv"]=wasmExports["PyConfig_SetArgv"])(a0,a1,a2,a3);var _PyConfig_SetWideStringList=Module["_PyConfig_SetWideStringList"]=(a0,a1,a2,a3,a4)=>(_PyConfig_SetWideStringList=Module["_PyConfig_SetWideStringList"]=wasmExports["PyConfig_SetWideStringList"])(a0,a1,a2,a3,a4);var _iprintf=Module["_iprintf"]=(a0,a1)=>(_iprintf=Module["_iprintf"]=wasmExports["iprintf"])(a0,a1);var _wcstok=Module["_wcstok"]=(a0,a1,a2)=>(_wcstok=Module["_wcstok"]=wasmExports["wcstok"])(a0,a1,a2);var __Py_get_env_flag=Module["__Py_get_env_flag"]=(a0,a1,a2)=>(__Py_get_env_flag=Module["__Py_get_env_flag"]=wasmExports["_Py_get_env_flag"])(a0,a1,a2);var __Py_GetEnv=Module["__Py_GetEnv"]=(a0,a1)=>(__Py_GetEnv=Module["__Py_GetEnv"]=wasmExports["_Py_GetEnv"])(a0,a1);var _strtoul=Module["_strtoul"]=(a0,a1,a2)=>(_strtoul=Module["_strtoul"]=wasmExports["strtoul"])(a0,a1,a2);var __Py_str_to_int=Module["__Py_str_to_int"]=(a0,a1)=>(__Py_str_to_int=Module["__Py_str_to_int"]=wasmExports["_Py_str_to_int"])(a0,a1);var _wcstol=Module["_wcstol"]=(a0,a1,a2)=>(_wcstol=Module["_wcstol"]=wasmExports["wcstol"])(a0,a1,a2);var __Py_GetForceASCII=Module["__Py_GetForceASCII"]=()=>(__Py_GetForceASCII=Module["__Py_GetForceASCII"]=wasmExports["_Py_GetForceASCII"])();var _setlocale=Module["_setlocale"]=(a0,a1)=>(_setlocale=Module["_setlocale"]=wasmExports["setlocale"])(a0,a1);var __Py_IsLocaleCoercionTarget=Module["__Py_IsLocaleCoercionTarget"]=a0=>(__Py_IsLocaleCoercionTarget=Module["__Py_IsLocaleCoercionTarget"]=wasmExports["_Py_IsLocaleCoercionTarget"])(a0);var _PyConfig_Read=Module["_PyConfig_Read"]=(a0,a1)=>(_PyConfig_Read=Module["_PyConfig_Read"]=wasmExports["PyConfig_Read"])(a0,a1);var __Py_GetConfigsAsDict=Module["__Py_GetConfigsAsDict"]=()=>(__Py_GetConfigsAsDict=Module["__Py_GetConfigsAsDict"]=wasmExports["_Py_GetConfigsAsDict"])();var __Py_GetLocaleEncoding=Module["__Py_GetLocaleEncoding"]=()=>(__Py_GetLocaleEncoding=Module["__Py_GetLocaleEncoding"]=wasmExports["_Py_GetLocaleEncoding"])();var _PyMarshal_WriteLongToFile=Module["_PyMarshal_WriteLongToFile"]=(a0,a1,a2)=>(_PyMarshal_WriteLongToFile=Module["_PyMarshal_WriteLongToFile"]=wasmExports["PyMarshal_WriteLongToFile"])(a0,a1,a2);var _PyMarshal_WriteObjectToFile=Module["_PyMarshal_WriteObjectToFile"]=(a0,a1,a2)=>(_PyMarshal_WriteObjectToFile=Module["_PyMarshal_WriteObjectToFile"]=wasmExports["PyMarshal_WriteObjectToFile"])(a0,a1,a2);var _PyMarshal_ReadShortFromFile=Module["_PyMarshal_ReadShortFromFile"]=a0=>(_PyMarshal_ReadShortFromFile=Module["_PyMarshal_ReadShortFromFile"]=wasmExports["PyMarshal_ReadShortFromFile"])(a0);var _PyMarshal_ReadLongFromFile=Module["_PyMarshal_ReadLongFromFile"]=a0=>(_PyMarshal_ReadLongFromFile=Module["_PyMarshal_ReadLongFromFile"]=wasmExports["PyMarshal_ReadLongFromFile"])(a0);var _PyMarshal_ReadLastObjectFromFile=Module["_PyMarshal_ReadLastObjectFromFile"]=a0=>(_PyMarshal_ReadLastObjectFromFile=Module["_PyMarshal_ReadLastObjectFromFile"]=wasmExports["PyMarshal_ReadLastObjectFromFile"])(a0);var __Py_fstat_noraise=Module["__Py_fstat_noraise"]=(a0,a1)=>(__Py_fstat_noraise=Module["__Py_fstat_noraise"]=wasmExports["_Py_fstat_noraise"])(a0,a1);var _fread=Module["_fread"]=(a0,a1,a2,a3)=>(_fread=Module["_fread"]=wasmExports["fread"])(a0,a1,a2,a3);var _PyMarshal_ReadObjectFromFile=Module["_PyMarshal_ReadObjectFromFile"]=a0=>(_PyMarshal_ReadObjectFromFile=Module["_PyMarshal_ReadObjectFromFile"]=wasmExports["PyMarshal_ReadObjectFromFile"])(a0);var _PyMarshal_WriteObjectToString=Module["_PyMarshal_WriteObjectToString"]=(a0,a1)=>(_PyMarshal_WriteObjectToString=Module["_PyMarshal_WriteObjectToString"]=wasmExports["PyMarshal_WriteObjectToString"])(a0,a1);var _PyMarshal_Init=Module["_PyMarshal_Init"]=()=>(_PyMarshal_Init=Module["_PyMarshal_Init"]=wasmExports["PyMarshal_Init"])();var __Py_convert_optional_to_ssize_t=Module["__Py_convert_optional_to_ssize_t"]=(a0,a1)=>(__Py_convert_optional_to_ssize_t=Module["__Py_convert_optional_to_ssize_t"]=wasmExports["_Py_convert_optional_to_ssize_t"])(a0,a1);var _Py_VaBuildValue=Module["_Py_VaBuildValue"]=(a0,a1)=>(_Py_VaBuildValue=Module["_Py_VaBuildValue"]=wasmExports["Py_VaBuildValue"])(a0,a1);var __Py_VaBuildValue_SizeT=Module["__Py_VaBuildValue_SizeT"]=(a0,a1)=>(__Py_VaBuildValue_SizeT=Module["__Py_VaBuildValue_SizeT"]=wasmExports["_Py_VaBuildValue_SizeT"])(a0,a1);var __PyModule_Add=Module["__PyModule_Add"]=(a0,a1,a2)=>(__PyModule_Add=Module["__PyModule_Add"]=wasmExports["_PyModule_Add"])(a0,a1,a2);var _PyModule_AddStringConstant=Module["_PyModule_AddStringConstant"]=(a0,a1,a2)=>(_PyModule_AddStringConstant=Module["_PyModule_AddStringConstant"]=wasmExports["PyModule_AddStringConstant"])(a0,a1,a2);var _vsnprintf=Module["_vsnprintf"]=(a0,a1,a2,a3)=>(_vsnprintf=Module["_vsnprintf"]=wasmExports["vsnprintf"])(a0,a1,a2,a3);var _PyOS_vsnprintf=Module["_PyOS_vsnprintf"]=(a0,a1,a2,a3)=>(_PyOS_vsnprintf=Module["_PyOS_vsnprintf"]=wasmExports["PyOS_vsnprintf"])(a0,a1,a2,a3);var __PyPathConfig_ClearGlobal=Module["__PyPathConfig_ClearGlobal"]=()=>(__PyPathConfig_ClearGlobal=Module["__PyPathConfig_ClearGlobal"]=wasmExports["_PyPathConfig_ClearGlobal"])();var _wcscpy=Module["_wcscpy"]=(a0,a1)=>(_wcscpy=Module["_wcscpy"]=wasmExports["wcscpy"])(a0,a1);var _Py_SetPath=Module["_Py_SetPath"]=a0=>(_Py_SetPath=Module["_Py_SetPath"]=wasmExports["Py_SetPath"])(a0);var _Py_SetPythonHome=Module["_Py_SetPythonHome"]=a0=>(_Py_SetPythonHome=Module["_Py_SetPythonHome"]=wasmExports["Py_SetPythonHome"])(a0);var _Py_SetProgramName=Module["_Py_SetProgramName"]=a0=>(_Py_SetProgramName=Module["_Py_SetProgramName"]=wasmExports["Py_SetProgramName"])(a0);var __Py_SetProgramFullPath=Module["__Py_SetProgramFullPath"]=a0=>(__Py_SetProgramFullPath=Module["__Py_SetProgramFullPath"]=wasmExports["_Py_SetProgramFullPath"])(a0);var _Py_GetPath=Module["_Py_GetPath"]=()=>(_Py_GetPath=Module["_Py_GetPath"]=wasmExports["Py_GetPath"])();var _Py_GetPrefix=Module["_Py_GetPrefix"]=()=>(_Py_GetPrefix=Module["_Py_GetPrefix"]=wasmExports["Py_GetPrefix"])();var _Py_GetExecPrefix=Module["_Py_GetExecPrefix"]=()=>(_Py_GetExecPrefix=Module["_Py_GetExecPrefix"]=wasmExports["Py_GetExecPrefix"])();var _Py_GetProgramFullPath=Module["_Py_GetProgramFullPath"]=()=>(_Py_GetProgramFullPath=Module["_Py_GetProgramFullPath"]=wasmExports["Py_GetProgramFullPath"])();var _Py_GetPythonHome=Module["_Py_GetPythonHome"]=()=>(_Py_GetPythonHome=Module["_Py_GetPythonHome"]=wasmExports["Py_GetPythonHome"])();var _Py_GetProgramName=Module["_Py_GetProgramName"]=()=>(_Py_GetProgramName=Module["_Py_GetProgramName"]=wasmExports["Py_GetProgramName"])();var __Py_wgetcwd=Module["__Py_wgetcwd"]=(a0,a1)=>(__Py_wgetcwd=Module["__Py_wgetcwd"]=wasmExports["_Py_wgetcwd"])(a0,a1);var __Py_wreadlink=Module["__Py_wreadlink"]=(a0,a1,a2)=>(__Py_wreadlink=Module["__Py_wreadlink"]=wasmExports["_Py_wreadlink"])(a0,a1,a2);var _wcsrchr=Module["_wcsrchr"]=(a0,a1)=>(_wcsrchr=Module["_wcsrchr"]=wasmExports["wcsrchr"])(a0,a1);var _wcsncpy=Module["_wcsncpy"]=(a0,a1,a2)=>(_wcsncpy=Module["_wcsncpy"]=wasmExports["wcsncpy"])(a0,a1,a2);var __Py_wrealpath=Module["__Py_wrealpath"]=(a0,a1,a2)=>(__Py_wrealpath=Module["__Py_wrealpath"]=wasmExports["_Py_wrealpath"])(a0,a1,a2);var _wcsncmp=Module["_wcsncmp"]=(a0,a1,a2)=>(_wcsncmp=Module["_wcsncmp"]=wasmExports["wcsncmp"])(a0,a1,a2);var __PyPreConfig_InitCompatConfig=Module["__PyPreConfig_InitCompatConfig"]=a0=>(__PyPreConfig_InitCompatConfig=Module["__PyPreConfig_InitCompatConfig"]=wasmExports["_PyPreConfig_InitCompatConfig"])(a0);var _PyPreConfig_InitIsolatedConfig=Module["_PyPreConfig_InitIsolatedConfig"]=a0=>(_PyPreConfig_InitIsolatedConfig=Module["_PyPreConfig_InitIsolatedConfig"]=wasmExports["PyPreConfig_InitIsolatedConfig"])(a0);var __Py_SetLocaleFromEnv=Module["__Py_SetLocaleFromEnv"]=a0=>(__Py_SetLocaleFromEnv=Module["__Py_SetLocaleFromEnv"]=wasmExports["_Py_SetLocaleFromEnv"])(a0);var __Py_LegacyLocaleDetected=Module["__Py_LegacyLocaleDetected"]=a0=>(__Py_LegacyLocaleDetected=Module["__Py_LegacyLocaleDetected"]=wasmExports["_Py_LegacyLocaleDetected"])(a0);var __Py_CoerceLegacyLocale=Module["__Py_CoerceLegacyLocale"]=a0=>(__Py_CoerceLegacyLocale=Module["__Py_CoerceLegacyLocale"]=wasmExports["_Py_CoerceLegacyLocale"])(a0);var _PyHash_GetFuncDef=Module["_PyHash_GetFuncDef"]=()=>(_PyHash_GetFuncDef=Module["_PyHash_GetFuncDef"]=wasmExports["PyHash_GetFuncDef"])();var __PyRuntimeState_Init=Module["__PyRuntimeState_Init"]=(a0,a1)=>(__PyRuntimeState_Init=Module["__PyRuntimeState_Init"]=wasmExports["_PyRuntimeState_Init"])(a0,a1);var __PyRuntime_Finalize=Module["__PyRuntime_Finalize"]=()=>(__PyRuntime_Finalize=Module["__PyRuntime_Finalize"]=wasmExports["_PyRuntime_Finalize"])();var __PyRuntimeState_Fini=Module["__PyRuntimeState_Fini"]=a0=>(__PyRuntimeState_Fini=Module["__PyRuntimeState_Fini"]=wasmExports["_PyRuntimeState_Fini"])(a0);var __Py_IsFinalizing=Module["__Py_IsFinalizing"]=()=>(__Py_IsFinalizing=Module["__Py_IsFinalizing"]=wasmExports["_Py_IsFinalizing"])();var __Py_IsCoreInitialized=Module["__Py_IsCoreInitialized"]=()=>(__Py_IsCoreInitialized=Module["__Py_IsCoreInitialized"]=wasmExports["_Py_IsCoreInitialized"])();var _nl_langinfo=Module["_nl_langinfo"]=a0=>(_nl_langinfo=Module["_nl_langinfo"]=wasmExports["nl_langinfo"])(a0);var __Py_ResetForceASCII=Module["__Py_ResetForceASCII"]=()=>(__Py_ResetForceASCII=Module["__Py_ResetForceASCII"]=wasmExports["_Py_ResetForceASCII"])();var _setenv=Module["_setenv"]=(a0,a1,a2)=>(_setenv=Module["_setenv"]=wasmExports["setenv"])(a0,a1,a2);var __PyInterpreterState_SetConfig=Module["__PyInterpreterState_SetConfig"]=a0=>(__PyInterpreterState_SetConfig=Module["__PyInterpreterState_SetConfig"]=wasmExports["_PyInterpreterState_SetConfig"])(a0);var __Py_PreInitializeFromPyArgv=Module["__Py_PreInitializeFromPyArgv"]=(a0,a1,a2)=>(__Py_PreInitializeFromPyArgv=Module["__Py_PreInitializeFromPyArgv"]=wasmExports["_Py_PreInitializeFromPyArgv"])(a0,a1,a2);var _Py_PreInitializeFromArgs=Module["_Py_PreInitializeFromArgs"]=(a0,a1,a2,a3)=>(_Py_PreInitializeFromArgs=Module["_Py_PreInitializeFromArgs"]=wasmExports["Py_PreInitializeFromArgs"])(a0,a1,a2,a3);var _Py_PreInitialize=Module["_Py_PreInitialize"]=(a0,a1)=>(_Py_PreInitialize=Module["_Py_PreInitialize"]=wasmExports["Py_PreInitialize"])(a0,a1);var _Py_InitializeEx=Module["_Py_InitializeEx"]=a0=>(_Py_InitializeEx=Module["_Py_InitializeEx"]=wasmExports["Py_InitializeEx"])(a0);var _Py_FatalError=Module["_Py_FatalError"]=a0=>(_Py_FatalError=Module["_Py_FatalError"]=wasmExports["Py_FatalError"])(a0);var _Py_Initialize=Module["_Py_Initialize"]=()=>(_Py_Initialize=Module["_Py_Initialize"]=wasmExports["Py_Initialize"])();var __Py_InitializeMain=Module["__Py_InitializeMain"]=a0=>(__Py_InitializeMain=Module["__Py_InitializeMain"]=wasmExports["_Py_InitializeMain"])(a0);var _PyGC_Collect=Module["_PyGC_Collect"]=()=>(_PyGC_Collect=Module["_PyGC_Collect"]=wasmExports["PyGC_Collect"])();var _PyInterpreterState_Delete=Module["_PyInterpreterState_Delete"]=a0=>(_PyInterpreterState_Delete=Module["_PyInterpreterState_Delete"]=wasmExports["PyInterpreterState_Delete"])(a0);var _Py_Finalize=Module["_Py_Finalize"]=()=>(_Py_Finalize=Module["_Py_Finalize"]=wasmExports["Py_Finalize"])();var _Py_NewInterpreterFromConfig=Module["_Py_NewInterpreterFromConfig"]=(a0,a1,a2)=>(_Py_NewInterpreterFromConfig=Module["_Py_NewInterpreterFromConfig"]=wasmExports["Py_NewInterpreterFromConfig"])(a0,a1,a2);var _PyInterpreterState_New=Module["_PyInterpreterState_New"]=()=>(_PyInterpreterState_New=Module["_PyInterpreterState_New"]=wasmExports["PyInterpreterState_New"])();var __PyThreadState_New=Module["__PyThreadState_New"]=a0=>(__PyThreadState_New=Module["__PyThreadState_New"]=wasmExports["_PyThreadState_New"])(a0);var __PyThreadState_Bind=Module["__PyThreadState_Bind"]=a0=>(__PyThreadState_Bind=Module["__PyThreadState_Bind"]=wasmExports["_PyThreadState_Bind"])(a0);var _PyErr_PrintEx=Module["_PyErr_PrintEx"]=a0=>(_PyErr_PrintEx=Module["_PyErr_PrintEx"]=wasmExports["PyErr_PrintEx"])(a0);var _PyThreadState_Swap=Module["_PyThreadState_Swap"]=a0=>(_PyThreadState_Swap=Module["_PyThreadState_Swap"]=wasmExports["PyThreadState_Swap"])(a0);var _PyThreadState_Clear=Module["_PyThreadState_Clear"]=a0=>(_PyThreadState_Clear=Module["_PyThreadState_Clear"]=wasmExports["PyThreadState_Clear"])(a0);var _Py_NewInterpreter=Module["_Py_NewInterpreter"]=()=>(_Py_NewInterpreter=Module["_Py_NewInterpreter"]=wasmExports["Py_NewInterpreter"])();var _Py_EndInterpreter=Module["_Py_EndInterpreter"]=a0=>(_Py_EndInterpreter=Module["_Py_EndInterpreter"]=wasmExports["Py_EndInterpreter"])(a0);var __Py_DumpExtensionModules=Module["__Py_DumpExtensionModules"]=(a0,a1)=>(__Py_DumpExtensionModules=Module["__Py_DumpExtensionModules"]=wasmExports["_Py_DumpExtensionModules"])(a0,a1);var __Py_write_noraise=Module["__Py_write_noraise"]=(a0,a1,a2)=>(__Py_write_noraise=Module["__Py_write_noraise"]=wasmExports["_Py_write_noraise"])(a0,a1,a2);var __Py_DumpASCII=Module["__Py_DumpASCII"]=(a0,a1)=>(__Py_DumpASCII=Module["__Py_DumpASCII"]=wasmExports["_Py_DumpASCII"])(a0,a1);var __Py_DumpDecimal=Module["__Py_DumpDecimal"]=(a0,a1)=>(__Py_DumpDecimal=Module["__Py_DumpDecimal"]=wasmExports["_Py_DumpDecimal"])(a0,a1);var __Py_DumpHexadecimal=Module["__Py_DumpHexadecimal"]=(a0,a1,a2)=>(__Py_DumpHexadecimal=Module["__Py_DumpHexadecimal"]=wasmExports["_Py_DumpHexadecimal"])(a0,a1,a2);var __Py_DumpTracebackThreads=Module["__Py_DumpTracebackThreads"]=(a0,a1,a2)=>(__Py_DumpTracebackThreads=Module["__Py_DumpTracebackThreads"]=wasmExports["_Py_DumpTracebackThreads"])(a0,a1,a2);var _vfprintf=Module["_vfprintf"]=(a0,a1,a2)=>(_vfprintf=Module["_vfprintf"]=wasmExports["vfprintf"])(a0,a1,a2);var __Py_FatalRefcountErrorFunc=Module["__Py_FatalRefcountErrorFunc"]=(a0,a1)=>(__Py_FatalRefcountErrorFunc=Module["__Py_FatalRefcountErrorFunc"]=wasmExports["_Py_FatalRefcountErrorFunc"])(a0,a1);var _Py_AtExit=Module["_Py_AtExit"]=a0=>(_Py_AtExit=Module["_Py_AtExit"]=wasmExports["Py_AtExit"])(a0);var _Py_Exit=Module["_Py_Exit"]=a0=>(_Py_Exit=Module["_Py_Exit"]=wasmExports["Py_Exit"])(a0);var _Py_FdIsInteractive=Module["_Py_FdIsInteractive"]=(a0,a1)=>(_Py_FdIsInteractive=Module["_Py_FdIsInteractive"]=wasmExports["Py_FdIsInteractive"])(a0,a1);var __Py_FdIsInteractive=Module["__Py_FdIsInteractive"]=(a0,a1)=>(__Py_FdIsInteractive=Module["__Py_FdIsInteractive"]=wasmExports["_Py_FdIsInteractive"])(a0,a1);var _PyOS_getsig=Module["_PyOS_getsig"]=a0=>(_PyOS_getsig=Module["_PyOS_getsig"]=wasmExports["PyOS_getsig"])(a0);var _signal=Module["_signal"]=(a0,a1)=>(_signal=Module["_signal"]=wasmExports["signal"])(a0,a1);var _PyOS_setsig=Module["_PyOS_setsig"]=(a0,a1)=>(_PyOS_setsig=Module["_PyOS_setsig"]=wasmExports["PyOS_setsig"])(a0,a1);var _siginterrupt=Module["_siginterrupt"]=(a0,a1)=>(_siginterrupt=Module["_siginterrupt"]=wasmExports["siginterrupt"])(a0,a1);var __PyInterpreterState_Enable=Module["__PyInterpreterState_Enable"]=(a0,a1)=>(__PyInterpreterState_Enable=Module["__PyInterpreterState_Enable"]=wasmExports["_PyInterpreterState_Enable"])(a0,a1);var __PyTraceMalloc_Start=Module["__PyTraceMalloc_Start"]=a0=>(__PyTraceMalloc_Start=Module["__PyTraceMalloc_Start"]=wasmExports["_PyTraceMalloc_Start"])(a0);var _PySys_SetObject=Module["_PySys_SetObject"]=(a0,a1)=>(_PySys_SetObject=Module["_PySys_SetObject"]=wasmExports["PySys_SetObject"])(a0,a1);var _fcntl=Module["_fcntl"]=(a0,a1,a2)=>(_fcntl=Module["_fcntl"]=wasmExports["fcntl"])(a0,a1,a2);var _PyOS_mystrnicmp=Module["_PyOS_mystrnicmp"]=(a0,a1,a2)=>(_PyOS_mystrnicmp=Module["_PyOS_mystrnicmp"]=wasmExports["PyOS_mystrnicmp"])(a0,a1,a2);var __PyThreadState_GetCurrent=Module["__PyThreadState_GetCurrent"]=()=>(__PyThreadState_GetCurrent=Module["__PyThreadState_GetCurrent"]=wasmExports["_PyThreadState_GetCurrent"])();var _PyThread_tss_create=Module["_PyThread_tss_create"]=a0=>(_PyThread_tss_create=Module["_PyThread_tss_create"]=wasmExports["PyThread_tss_create"])(a0);var _PyThread_tss_delete=Module["_PyThread_tss_delete"]=a0=>(_PyThread_tss_delete=Module["_PyThread_tss_delete"]=wasmExports["PyThread_tss_delete"])(a0);var _PyInterpreterState_Clear=Module["_PyInterpreterState_Clear"]=a0=>(_PyInterpreterState_Clear=Module["_PyInterpreterState_Clear"]=wasmExports["PyInterpreterState_Clear"])(a0);var __PyThreadState_Swap=Module["__PyThreadState_Swap"]=(a0,a1)=>(__PyThreadState_Swap=Module["__PyThreadState_Swap"]=wasmExports["_PyThreadState_Swap"])(a0,a1);var __PyInterpreterState_SetRunningMain=Module["__PyInterpreterState_SetRunningMain"]=a0=>(__PyInterpreterState_SetRunningMain=Module["__PyInterpreterState_SetRunningMain"]=wasmExports["_PyInterpreterState_SetRunningMain"])(a0);var __PyInterpreterState_SetNotRunningMain=Module["__PyInterpreterState_SetNotRunningMain"]=a0=>(__PyInterpreterState_SetNotRunningMain=Module["__PyInterpreterState_SetNotRunningMain"]=wasmExports["_PyInterpreterState_SetNotRunningMain"])(a0);var __PyInterpreterState_IsRunningMain=Module["__PyInterpreterState_IsRunningMain"]=a0=>(__PyInterpreterState_IsRunningMain=Module["__PyInterpreterState_IsRunningMain"]=wasmExports["_PyInterpreterState_IsRunningMain"])(a0);var __PyInterpreterState_RequiresIDRef=Module["__PyInterpreterState_RequiresIDRef"]=a0=>(__PyInterpreterState_RequiresIDRef=Module["__PyInterpreterState_RequiresIDRef"]=wasmExports["_PyInterpreterState_RequiresIDRef"])(a0);var __PyInterpreterState_RequireIDRef=Module["__PyInterpreterState_RequireIDRef"]=(a0,a1)=>(__PyInterpreterState_RequireIDRef=Module["__PyInterpreterState_RequireIDRef"]=wasmExports["_PyInterpreterState_RequireIDRef"])(a0,a1);var __PyInterpreterState_GetMainModule=Module["__PyInterpreterState_GetMainModule"]=a0=>(__PyInterpreterState_GetMainModule=Module["__PyInterpreterState_GetMainModule"]=wasmExports["_PyInterpreterState_GetMainModule"])(a0);var _PyInterpreterState_GetDict=Module["_PyInterpreterState_GetDict"]=a0=>(_PyInterpreterState_GetDict=Module["_PyInterpreterState_GetDict"]=wasmExports["PyInterpreterState_GetDict"])(a0);var __PyThreadState_Prealloc=Module["__PyThreadState_Prealloc"]=a0=>(__PyThreadState_Prealloc=Module["__PyThreadState_Prealloc"]=wasmExports["_PyThreadState_Prealloc"])(a0);var __PyThreadState_Init=Module["__PyThreadState_Init"]=a0=>(__PyThreadState_Init=Module["__PyThreadState_Init"]=wasmExports["_PyThreadState_Init"])(a0);var __PyThreadState_DeleteCurrent=Module["__PyThreadState_DeleteCurrent"]=a0=>(__PyThreadState_DeleteCurrent=Module["__PyThreadState_DeleteCurrent"]=wasmExports["_PyThreadState_DeleteCurrent"])(a0);var _PyThreadState_DeleteCurrent=Module["_PyThreadState_DeleteCurrent"]=()=>(_PyThreadState_DeleteCurrent=Module["_PyThreadState_DeleteCurrent"]=wasmExports["PyThreadState_DeleteCurrent"])();var __PyThreadState_GetDict=Module["__PyThreadState_GetDict"]=a0=>(__PyThreadState_GetDict=Module["__PyThreadState_GetDict"]=wasmExports["_PyThreadState_GetDict"])(a0);var _PyThreadState_GetInterpreter=Module["_PyThreadState_GetInterpreter"]=a0=>(_PyThreadState_GetInterpreter=Module["_PyThreadState_GetInterpreter"]=wasmExports["PyThreadState_GetInterpreter"])(a0);var _PyThreadState_GetID=Module["_PyThreadState_GetID"]=a0=>(_PyThreadState_GetID=Module["_PyThreadState_GetID"]=wasmExports["PyThreadState_GetID"])(a0);var _PyThreadState_SetAsyncExc=Module["_PyThreadState_SetAsyncExc"]=(a0,a1)=>(_PyThreadState_SetAsyncExc=Module["_PyThreadState_SetAsyncExc"]=wasmExports["PyThreadState_SetAsyncExc"])(a0,a1);var _PyInterpreterState_Head=Module["_PyInterpreterState_Head"]=()=>(_PyInterpreterState_Head=Module["_PyInterpreterState_Head"]=wasmExports["PyInterpreterState_Head"])();var _PyInterpreterState_Main=Module["_PyInterpreterState_Main"]=()=>(_PyInterpreterState_Main=Module["_PyInterpreterState_Main"]=wasmExports["PyInterpreterState_Main"])();var _PyInterpreterState_Next=Module["_PyInterpreterState_Next"]=a0=>(_PyInterpreterState_Next=Module["_PyInterpreterState_Next"]=wasmExports["PyInterpreterState_Next"])(a0);var __PyThread_CurrentFrames=Module["__PyThread_CurrentFrames"]=()=>(__PyThread_CurrentFrames=Module["__PyThread_CurrentFrames"]=wasmExports["_PyThread_CurrentFrames"])();var __PyThread_CurrentExceptions=Module["__PyThread_CurrentExceptions"]=()=>(__PyThread_CurrentExceptions=Module["__PyThread_CurrentExceptions"]=wasmExports["_PyThread_CurrentExceptions"])();var __PyGILState_GetInterpreterStateUnsafe=Module["__PyGILState_GetInterpreterStateUnsafe"]=()=>(__PyGILState_GetInterpreterStateUnsafe=Module["__PyGILState_GetInterpreterStateUnsafe"]=wasmExports["_PyGILState_GetInterpreterStateUnsafe"])();var __PyCrossInterpreterData_Init=Module["__PyCrossInterpreterData_Init"]=(a0,a1,a2,a3,a4)=>(__PyCrossInterpreterData_Init=Module["__PyCrossInterpreterData_Init"]=wasmExports["_PyCrossInterpreterData_Init"])(a0,a1,a2,a3,a4);var __PyCrossInterpreterData_InitWithSize=Module["__PyCrossInterpreterData_InitWithSize"]=(a0,a1,a2,a3,a4)=>(__PyCrossInterpreterData_InitWithSize=Module["__PyCrossInterpreterData_InitWithSize"]=wasmExports["_PyCrossInterpreterData_InitWithSize"])(a0,a1,a2,a3,a4);var __PyCrossInterpreterData_Clear=Module["__PyCrossInterpreterData_Clear"]=(a0,a1)=>(__PyCrossInterpreterData_Clear=Module["__PyCrossInterpreterData_Clear"]=wasmExports["_PyCrossInterpreterData_Clear"])(a0,a1);var __PyObject_CheckCrossInterpreterData=Module["__PyObject_CheckCrossInterpreterData"]=a0=>(__PyObject_CheckCrossInterpreterData=Module["__PyObject_CheckCrossInterpreterData"]=wasmExports["_PyObject_CheckCrossInterpreterData"])(a0);var __PyObject_GetCrossInterpreterData=Module["__PyObject_GetCrossInterpreterData"]=(a0,a1)=>(__PyObject_GetCrossInterpreterData=Module["__PyObject_GetCrossInterpreterData"]=wasmExports["_PyObject_GetCrossInterpreterData"])(a0,a1);var __PyCrossInterpreterData_Release=Module["__PyCrossInterpreterData_Release"]=a0=>(__PyCrossInterpreterData_Release=Module["__PyCrossInterpreterData_Release"]=wasmExports["_PyCrossInterpreterData_Release"])(a0);var __PyCrossInterpreterData_NewObject=Module["__PyCrossInterpreterData_NewObject"]=a0=>(__PyCrossInterpreterData_NewObject=Module["__PyCrossInterpreterData_NewObject"]=wasmExports["_PyCrossInterpreterData_NewObject"])(a0);var __PyCrossInterpreterData_ReleaseAndRawFree=Module["__PyCrossInterpreterData_ReleaseAndRawFree"]=a0=>(__PyCrossInterpreterData_ReleaseAndRawFree=Module["__PyCrossInterpreterData_ReleaseAndRawFree"]=wasmExports["_PyCrossInterpreterData_ReleaseAndRawFree"])(a0);var __PyCrossInterpreterData_RegisterClass=Module["__PyCrossInterpreterData_RegisterClass"]=(a0,a1)=>(__PyCrossInterpreterData_RegisterClass=Module["__PyCrossInterpreterData_RegisterClass"]=wasmExports["_PyCrossInterpreterData_RegisterClass"])(a0,a1);var __PyCrossInterpreterData_UnregisterClass=Module["__PyCrossInterpreterData_UnregisterClass"]=a0=>(__PyCrossInterpreterData_UnregisterClass=Module["__PyCrossInterpreterData_UnregisterClass"]=wasmExports["_PyCrossInterpreterData_UnregisterClass"])(a0);var __PyCrossInterpreterData_Lookup=Module["__PyCrossInterpreterData_Lookup"]=a0=>(__PyCrossInterpreterData_Lookup=Module["__PyCrossInterpreterData_Lookup"]=wasmExports["_PyCrossInterpreterData_Lookup"])(a0);var __PyInterpreterState_GetEvalFrameFunc=Module["__PyInterpreterState_GetEvalFrameFunc"]=a0=>(__PyInterpreterState_GetEvalFrameFunc=Module["__PyInterpreterState_GetEvalFrameFunc"]=wasmExports["_PyInterpreterState_GetEvalFrameFunc"])(a0);var __PyInterpreterState_SetEvalFrameFunc=Module["__PyInterpreterState_SetEvalFrameFunc"]=(a0,a1)=>(__PyInterpreterState_SetEvalFrameFunc=Module["__PyInterpreterState_SetEvalFrameFunc"]=wasmExports["_PyInterpreterState_SetEvalFrameFunc"])(a0,a1);var __PyInterpreterState_GetConfigCopy=Module["__PyInterpreterState_GetConfigCopy"]=a0=>(__PyInterpreterState_GetConfigCopy=Module["__PyInterpreterState_GetConfigCopy"]=wasmExports["_PyInterpreterState_GetConfigCopy"])(a0);var __PyRun_AnyFileObject=Module["__PyRun_AnyFileObject"]=(a0,a1,a2,a3)=>(__PyRun_AnyFileObject=Module["__PyRun_AnyFileObject"]=wasmExports["_PyRun_AnyFileObject"])(a0,a1,a2,a3);var __PyRun_InteractiveLoopObject=Module["__PyRun_InteractiveLoopObject"]=(a0,a1,a2)=>(__PyRun_InteractiveLoopObject=Module["__PyRun_InteractiveLoopObject"]=wasmExports["_PyRun_InteractiveLoopObject"])(a0,a1,a2);var __PyRun_SimpleFileObject=Module["__PyRun_SimpleFileObject"]=(a0,a1,a2,a3)=>(__PyRun_SimpleFileObject=Module["__PyRun_SimpleFileObject"]=wasmExports["_PyRun_SimpleFileObject"])(a0,a1,a2,a3);var _rewind=Module["_rewind"]=a0=>(_rewind=Module["_rewind"]=wasmExports["rewind"])(a0);var _PyRun_InteractiveLoopFlags=Module["_PyRun_InteractiveLoopFlags"]=(a0,a1,a2)=>(_PyRun_InteractiveLoopFlags=Module["_PyRun_InteractiveLoopFlags"]=wasmExports["PyRun_InteractiveLoopFlags"])(a0,a1,a2);var _PyRun_InteractiveOneObject=Module["_PyRun_InteractiveOneObject"]=(a0,a1,a2)=>(_PyRun_InteractiveOneObject=Module["_PyRun_InteractiveOneObject"]=wasmExports["PyRun_InteractiveOneObject"])(a0,a1,a2);var _PyRun_InteractiveOneFlags=Module["_PyRun_InteractiveOneFlags"]=(a0,a1,a2)=>(_PyRun_InteractiveOneFlags=Module["_PyRun_InteractiveOneFlags"]=wasmExports["PyRun_InteractiveOneFlags"])(a0,a1,a2);var _PyRun_SimpleFileExFlags=Module["_PyRun_SimpleFileExFlags"]=(a0,a1,a2,a3)=>(_PyRun_SimpleFileExFlags=Module["_PyRun_SimpleFileExFlags"]=wasmExports["PyRun_SimpleFileExFlags"])(a0,a1,a2,a3);var _PyRun_SimpleStringFlags=Module["_PyRun_SimpleStringFlags"]=(a0,a1)=>(_PyRun_SimpleStringFlags=Module["_PyRun_SimpleStringFlags"]=wasmExports["PyRun_SimpleStringFlags"])(a0,a1);var __Py_HandleSystemExit=Module["__Py_HandleSystemExit"]=a0=>(__Py_HandleSystemExit=Module["__Py_HandleSystemExit"]=wasmExports["_Py_HandleSystemExit"])(a0);var _PyErr_Display=Module["_PyErr_Display"]=(a0,a1,a2)=>(_PyErr_Display=Module["_PyErr_Display"]=wasmExports["PyErr_Display"])(a0,a1,a2);var __PyErr_Display=Module["__PyErr_Display"]=(a0,a1,a2,a3)=>(__PyErr_Display=Module["__PyErr_Display"]=wasmExports["_PyErr_Display"])(a0,a1,a2,a3);var __Py_WriteIndentedMargin=Module["__Py_WriteIndentedMargin"]=(a0,a1,a2)=>(__Py_WriteIndentedMargin=Module["__Py_WriteIndentedMargin"]=wasmExports["_Py_WriteIndentedMargin"])(a0,a1,a2);var __Py_WriteIndent=Module["__Py_WriteIndent"]=(a0,a1)=>(__Py_WriteIndent=Module["__Py_WriteIndent"]=wasmExports["_Py_WriteIndent"])(a0,a1);var __PyErr_DisplayException=Module["__PyErr_DisplayException"]=(a0,a1)=>(__PyErr_DisplayException=Module["__PyErr_DisplayException"]=wasmExports["_PyErr_DisplayException"])(a0,a1);var _PyRun_FileExFlags=Module["_PyRun_FileExFlags"]=(a0,a1,a2,a3,a4,a5,a6)=>(_PyRun_FileExFlags=Module["_PyRun_FileExFlags"]=wasmExports["PyRun_FileExFlags"])(a0,a1,a2,a3,a4,a5,a6);var _Py_CompileStringExFlags=Module["_Py_CompileStringExFlags"]=(a0,a1,a2,a3,a4)=>(_Py_CompileStringExFlags=Module["_Py_CompileStringExFlags"]=wasmExports["Py_CompileStringExFlags"])(a0,a1,a2,a3,a4);var _PyRun_AnyFile=Module["_PyRun_AnyFile"]=(a0,a1)=>(_PyRun_AnyFile=Module["_PyRun_AnyFile"]=wasmExports["PyRun_AnyFile"])(a0,a1);var _PyRun_AnyFileEx=Module["_PyRun_AnyFileEx"]=(a0,a1,a2)=>(_PyRun_AnyFileEx=Module["_PyRun_AnyFileEx"]=wasmExports["PyRun_AnyFileEx"])(a0,a1,a2);var _PyRun_AnyFileFlags=Module["_PyRun_AnyFileFlags"]=(a0,a1,a2)=>(_PyRun_AnyFileFlags=Module["_PyRun_AnyFileFlags"]=wasmExports["PyRun_AnyFileFlags"])(a0,a1,a2);var _PyRun_File=Module["_PyRun_File"]=(a0,a1,a2,a3,a4)=>(_PyRun_File=Module["_PyRun_File"]=wasmExports["PyRun_File"])(a0,a1,a2,a3,a4);var _PyRun_FileEx=Module["_PyRun_FileEx"]=(a0,a1,a2,a3,a4,a5)=>(_PyRun_FileEx=Module["_PyRun_FileEx"]=wasmExports["PyRun_FileEx"])(a0,a1,a2,a3,a4,a5);var _PyRun_FileFlags=Module["_PyRun_FileFlags"]=(a0,a1,a2,a3,a4,a5)=>(_PyRun_FileFlags=Module["_PyRun_FileFlags"]=wasmExports["PyRun_FileFlags"])(a0,a1,a2,a3,a4,a5);var _PyRun_SimpleFile=Module["_PyRun_SimpleFile"]=(a0,a1)=>(_PyRun_SimpleFile=Module["_PyRun_SimpleFile"]=wasmExports["PyRun_SimpleFile"])(a0,a1);var _PyRun_SimpleFileEx=Module["_PyRun_SimpleFileEx"]=(a0,a1,a2)=>(_PyRun_SimpleFileEx=Module["_PyRun_SimpleFileEx"]=wasmExports["PyRun_SimpleFileEx"])(a0,a1,a2);var _PyRun_String=Module["_PyRun_String"]=(a0,a1,a2,a3)=>(_PyRun_String=Module["_PyRun_String"]=wasmExports["PyRun_String"])(a0,a1,a2,a3);var _PyRun_SimpleString=Module["_PyRun_SimpleString"]=a0=>(_PyRun_SimpleString=Module["_PyRun_SimpleString"]=wasmExports["PyRun_SimpleString"])(a0);var _Py_CompileString=Module["_Py_CompileString"]=(a0,a1,a2)=>(_Py_CompileString=Module["_Py_CompileString"]=wasmExports["Py_CompileString"])(a0,a1,a2);var _Py_CompileStringFlags=Module["_Py_CompileStringFlags"]=(a0,a1,a2,a3)=>(_Py_CompileStringFlags=Module["_Py_CompileStringFlags"]=wasmExports["Py_CompileStringFlags"])(a0,a1,a2,a3);var _PyRun_InteractiveOne=Module["_PyRun_InteractiveOne"]=(a0,a1)=>(_PyRun_InteractiveOne=Module["_PyRun_InteractiveOne"]=wasmExports["PyRun_InteractiveOne"])(a0,a1);var _PyRun_InteractiveLoop=Module["_PyRun_InteractiveLoop"]=(a0,a1)=>(_PyRun_InteractiveLoop=Module["_PyRun_InteractiveLoop"]=wasmExports["PyRun_InteractiveLoop"])(a0,a1);var __PyTraceBack_Print_Indented=Module["__PyTraceBack_Print_Indented"]=(a0,a1,a2,a3,a4,a5)=>(__PyTraceBack_Print_Indented=Module["__PyTraceBack_Print_Indented"]=wasmExports["_PyTraceBack_Print_Indented"])(a0,a1,a2,a3,a4,a5);var __PyTime_Add=Module["__PyTime_Add"]=(a0,a1)=>(__PyTime_Add=Module["__PyTime_Add"]=wasmExports["_PyTime_Add"])(a0,a1);var __PyTime_MulDiv=Module["__PyTime_MulDiv"]=(a0,a1,a2)=>(__PyTime_MulDiv=Module["__PyTime_MulDiv"]=wasmExports["_PyTime_MulDiv"])(a0,a1,a2);var __PyLong_AsTime_t=Module["__PyLong_AsTime_t"]=a0=>(__PyLong_AsTime_t=Module["__PyLong_AsTime_t"]=wasmExports["_PyLong_AsTime_t"])(a0);var __PyLong_FromTime_t=Module["__PyLong_FromTime_t"]=a0=>(__PyLong_FromTime_t=Module["__PyLong_FromTime_t"]=wasmExports["_PyLong_FromTime_t"])(a0);var __PyTime_ObjectToTime_t=Module["__PyTime_ObjectToTime_t"]=(a0,a1,a2)=>(__PyTime_ObjectToTime_t=Module["__PyTime_ObjectToTime_t"]=wasmExports["_PyTime_ObjectToTime_t"])(a0,a1,a2);var __PyTime_ObjectToTimespec=Module["__PyTime_ObjectToTimespec"]=(a0,a1,a2,a3)=>(__PyTime_ObjectToTimespec=Module["__PyTime_ObjectToTimespec"]=wasmExports["_PyTime_ObjectToTimespec"])(a0,a1,a2,a3);var __PyTime_ObjectToTimeval=Module["__PyTime_ObjectToTimeval"]=(a0,a1,a2,a3)=>(__PyTime_ObjectToTimeval=Module["__PyTime_ObjectToTimeval"]=wasmExports["_PyTime_ObjectToTimeval"])(a0,a1,a2,a3);var __PyTime_FromSeconds=Module["__PyTime_FromSeconds"]=a0=>(__PyTime_FromSeconds=Module["__PyTime_FromSeconds"]=wasmExports["_PyTime_FromSeconds"])(a0);var __PyTime_FromNanoseconds=Module["__PyTime_FromNanoseconds"]=a0=>(__PyTime_FromNanoseconds=Module["__PyTime_FromNanoseconds"]=wasmExports["_PyTime_FromNanoseconds"])(a0);var __PyTime_FromMicrosecondsClamp=Module["__PyTime_FromMicrosecondsClamp"]=a0=>(__PyTime_FromMicrosecondsClamp=Module["__PyTime_FromMicrosecondsClamp"]=wasmExports["_PyTime_FromMicrosecondsClamp"])(a0);var __PyTime_FromNanosecondsObject=Module["__PyTime_FromNanosecondsObject"]=(a0,a1)=>(__PyTime_FromNanosecondsObject=Module["__PyTime_FromNanosecondsObject"]=wasmExports["_PyTime_FromNanosecondsObject"])(a0,a1);var __PyTime_FromTimespec=Module["__PyTime_FromTimespec"]=(a0,a1)=>(__PyTime_FromTimespec=Module["__PyTime_FromTimespec"]=wasmExports["_PyTime_FromTimespec"])(a0,a1);var __PyTime_FromTimeval=Module["__PyTime_FromTimeval"]=(a0,a1)=>(__PyTime_FromTimeval=Module["__PyTime_FromTimeval"]=wasmExports["_PyTime_FromTimeval"])(a0,a1);var __PyTime_FromSecondsObject=Module["__PyTime_FromSecondsObject"]=(a0,a1,a2)=>(__PyTime_FromSecondsObject=Module["__PyTime_FromSecondsObject"]=wasmExports["_PyTime_FromSecondsObject"])(a0,a1,a2);var __PyTime_FromMillisecondsObject=Module["__PyTime_FromMillisecondsObject"]=(a0,a1,a2)=>(__PyTime_FromMillisecondsObject=Module["__PyTime_FromMillisecondsObject"]=wasmExports["_PyTime_FromMillisecondsObject"])(a0,a1,a2);var __PyTime_AsSecondsDouble=Module["__PyTime_AsSecondsDouble"]=a0=>(__PyTime_AsSecondsDouble=Module["__PyTime_AsSecondsDouble"]=wasmExports["_PyTime_AsSecondsDouble"])(a0);var __PyTime_AsNanosecondsObject=Module["__PyTime_AsNanosecondsObject"]=a0=>(__PyTime_AsNanosecondsObject=Module["__PyTime_AsNanosecondsObject"]=wasmExports["_PyTime_AsNanosecondsObject"])(a0);var __PyTime_AsNanoseconds=Module["__PyTime_AsNanoseconds"]=a0=>(__PyTime_AsNanoseconds=Module["__PyTime_AsNanoseconds"]=wasmExports["_PyTime_AsNanoseconds"])(a0);var __PyTime_AsMilliseconds=Module["__PyTime_AsMilliseconds"]=(a0,a1)=>(__PyTime_AsMilliseconds=Module["__PyTime_AsMilliseconds"]=wasmExports["_PyTime_AsMilliseconds"])(a0,a1);var __PyTime_AsTimeval=Module["__PyTime_AsTimeval"]=(a0,a1,a2)=>(__PyTime_AsTimeval=Module["__PyTime_AsTimeval"]=wasmExports["_PyTime_AsTimeval"])(a0,a1,a2);var __PyTime_AsTimeval_clamp=Module["__PyTime_AsTimeval_clamp"]=(a0,a1,a2)=>(__PyTime_AsTimeval_clamp=Module["__PyTime_AsTimeval_clamp"]=wasmExports["_PyTime_AsTimeval_clamp"])(a0,a1,a2);var __PyTime_AsTimevalTime_t=Module["__PyTime_AsTimevalTime_t"]=(a0,a1,a2,a3)=>(__PyTime_AsTimevalTime_t=Module["__PyTime_AsTimevalTime_t"]=wasmExports["_PyTime_AsTimevalTime_t"])(a0,a1,a2,a3);var __PyTime_AsTimespec_clamp=Module["__PyTime_AsTimespec_clamp"]=(a0,a1)=>(__PyTime_AsTimespec_clamp=Module["__PyTime_AsTimespec_clamp"]=wasmExports["_PyTime_AsTimespec_clamp"])(a0,a1);var __PyTime_AsTimespec=Module["__PyTime_AsTimespec"]=(a0,a1)=>(__PyTime_AsTimespec=Module["__PyTime_AsTimespec"]=wasmExports["_PyTime_AsTimespec"])(a0,a1);var __PyTime_GetSystemClock=Module["__PyTime_GetSystemClock"]=()=>(__PyTime_GetSystemClock=Module["__PyTime_GetSystemClock"]=wasmExports["_PyTime_GetSystemClock"])();var _clock_gettime=Module["_clock_gettime"]=(a0,a1)=>(_clock_gettime=Module["_clock_gettime"]=wasmExports["clock_gettime"])(a0,a1);var __PyTime_GetSystemClockWithInfo=Module["__PyTime_GetSystemClockWithInfo"]=(a0,a1)=>(__PyTime_GetSystemClockWithInfo=Module["__PyTime_GetSystemClockWithInfo"]=wasmExports["_PyTime_GetSystemClockWithInfo"])(a0,a1);var _clock_getres=Module["_clock_getres"]=(a0,a1)=>(_clock_getres=Module["_clock_getres"]=wasmExports["clock_getres"])(a0,a1);var __PyTime_GetMonotonicClock=Module["__PyTime_GetMonotonicClock"]=()=>(__PyTime_GetMonotonicClock=Module["__PyTime_GetMonotonicClock"]=wasmExports["_PyTime_GetMonotonicClock"])();var __PyTime_GetMonotonicClockWithInfo=Module["__PyTime_GetMonotonicClockWithInfo"]=(a0,a1)=>(__PyTime_GetMonotonicClockWithInfo=Module["__PyTime_GetMonotonicClockWithInfo"]=wasmExports["_PyTime_GetMonotonicClockWithInfo"])(a0,a1);var __PyTime_GetPerfCounterWithInfo=Module["__PyTime_GetPerfCounterWithInfo"]=(a0,a1)=>(__PyTime_GetPerfCounterWithInfo=Module["__PyTime_GetPerfCounterWithInfo"]=wasmExports["_PyTime_GetPerfCounterWithInfo"])(a0,a1);var __PyTime_localtime=Module["__PyTime_localtime"]=(a0,a1)=>(__PyTime_localtime=Module["__PyTime_localtime"]=wasmExports["_PyTime_localtime"])(a0,a1);var _localtime_r=Module["_localtime_r"]=(a0,a1)=>(_localtime_r=Module["_localtime_r"]=wasmExports["localtime_r"])(a0,a1);var __PyTime_gmtime=Module["__PyTime_gmtime"]=(a0,a1)=>(__PyTime_gmtime=Module["__PyTime_gmtime"]=wasmExports["_PyTime_gmtime"])(a0,a1);var _gmtime_r=Module["_gmtime_r"]=(a0,a1)=>(_gmtime_r=Module["_gmtime_r"]=wasmExports["gmtime_r"])(a0,a1);var __PyDeadline_Init=Module["__PyDeadline_Init"]=a0=>(__PyDeadline_Init=Module["__PyDeadline_Init"]=wasmExports["_PyDeadline_Init"])(a0);var __PyDeadline_Get=Module["__PyDeadline_Get"]=a0=>(__PyDeadline_Get=Module["__PyDeadline_Get"]=wasmExports["_PyDeadline_Get"])(a0);var __PyOS_URandom=Module["__PyOS_URandom"]=(a0,a1)=>(__PyOS_URandom=Module["__PyOS_URandom"]=wasmExports["_PyOS_URandom"])(a0,a1);var __Py_open=Module["__Py_open"]=(a0,a1)=>(__Py_open=Module["__Py_open"]=wasmExports["_Py_open"])(a0,a1);var _close=Module["_close"]=a0=>(_close=Module["_close"]=wasmExports["close"])(a0);var __Py_fstat=Module["__Py_fstat"]=(a0,a1)=>(__Py_fstat=Module["__Py_fstat"]=wasmExports["_Py_fstat"])(a0,a1);var __Py_read=Module["__Py_read"]=(a0,a1,a2)=>(__Py_read=Module["__Py_read"]=wasmExports["_Py_read"])(a0,a1,a2);var __Py_open_noraise=Module["__Py_open_noraise"]=(a0,a1)=>(__Py_open_noraise=Module["__Py_open_noraise"]=wasmExports["_Py_open_noraise"])(a0,a1);var _read=Module["_read"]=(a0,a1,a2)=>(_read=Module["_read"]=wasmExports["read"])(a0,a1,a2);var __PyOS_URandomNonblock=Module["__PyOS_URandomNonblock"]=(a0,a1)=>(__PyOS_URandomNonblock=Module["__PyOS_URandomNonblock"]=wasmExports["_PyOS_URandomNonblock"])(a0,a1);var _PySys_AddAuditHook=Module["_PySys_AddAuditHook"]=(a0,a1)=>(_PySys_AddAuditHook=Module["_PySys_AddAuditHook"]=wasmExports["PySys_AddAuditHook"])(a0,a1);var __PySys_GetSizeOf=Module["__PySys_GetSizeOf"]=a0=>(__PySys_GetSizeOf=Module["__PySys_GetSizeOf"]=wasmExports["_PySys_GetSizeOf"])(a0);var _PyUnstable_PerfMapState_Init=Module["_PyUnstable_PerfMapState_Init"]=()=>(_PyUnstable_PerfMapState_Init=Module["_PyUnstable_PerfMapState_Init"]=wasmExports["PyUnstable_PerfMapState_Init"])();var _getpid=Module["_getpid"]=()=>(_getpid=Module["_getpid"]=wasmExports["getpid"])();var _open=Module["_open"]=(a0,a1,a2)=>(_open=Module["_open"]=wasmExports["open"])(a0,a1,a2);var _PyUnstable_WritePerfMapEntry=Module["_PyUnstable_WritePerfMapEntry"]=(a0,a1,a2)=>(_PyUnstable_WritePerfMapEntry=Module["_PyUnstable_WritePerfMapEntry"]=wasmExports["PyUnstable_WritePerfMapEntry"])(a0,a1,a2);var _PyUnstable_PerfMapState_Fini=Module["_PyUnstable_PerfMapState_Fini"]=()=>(_PyUnstable_PerfMapState_Fini=Module["_PyUnstable_PerfMapState_Fini"]=wasmExports["PyUnstable_PerfMapState_Fini"])();var _PySys_ResetWarnOptions=Module["_PySys_ResetWarnOptions"]=()=>(_PySys_ResetWarnOptions=Module["_PySys_ResetWarnOptions"]=wasmExports["PySys_ResetWarnOptions"])();var _PySys_AddWarnOptionUnicode=Module["_PySys_AddWarnOptionUnicode"]=a0=>(_PySys_AddWarnOptionUnicode=Module["_PySys_AddWarnOptionUnicode"]=wasmExports["PySys_AddWarnOptionUnicode"])(a0);var _PySys_AddWarnOption=Module["_PySys_AddWarnOption"]=a0=>(_PySys_AddWarnOption=Module["_PySys_AddWarnOption"]=wasmExports["PySys_AddWarnOption"])(a0);var _PySys_HasWarnOptions=Module["_PySys_HasWarnOptions"]=()=>(_PySys_HasWarnOptions=Module["_PySys_HasWarnOptions"]=wasmExports["PySys_HasWarnOptions"])();var _PySys_AddXOption=Module["_PySys_AddXOption"]=a0=>(_PySys_AddXOption=Module["_PySys_AddXOption"]=wasmExports["PySys_AddXOption"])(a0);var _PySys_GetXOptions=Module["_PySys_GetXOptions"]=()=>(_PySys_GetXOptions=Module["_PySys_GetXOptions"]=wasmExports["PySys_GetXOptions"])();var _PyThread_GetInfo=Module["_PyThread_GetInfo"]=()=>(_PyThread_GetInfo=Module["_PyThread_GetInfo"]=wasmExports["PyThread_GetInfo"])();var _PySys_SetPath=Module["_PySys_SetPath"]=a0=>(_PySys_SetPath=Module["_PySys_SetPath"]=wasmExports["PySys_SetPath"])(a0);var _PySys_SetArgvEx=Module["_PySys_SetArgvEx"]=(a0,a1,a2)=>(_PySys_SetArgvEx=Module["_PySys_SetArgvEx"]=wasmExports["PySys_SetArgvEx"])(a0,a1,a2);var _PySys_SetArgv=Module["_PySys_SetArgv"]=(a0,a1)=>(_PySys_SetArgv=Module["_PySys_SetArgv"]=wasmExports["PySys_SetArgv"])(a0,a1);var _PySys_WriteStdout=Module["_PySys_WriteStdout"]=(a0,a1)=>(_PySys_WriteStdout=Module["_PySys_WriteStdout"]=wasmExports["PySys_WriteStdout"])(a0,a1);var _PySys_FormatStdout=Module["_PySys_FormatStdout"]=(a0,a1)=>(_PySys_FormatStdout=Module["_PySys_FormatStdout"]=wasmExports["PySys_FormatStdout"])(a0,a1);var _pthread_condattr_init=Module["_pthread_condattr_init"]=a0=>(_pthread_condattr_init=Module["_pthread_condattr_init"]=wasmExports["pthread_condattr_init"])(a0);var _pthread_condattr_setclock=Module["_pthread_condattr_setclock"]=(a0,a1)=>(_pthread_condattr_setclock=Module["_pthread_condattr_setclock"]=wasmExports["pthread_condattr_setclock"])(a0,a1);var _pthread_cond_init=Module["_pthread_cond_init"]=(a0,a1)=>(_pthread_cond_init=Module["_pthread_cond_init"]=wasmExports["pthread_cond_init"])(a0,a1);var _PyThread_start_new_thread=Module["_PyThread_start_new_thread"]=(a0,a1)=>(_PyThread_start_new_thread=Module["_PyThread_start_new_thread"]=wasmExports["PyThread_start_new_thread"])(a0,a1);var _pthread_attr_init=Module["_pthread_attr_init"]=a0=>(_pthread_attr_init=Module["_pthread_attr_init"]=wasmExports["pthread_attr_init"])(a0);var _pthread_attr_setstacksize=Module["_pthread_attr_setstacksize"]=(a0,a1)=>(_pthread_attr_setstacksize=Module["_pthread_attr_setstacksize"]=wasmExports["pthread_attr_setstacksize"])(a0,a1);var _pthread_attr_destroy=Module["_pthread_attr_destroy"]=a0=>(_pthread_attr_destroy=Module["_pthread_attr_destroy"]=wasmExports["pthread_attr_destroy"])(a0);var _pthread_create=Module["_pthread_create"]=(a0,a1,a2,a3)=>(_pthread_create=Module["_pthread_create"]=wasmExports["pthread_create"])(a0,a1,a2,a3);var _pthread_detach=Module["_pthread_detach"]=a0=>(_pthread_detach=Module["_pthread_detach"]=wasmExports["pthread_detach"])(a0);var _pthread_self=Module["_pthread_self"]=()=>(_pthread_self=Module["_pthread_self"]=wasmExports["pthread_self"])();var _pthread_exit=Module["_pthread_exit"]=a0=>(_pthread_exit=Module["_pthread_exit"]=wasmExports["pthread_exit"])(a0);var _PyThread_acquire_lock_timed=Module["_PyThread_acquire_lock_timed"]=(a0,a1,a2)=>(_PyThread_acquire_lock_timed=Module["_PyThread_acquire_lock_timed"]=wasmExports["PyThread_acquire_lock_timed"])(a0,a1,a2);var _pthread_mutex_trylock=Module["_pthread_mutex_trylock"]=a0=>(_pthread_mutex_trylock=Module["_pthread_mutex_trylock"]=wasmExports["pthread_mutex_trylock"])(a0);var _PyThread_create_key=Module["_PyThread_create_key"]=()=>(_PyThread_create_key=Module["_PyThread_create_key"]=wasmExports["PyThread_create_key"])();var _pthread_key_create=Module["_pthread_key_create"]=(a0,a1)=>(_pthread_key_create=Module["_pthread_key_create"]=wasmExports["pthread_key_create"])(a0,a1);var _pthread_key_delete=Module["_pthread_key_delete"]=a0=>(_pthread_key_delete=Module["_pthread_key_delete"]=wasmExports["pthread_key_delete"])(a0);var _PyThread_delete_key=Module["_PyThread_delete_key"]=a0=>(_PyThread_delete_key=Module["_PyThread_delete_key"]=wasmExports["PyThread_delete_key"])(a0);var _PyThread_delete_key_value=Module["_PyThread_delete_key_value"]=a0=>(_PyThread_delete_key_value=Module["_PyThread_delete_key_value"]=wasmExports["PyThread_delete_key_value"])(a0);var _pthread_setspecific=Module["_pthread_setspecific"]=(a0,a1)=>(_pthread_setspecific=Module["_pthread_setspecific"]=wasmExports["pthread_setspecific"])(a0,a1);var _PyThread_set_key_value=Module["_PyThread_set_key_value"]=(a0,a1)=>(_PyThread_set_key_value=Module["_PyThread_set_key_value"]=wasmExports["PyThread_set_key_value"])(a0,a1);var _PyThread_get_key_value=Module["_PyThread_get_key_value"]=a0=>(_PyThread_get_key_value=Module["_PyThread_get_key_value"]=wasmExports["PyThread_get_key_value"])(a0);var _pthread_getspecific=Module["_pthread_getspecific"]=a0=>(_pthread_getspecific=Module["_pthread_getspecific"]=wasmExports["pthread_getspecific"])(a0);var _PyThread_ReInitTLS=Module["_PyThread_ReInitTLS"]=()=>(_PyThread_ReInitTLS=Module["_PyThread_ReInitTLS"]=wasmExports["PyThread_ReInitTLS"])();var _PyThread_get_stacksize=Module["_PyThread_get_stacksize"]=()=>(_PyThread_get_stacksize=Module["_PyThread_get_stacksize"]=wasmExports["PyThread_get_stacksize"])();var _PyThread_set_stacksize=Module["_PyThread_set_stacksize"]=a0=>(_PyThread_set_stacksize=Module["_PyThread_set_stacksize"]=wasmExports["PyThread_set_stacksize"])(a0);var _PyThread_tss_alloc=Module["_PyThread_tss_alloc"]=()=>(_PyThread_tss_alloc=Module["_PyThread_tss_alloc"]=wasmExports["PyThread_tss_alloc"])();var _PyThread_tss_free=Module["_PyThread_tss_free"]=a0=>(_PyThread_tss_free=Module["_PyThread_tss_free"]=wasmExports["PyThread_tss_free"])(a0);var _confstr=Module["_confstr"]=(a0,a1,a2)=>(_confstr=Module["_confstr"]=wasmExports["confstr"])(a0,a1,a2);var __PyTraceback_Add=Module["__PyTraceback_Add"]=(a0,a1,a2)=>(__PyTraceback_Add=Module["__PyTraceback_Add"]=wasmExports["_PyTraceback_Add"])(a0,a1,a2);var __PyTraceMalloc_Init=Module["__PyTraceMalloc_Init"]=()=>(__PyTraceMalloc_Init=Module["__PyTraceMalloc_Init"]=wasmExports["_PyTraceMalloc_Init"])();var __PyTraceMalloc_Stop=Module["__PyTraceMalloc_Stop"]=()=>(__PyTraceMalloc_Stop=Module["__PyTraceMalloc_Stop"]=wasmExports["_PyTraceMalloc_Stop"])();var _PyTraceMalloc_Track=Module["_PyTraceMalloc_Track"]=(a0,a1,a2)=>(_PyTraceMalloc_Track=Module["_PyTraceMalloc_Track"]=wasmExports["PyTraceMalloc_Track"])(a0,a1,a2);var _PyTraceMalloc_Untrack=Module["_PyTraceMalloc_Untrack"]=(a0,a1)=>(_PyTraceMalloc_Untrack=Module["_PyTraceMalloc_Untrack"]=wasmExports["PyTraceMalloc_Untrack"])(a0,a1);var __PyTraceMalloc_GetTraceback=Module["__PyTraceMalloc_GetTraceback"]=(a0,a1)=>(__PyTraceMalloc_GetTraceback=Module["__PyTraceMalloc_GetTraceback"]=wasmExports["_PyTraceMalloc_GetTraceback"])(a0,a1);var __PyTraceMalloc_IsTracing=Module["__PyTraceMalloc_IsTracing"]=()=>(__PyTraceMalloc_IsTracing=Module["__PyTraceMalloc_IsTracing"]=wasmExports["_PyTraceMalloc_IsTracing"])();var __PyTraceMalloc_ClearTraces=Module["__PyTraceMalloc_ClearTraces"]=()=>(__PyTraceMalloc_ClearTraces=Module["__PyTraceMalloc_ClearTraces"]=wasmExports["_PyTraceMalloc_ClearTraces"])();var __PyTraceMalloc_GetTraces=Module["__PyTraceMalloc_GetTraces"]=()=>(__PyTraceMalloc_GetTraces=Module["__PyTraceMalloc_GetTraces"]=wasmExports["_PyTraceMalloc_GetTraces"])();var __PyTraceMalloc_GetObjectTraceback=Module["__PyTraceMalloc_GetObjectTraceback"]=a0=>(__PyTraceMalloc_GetObjectTraceback=Module["__PyTraceMalloc_GetObjectTraceback"]=wasmExports["_PyTraceMalloc_GetObjectTraceback"])(a0);var __PyTraceMalloc_GetTracebackLimit=Module["__PyTraceMalloc_GetTracebackLimit"]=()=>(__PyTraceMalloc_GetTracebackLimit=Module["__PyTraceMalloc_GetTracebackLimit"]=wasmExports["_PyTraceMalloc_GetTracebackLimit"])();var __PyTraceMalloc_GetMemory=Module["__PyTraceMalloc_GetMemory"]=()=>(__PyTraceMalloc_GetMemory=Module["__PyTraceMalloc_GetMemory"]=wasmExports["_PyTraceMalloc_GetMemory"])();var __PyTraceMalloc_GetTracedMemory=Module["__PyTraceMalloc_GetTracedMemory"]=()=>(__PyTraceMalloc_GetTracedMemory=Module["__PyTraceMalloc_GetTracedMemory"]=wasmExports["_PyTraceMalloc_GetTracedMemory"])();var __PyTraceMalloc_ResetPeak=Module["__PyTraceMalloc_ResetPeak"]=()=>(__PyTraceMalloc_ResetPeak=Module["__PyTraceMalloc_ResetPeak"]=wasmExports["_PyTraceMalloc_ResetPeak"])();var _PyOS_mystricmp=Module["_PyOS_mystricmp"]=(a0,a1)=>(_PyOS_mystricmp=Module["_PyOS_mystricmp"]=wasmExports["PyOS_mystricmp"])(a0,a1);var __Py_strhex=Module["__Py_strhex"]=(a0,a1)=>(__Py_strhex=Module["__Py_strhex"]=wasmExports["_Py_strhex"])(a0,a1);var __Py_strhex_bytes=Module["__Py_strhex_bytes"]=(a0,a1)=>(__Py_strhex_bytes=Module["__Py_strhex_bytes"]=wasmExports["_Py_strhex_bytes"])(a0,a1);var __Py_strhex_bytes_with_sep=Module["__Py_strhex_bytes_with_sep"]=(a0,a1,a2,a3)=>(__Py_strhex_bytes_with_sep=Module["__Py_strhex_bytes_with_sep"]=wasmExports["_Py_strhex_bytes_with_sep"])(a0,a1,a2,a3);var _localeconv=Module["_localeconv"]=()=>(_localeconv=Module["_localeconv"]=wasmExports["localeconv"])();var __Py_GetLocaleconvNumeric=Module["__Py_GetLocaleconvNumeric"]=(a0,a1,a2)=>(__Py_GetLocaleconvNumeric=Module["__Py_GetLocaleconvNumeric"]=wasmExports["_Py_GetLocaleconvNumeric"])(a0,a1,a2);var __Py_device_encoding=Module["__Py_device_encoding"]=a0=>(__Py_device_encoding=Module["__Py_device_encoding"]=wasmExports["_Py_device_encoding"])(a0);var __Py_GetLocaleEncodingObject=Module["__Py_GetLocaleEncodingObject"]=()=>(__Py_GetLocaleEncodingObject=Module["__Py_GetLocaleEncodingObject"]=wasmExports["_Py_GetLocaleEncodingObject"])();var _mbstowcs=Module["_mbstowcs"]=(a0,a1,a2)=>(_mbstowcs=Module["_mbstowcs"]=wasmExports["mbstowcs"])(a0,a1,a2);var _mbrtowc=Module["_mbrtowc"]=(a0,a1,a2,a3)=>(_mbrtowc=Module["_mbrtowc"]=wasmExports["mbrtowc"])(a0,a1,a2,a3);var _Py_EncodeLocale=Module["_Py_EncodeLocale"]=(a0,a1)=>(_Py_EncodeLocale=Module["_Py_EncodeLocale"]=wasmExports["Py_EncodeLocale"])(a0,a1);var __Py_EncodeLocaleRaw=Module["__Py_EncodeLocaleRaw"]=(a0,a1)=>(__Py_EncodeLocaleRaw=Module["__Py_EncodeLocaleRaw"]=wasmExports["_Py_EncodeLocaleRaw"])(a0,a1);var _fstat=Module["_fstat"]=(a0,a1)=>(_fstat=Module["_fstat"]=wasmExports["fstat"])(a0,a1);var _stat=Module["_stat"]=(a0,a1)=>(_stat=Module["_stat"]=wasmExports["stat"])(a0,a1);var __Py_stat=Module["__Py_stat"]=(a0,a1)=>(__Py_stat=Module["__Py_stat"]=wasmExports["_Py_stat"])(a0,a1);var __Py_get_inheritable=Module["__Py_get_inheritable"]=a0=>(__Py_get_inheritable=Module["__Py_get_inheritable"]=wasmExports["_Py_get_inheritable"])(a0);var __Py_set_inheritable=Module["__Py_set_inheritable"]=(a0,a1,a2)=>(__Py_set_inheritable=Module["__Py_set_inheritable"]=wasmExports["_Py_set_inheritable"])(a0,a1,a2);var __Py_set_inheritable_async_safe=Module["__Py_set_inheritable_async_safe"]=(a0,a1,a2)=>(__Py_set_inheritable_async_safe=Module["__Py_set_inheritable_async_safe"]=wasmExports["_Py_set_inheritable_async_safe"])(a0,a1,a2);var __Py_wfopen=Module["__Py_wfopen"]=(a0,a1)=>(__Py_wfopen=Module["__Py_wfopen"]=wasmExports["_Py_wfopen"])(a0,a1);var _wcstombs=Module["_wcstombs"]=(a0,a1,a2)=>(_wcstombs=Module["_wcstombs"]=wasmExports["wcstombs"])(a0,a1,a2);var _fopen=Module["_fopen"]=(a0,a1)=>(_fopen=Module["_fopen"]=wasmExports["fopen"])(a0,a1);var _write=Module["_write"]=(a0,a1,a2)=>(_write=Module["_write"]=wasmExports["write"])(a0,a1,a2);var _readlink=Module["_readlink"]=(a0,a1,a2)=>(_readlink=Module["_readlink"]=wasmExports["readlink"])(a0,a1,a2);var _realpath=Module["_realpath"]=(a0,a1)=>(_realpath=Module["_realpath"]=wasmExports["realpath"])(a0,a1);var _getcwd=Module["_getcwd"]=(a0,a1)=>(_getcwd=Module["_getcwd"]=wasmExports["getcwd"])(a0,a1);var __Py_normpath=Module["__Py_normpath"]=(a0,a1)=>(__Py_normpath=Module["__Py_normpath"]=wasmExports["_Py_normpath"])(a0,a1);var __Py_get_blocking=Module["__Py_get_blocking"]=a0=>(__Py_get_blocking=Module["__Py_get_blocking"]=wasmExports["_Py_get_blocking"])(a0);var __Py_set_blocking=Module["__Py_set_blocking"]=(a0,a1)=>(__Py_set_blocking=Module["__Py_set_blocking"]=wasmExports["_Py_set_blocking"])(a0,a1);var __Py_closerange=Module["__Py_closerange"]=(a0,a1)=>(__Py_closerange=Module["__Py_closerange"]=wasmExports["_Py_closerange"])(a0,a1);var __Py_UTF8_Edit_Cost=Module["__Py_UTF8_Edit_Cost"]=(a0,a1,a2)=>(__Py_UTF8_Edit_Cost=Module["__Py_UTF8_Edit_Cost"]=wasmExports["_Py_UTF8_Edit_Cost"])(a0,a1,a2);var _dlopen=Module["_dlopen"]=(a0,a1)=>(_dlopen=Module["_dlopen"]=wasmExports["dlopen"])(a0,a1);var _dlerror=Module["_dlerror"]=()=>(_dlerror=Module["_dlerror"]=wasmExports["dlerror"])();var _dlsym=Module["_dlsym"]=(a0,a1)=>(_dlsym=Module["_dlsym"]=wasmExports["dlsym"])(a0,a1);var _PyErr_SetInterruptEx=Module["_PyErr_SetInterruptEx"]=a0=>(_PyErr_SetInterruptEx=Module["_PyErr_SetInterruptEx"]=wasmExports["PyErr_SetInterruptEx"])(a0);var _PyInit__ctypes=Module["_PyInit__ctypes"]=()=>(_PyInit__ctypes=Module["_PyInit__ctypes"]=wasmExports["PyInit__ctypes"])();var _PyInit__posixsubprocess=Module["_PyInit__posixsubprocess"]=()=>(_PyInit__posixsubprocess=Module["_PyInit__posixsubprocess"]=wasmExports["PyInit__posixsubprocess"])();var _PyInit__bz2=Module["_PyInit__bz2"]=()=>(_PyInit__bz2=Module["_PyInit__bz2"]=wasmExports["PyInit__bz2"])();var _PyInit_zlib=Module["_PyInit_zlib"]=()=>(_PyInit_zlib=Module["_PyInit_zlib"]=wasmExports["PyInit_zlib"])();var _PyInit__xxsubinterpreters=Module["_PyInit__xxsubinterpreters"]=()=>(_PyInit__xxsubinterpreters=Module["_PyInit__xxsubinterpreters"]=wasmExports["PyInit__xxsubinterpreters"])();var _PyInit_array=Module["_PyInit_array"]=()=>(_PyInit_array=Module["_PyInit_array"]=wasmExports["PyInit_array"])();var _PyInit__asyncio=Module["_PyInit__asyncio"]=()=>(_PyInit__asyncio=Module["_PyInit__asyncio"]=wasmExports["PyInit__asyncio"])();var _PyInit__bisect=Module["_PyInit__bisect"]=()=>(_PyInit__bisect=Module["_PyInit__bisect"]=wasmExports["PyInit__bisect"])();var _PyInit__contextvars=Module["_PyInit__contextvars"]=()=>(_PyInit__contextvars=Module["_PyInit__contextvars"]=wasmExports["PyInit__contextvars"])();var _PyInit__csv=Module["_PyInit__csv"]=()=>(_PyInit__csv=Module["_PyInit__csv"]=wasmExports["PyInit__csv"])();var _PyInit__heapq=Module["_PyInit__heapq"]=()=>(_PyInit__heapq=Module["_PyInit__heapq"]=wasmExports["PyInit__heapq"])();var _PyInit__json=Module["_PyInit__json"]=()=>(_PyInit__json=Module["_PyInit__json"]=wasmExports["PyInit__json"])();var _PyInit__lsprof=Module["_PyInit__lsprof"]=()=>(_PyInit__lsprof=Module["_PyInit__lsprof"]=wasmExports["PyInit__lsprof"])();var _PyInit__opcode=Module["_PyInit__opcode"]=()=>(_PyInit__opcode=Module["_PyInit__opcode"]=wasmExports["PyInit__opcode"])();var _PyInit__pickle=Module["_PyInit__pickle"]=()=>(_PyInit__pickle=Module["_PyInit__pickle"]=wasmExports["PyInit__pickle"])();var _PyInit__queue=Module["_PyInit__queue"]=()=>(_PyInit__queue=Module["_PyInit__queue"]=wasmExports["PyInit__queue"])();var _PyInit__random=Module["_PyInit__random"]=()=>(_PyInit__random=Module["_PyInit__random"]=wasmExports["PyInit__random"])();var _PyInit__struct=Module["_PyInit__struct"]=()=>(_PyInit__struct=Module["_PyInit__struct"]=wasmExports["PyInit__struct"])();var _PyInit__zoneinfo=Module["_PyInit__zoneinfo"]=()=>(_PyInit__zoneinfo=Module["_PyInit__zoneinfo"]=wasmExports["PyInit__zoneinfo"])();var _PyInit_audioop=Module["_PyInit_audioop"]=()=>(_PyInit_audioop=Module["_PyInit_audioop"]=wasmExports["PyInit_audioop"])();var _PyInit_math=Module["_PyInit_math"]=()=>(_PyInit_math=Module["_PyInit_math"]=wasmExports["PyInit_math"])();var _PyInit_cmath=Module["_PyInit_cmath"]=()=>(_PyInit_cmath=Module["_PyInit_cmath"]=wasmExports["PyInit_cmath"])();var _PyInit__statistics=Module["_PyInit__statistics"]=()=>(_PyInit__statistics=Module["_PyInit__statistics"]=wasmExports["PyInit__statistics"])();var _PyInit__datetime=Module["_PyInit__datetime"]=()=>(_PyInit__datetime=Module["_PyInit__datetime"]=wasmExports["PyInit__datetime"])();var _PyInit__decimal=Module["_PyInit__decimal"]=()=>(_PyInit__decimal=Module["_PyInit__decimal"]=wasmExports["PyInit__decimal"])();var _PyInit_binascii=Module["_PyInit_binascii"]=()=>(_PyInit_binascii=Module["_PyInit_binascii"]=wasmExports["PyInit_binascii"])();var _PyInit__md5=Module["_PyInit__md5"]=()=>(_PyInit__md5=Module["_PyInit__md5"]=wasmExports["PyInit__md5"])();var _PyInit__sha1=Module["_PyInit__sha1"]=()=>(_PyInit__sha1=Module["_PyInit__sha1"]=wasmExports["PyInit__sha1"])();var _PyInit__sha2=Module["_PyInit__sha2"]=()=>(_PyInit__sha2=Module["_PyInit__sha2"]=wasmExports["PyInit__sha2"])();var _PyInit__sha3=Module["_PyInit__sha3"]=()=>(_PyInit__sha3=Module["_PyInit__sha3"]=wasmExports["PyInit__sha3"])();var _PyInit__blake2=Module["_PyInit__blake2"]=()=>(_PyInit__blake2=Module["_PyInit__blake2"]=wasmExports["PyInit__blake2"])();var _PyInit_pyexpat=Module["_PyInit_pyexpat"]=()=>(_PyInit_pyexpat=Module["_PyInit_pyexpat"]=wasmExports["PyInit_pyexpat"])();var _PyInit__elementtree=Module["_PyInit__elementtree"]=()=>(_PyInit__elementtree=Module["_PyInit__elementtree"]=wasmExports["PyInit__elementtree"])();var _PyInit__codecs_cn=Module["_PyInit__codecs_cn"]=()=>(_PyInit__codecs_cn=Module["_PyInit__codecs_cn"]=wasmExports["PyInit__codecs_cn"])();var _PyInit__codecs_hk=Module["_PyInit__codecs_hk"]=()=>(_PyInit__codecs_hk=Module["_PyInit__codecs_hk"]=wasmExports["PyInit__codecs_hk"])();var _PyInit__codecs_iso2022=Module["_PyInit__codecs_iso2022"]=()=>(_PyInit__codecs_iso2022=Module["_PyInit__codecs_iso2022"]=wasmExports["PyInit__codecs_iso2022"])();var _PyInit__codecs_jp=Module["_PyInit__codecs_jp"]=()=>(_PyInit__codecs_jp=Module["_PyInit__codecs_jp"]=wasmExports["PyInit__codecs_jp"])();var _PyInit__codecs_kr=Module["_PyInit__codecs_kr"]=()=>(_PyInit__codecs_kr=Module["_PyInit__codecs_kr"]=wasmExports["PyInit__codecs_kr"])();var _PyInit__codecs_tw=Module["_PyInit__codecs_tw"]=()=>(_PyInit__codecs_tw=Module["_PyInit__codecs_tw"]=wasmExports["PyInit__codecs_tw"])();var _PyInit__multibytecodec=Module["_PyInit__multibytecodec"]=()=>(_PyInit__multibytecodec=Module["_PyInit__multibytecodec"]=wasmExports["PyInit__multibytecodec"])();var _PyInit_unicodedata=Module["_PyInit_unicodedata"]=()=>(_PyInit_unicodedata=Module["_PyInit_unicodedata"]=wasmExports["PyInit_unicodedata"])();var _PyInit__crypt=Module["_PyInit__crypt"]=()=>(_PyInit__crypt=Module["_PyInit__crypt"]=wasmExports["PyInit__crypt"])();var _PyInit_mmap=Module["_PyInit_mmap"]=()=>(_PyInit_mmap=Module["_PyInit_mmap"]=wasmExports["PyInit_mmap"])();var _PyInit_select=Module["_PyInit_select"]=()=>(_PyInit_select=Module["_PyInit_select"]=wasmExports["PyInit_select"])();var _PyInit__socket=Module["_PyInit__socket"]=()=>(_PyInit__socket=Module["_PyInit__socket"]=wasmExports["PyInit__socket"])();var _PyInit_atexit=Module["_PyInit_atexit"]=()=>(_PyInit_atexit=Module["_PyInit_atexit"]=wasmExports["PyInit_atexit"])();var _PyInit_faulthandler=Module["_PyInit_faulthandler"]=()=>(_PyInit_faulthandler=Module["_PyInit_faulthandler"]=wasmExports["PyInit_faulthandler"])();var _PyInit_posix=Module["_PyInit_posix"]=()=>(_PyInit_posix=Module["_PyInit_posix"]=wasmExports["PyInit_posix"])();var _PyInit__signal=Module["_PyInit__signal"]=()=>(_PyInit__signal=Module["_PyInit__signal"]=wasmExports["PyInit__signal"])();var _PyInit__tracemalloc=Module["_PyInit__tracemalloc"]=()=>(_PyInit__tracemalloc=Module["_PyInit__tracemalloc"]=wasmExports["PyInit__tracemalloc"])();var _PyInit__codecs=Module["_PyInit__codecs"]=()=>(_PyInit__codecs=Module["_PyInit__codecs"]=wasmExports["PyInit__codecs"])();var _PyInit__collections=Module["_PyInit__collections"]=()=>(_PyInit__collections=Module["_PyInit__collections"]=wasmExports["PyInit__collections"])();var _PyInit_errno=Module["_PyInit_errno"]=()=>(_PyInit_errno=Module["_PyInit_errno"]=wasmExports["PyInit_errno"])();var _PyInit__io=Module["_PyInit__io"]=()=>(_PyInit__io=Module["_PyInit__io"]=wasmExports["PyInit__io"])();var _PyInit_itertools=Module["_PyInit_itertools"]=()=>(_PyInit_itertools=Module["_PyInit_itertools"]=wasmExports["PyInit_itertools"])();var _PyInit__sre=Module["_PyInit__sre"]=()=>(_PyInit__sre=Module["_PyInit__sre"]=wasmExports["PyInit__sre"])();var _PyInit__thread=Module["_PyInit__thread"]=()=>(_PyInit__thread=Module["_PyInit__thread"]=wasmExports["PyInit__thread"])();var _PyInit_time=Module["_PyInit_time"]=()=>(_PyInit_time=Module["_PyInit_time"]=wasmExports["PyInit_time"])();var _PyInit__typing=Module["_PyInit__typing"]=()=>(_PyInit__typing=Module["_PyInit__typing"]=wasmExports["PyInit__typing"])();var _PyInit__weakref=Module["_PyInit__weakref"]=()=>(_PyInit__weakref=Module["_PyInit__weakref"]=wasmExports["PyInit__weakref"])();var _PyInit__abc=Module["_PyInit__abc"]=()=>(_PyInit__abc=Module["_PyInit__abc"]=wasmExports["PyInit__abc"])();var _PyInit__functools=Module["_PyInit__functools"]=()=>(_PyInit__functools=Module["_PyInit__functools"]=wasmExports["PyInit__functools"])();var _PyInit__locale=Module["_PyInit__locale"]=()=>(_PyInit__locale=Module["_PyInit__locale"]=wasmExports["PyInit__locale"])();var _PyInit__operator=Module["_PyInit__operator"]=()=>(_PyInit__operator=Module["_PyInit__operator"]=wasmExports["PyInit__operator"])();var _PyInit__stat=Module["_PyInit__stat"]=()=>(_PyInit__stat=Module["_PyInit__stat"]=wasmExports["PyInit__stat"])();var _PyInit__symtable=Module["_PyInit__symtable"]=()=>(_PyInit__symtable=Module["_PyInit__symtable"]=wasmExports["PyInit__symtable"])();var _PyInit_gc=Module["_PyInit_gc"]=()=>(_PyInit_gc=Module["_PyInit_gc"]=wasmExports["PyInit_gc"])();var _Py_RunMain=Module["_Py_RunMain"]=()=>(_Py_RunMain=Module["_Py_RunMain"]=wasmExports["Py_RunMain"])();var _perror=Module["_perror"]=a0=>(_perror=Module["_perror"]=wasmExports["perror"])(a0);var _kill=Module["_kill"]=(a0,a1)=>(_kill=Module["_kill"]=wasmExports["kill"])(a0,a1);var _Py_Main=Module["_Py_Main"]=(a0,a1)=>(_Py_Main=Module["_Py_Main"]=wasmExports["Py_Main"])(a0,a1);var _Py_BytesMain=Module["_Py_BytesMain"]=(a0,a1)=>(_Py_BytesMain=Module["_Py_BytesMain"]=wasmExports["Py_BytesMain"])(a0,a1);var _PyGC_Enable=Module["_PyGC_Enable"]=()=>(_PyGC_Enable=Module["_PyGC_Enable"]=wasmExports["PyGC_Enable"])();var _PyGC_Disable=Module["_PyGC_Disable"]=()=>(_PyGC_Disable=Module["_PyGC_Disable"]=wasmExports["PyGC_Disable"])();var _PyGC_IsEnabled=Module["_PyGC_IsEnabled"]=()=>(_PyGC_IsEnabled=Module["_PyGC_IsEnabled"]=wasmExports["PyGC_IsEnabled"])();var _PyUnstable_Object_GC_NewWithExtraData=Module["_PyUnstable_Object_GC_NewWithExtraData"]=(a0,a1)=>(_PyUnstable_Object_GC_NewWithExtraData=Module["_PyUnstable_Object_GC_NewWithExtraData"]=wasmExports["PyUnstable_Object_GC_NewWithExtraData"])(a0,a1);var _PyObject_GC_IsTracked=Module["_PyObject_GC_IsTracked"]=a0=>(_PyObject_GC_IsTracked=Module["_PyObject_GC_IsTracked"]=wasmExports["PyObject_GC_IsTracked"])(a0);var _PyObject_GC_IsFinalized=Module["_PyObject_GC_IsFinalized"]=a0=>(_PyObject_GC_IsFinalized=Module["_PyObject_GC_IsFinalized"]=wasmExports["PyObject_GC_IsFinalized"])(a0);var _PyUnstable_GC_VisitObjects=Module["_PyUnstable_GC_VisitObjects"]=(a0,a1)=>(_PyUnstable_GC_VisitObjects=Module["_PyUnstable_GC_VisitObjects"]=wasmExports["PyUnstable_GC_VisitObjects"])(a0,a1);var _strcat=Module["_strcat"]=(a0,a1)=>(_strcat=Module["_strcat"]=wasmExports["strcat"])(a0,a1);var _ffi_closure_alloc=Module["_ffi_closure_alloc"]=(a0,a1)=>(_ffi_closure_alloc=Module["_ffi_closure_alloc"]=wasmExports["ffi_closure_alloc"])(a0,a1);var _ffi_prep_cif=Module["_ffi_prep_cif"]=(a0,a1,a2,a3,a4)=>(_ffi_prep_cif=Module["_ffi_prep_cif"]=wasmExports["ffi_prep_cif"])(a0,a1,a2,a3,a4);var _ffi_prep_closure_loc=Module["_ffi_prep_closure_loc"]=(a0,a1,a2,a3,a4)=>(_ffi_prep_closure_loc=Module["_ffi_prep_closure_loc"]=wasmExports["ffi_prep_closure_loc"])(a0,a1,a2,a3,a4);var _ffi_closure_free=Module["_ffi_closure_free"]=a0=>(_ffi_closure_free=Module["_ffi_closure_free"]=wasmExports["ffi_closure_free"])(a0);var _ffi_prep_cif_var=Module["_ffi_prep_cif_var"]=(a0,a1,a2,a3,a4,a5)=>(_ffi_prep_cif_var=Module["_ffi_prep_cif_var"]=wasmExports["ffi_prep_cif_var"])(a0,a1,a2,a3,a4,a5);var _ffi_call=Module["_ffi_call"]=(a0,a1,a2,a3)=>(_ffi_call=Module["_ffi_call"]=wasmExports["ffi_call"])(a0,a1,a2,a3);var _dlclose=Module["_dlclose"]=a0=>(_dlclose=Module["_dlclose"]=wasmExports["dlclose"])(a0);var ___extenddftf2=Module["___extenddftf2"]=(a0,a1)=>(___extenddftf2=Module["___extenddftf2"]=wasmExports["__extenddftf2"])(a0,a1);var ___trunctfdf2=Module["___trunctfdf2"]=(a0,a1)=>(___trunctfdf2=Module["___trunctfdf2"]=wasmExports["__trunctfdf2"])(a0,a1);var __Py_Gid_Converter=Module["__Py_Gid_Converter"]=(a0,a1)=>(__Py_Gid_Converter=Module["__Py_Gid_Converter"]=wasmExports["_Py_Gid_Converter"])(a0,a1);var __Py_Uid_Converter=Module["__Py_Uid_Converter"]=(a0,a1)=>(__Py_Uid_Converter=Module["__Py_Uid_Converter"]=wasmExports["_Py_Uid_Converter"])(a0,a1);var _PyOS_BeforeFork=Module["_PyOS_BeforeFork"]=()=>(_PyOS_BeforeFork=Module["_PyOS_BeforeFork"]=wasmExports["PyOS_BeforeFork"])();var _PyOS_AfterFork_Parent=Module["_PyOS_AfterFork_Parent"]=()=>(_PyOS_AfterFork_Parent=Module["_PyOS_AfterFork_Parent"]=wasmExports["PyOS_AfterFork_Parent"])();var _fork=Module["_fork"]=()=>(_fork=Module["_fork"]=wasmExports["fork"])();var _PyOS_AfterFork_Child=Module["_PyOS_AfterFork_Child"]=()=>(_PyOS_AfterFork_Child=Module["_PyOS_AfterFork_Child"]=wasmExports["PyOS_AfterFork_Child"])();var __exit=Module["__exit"]=a0=>(__exit=Module["__exit"]=wasmExports["_exit"])(a0);var _dup=Module["_dup"]=a0=>(_dup=Module["_dup"]=wasmExports["dup"])(a0);var _dup2=Module["_dup2"]=(a0,a1)=>(_dup2=Module["_dup2"]=wasmExports["dup2"])(a0,a1);var _chdir=Module["_chdir"]=a0=>(_chdir=Module["_chdir"]=wasmExports["chdir"])(a0);var _umask=Module["_umask"]=a0=>(_umask=Module["_umask"]=wasmExports["umask"])(a0);var __Py_RestoreSignals=Module["__Py_RestoreSignals"]=()=>(__Py_RestoreSignals=Module["__Py_RestoreSignals"]=wasmExports["_Py_RestoreSignals"])();var _setsid=Module["_setsid"]=()=>(_setsid=Module["_setsid"]=wasmExports["setsid"])();var _setpgid=Module["_setpgid"]=(a0,a1)=>(_setpgid=Module["_setpgid"]=wasmExports["setpgid"])(a0,a1);var _setregid=Module["_setregid"]=(a0,a1)=>(_setregid=Module["_setregid"]=wasmExports["setregid"])(a0,a1);var _setreuid=Module["_setreuid"]=(a0,a1)=>(_setreuid=Module["_setreuid"]=wasmExports["setreuid"])(a0,a1);var _execve=Module["_execve"]=(a0,a1,a2)=>(_execve=Module["_execve"]=wasmExports["execve"])(a0,a1,a2);var _execv=Module["_execv"]=(a0,a1)=>(_execv=Module["_execv"]=wasmExports["execv"])(a0,a1);var _opendir=Module["_opendir"]=a0=>(_opendir=Module["_opendir"]=wasmExports["opendir"])(a0);var _sysconf=Module["_sysconf"]=a0=>(_sysconf=Module["_sysconf"]=wasmExports["sysconf"])(a0);var _dirfd=Module["_dirfd"]=a0=>(_dirfd=Module["_dirfd"]=wasmExports["dirfd"])(a0);var _readdir=Module["_readdir"]=a0=>(_readdir=Module["_readdir"]=wasmExports["readdir"])(a0);var _closedir=Module["_closedir"]=a0=>(_closedir=Module["_closedir"]=wasmExports["closedir"])(a0);var _BZ2_bzCompressEnd=Module["_BZ2_bzCompressEnd"]=a0=>(_BZ2_bzCompressEnd=Module["_BZ2_bzCompressEnd"]=wasmExports["BZ2_bzCompressEnd"])(a0);var _BZ2_bzCompressInit=Module["_BZ2_bzCompressInit"]=(a0,a1,a2,a3)=>(_BZ2_bzCompressInit=Module["_BZ2_bzCompressInit"]=wasmExports["BZ2_bzCompressInit"])(a0,a1,a2,a3);var _BZ2_bzCompress=Module["_BZ2_bzCompress"]=(a0,a1)=>(_BZ2_bzCompress=Module["_BZ2_bzCompress"]=wasmExports["BZ2_bzCompress"])(a0,a1);var _BZ2_bzDecompressEnd=Module["_BZ2_bzDecompressEnd"]=a0=>(_BZ2_bzDecompressEnd=Module["_BZ2_bzDecompressEnd"]=wasmExports["BZ2_bzDecompressEnd"])(a0);var _BZ2_bzDecompressInit=Module["_BZ2_bzDecompressInit"]=(a0,a1,a2)=>(_BZ2_bzDecompressInit=Module["_BZ2_bzDecompressInit"]=wasmExports["BZ2_bzDecompressInit"])(a0,a1,a2);var _BZ2_bzDecompress=Module["_BZ2_bzDecompress"]=a0=>(_BZ2_bzDecompress=Module["_BZ2_bzDecompress"]=wasmExports["BZ2_bzDecompress"])(a0);var _adler32=Module["_adler32"]=(a0,a1,a2)=>(_adler32=Module["_adler32"]=wasmExports["adler32"])(a0,a1,a2);var _deflateInit2_=Module["_deflateInit2_"]=(a0,a1,a2,a3,a4,a5,a6,a7)=>(_deflateInit2_=Module["_deflateInit2_"]=wasmExports["deflateInit2_"])(a0,a1,a2,a3,a4,a5,a6,a7);var _deflateEnd=Module["_deflateEnd"]=a0=>(_deflateEnd=Module["_deflateEnd"]=wasmExports["deflateEnd"])(a0);var _deflate=Module["_deflate"]=(a0,a1)=>(_deflate=Module["_deflate"]=wasmExports["deflate"])(a0,a1);var _deflateSetDictionary=Module["_deflateSetDictionary"]=(a0,a1,a2)=>(_deflateSetDictionary=Module["_deflateSetDictionary"]=wasmExports["deflateSetDictionary"])(a0,a1,a2);var _crc32=Module["_crc32"]=(a0,a1,a2)=>(_crc32=Module["_crc32"]=wasmExports["crc32"])(a0,a1,a2);var _inflateInit2_=Module["_inflateInit2_"]=(a0,a1,a2,a3)=>(_inflateInit2_=Module["_inflateInit2_"]=wasmExports["inflateInit2_"])(a0,a1,a2,a3);var _inflateEnd=Module["_inflateEnd"]=a0=>(_inflateEnd=Module["_inflateEnd"]=wasmExports["inflateEnd"])(a0);var _inflate=Module["_inflate"]=(a0,a1)=>(_inflate=Module["_inflate"]=wasmExports["inflate"])(a0,a1);var _inflateSetDictionary=Module["_inflateSetDictionary"]=(a0,a1,a2)=>(_inflateSetDictionary=Module["_inflateSetDictionary"]=wasmExports["inflateSetDictionary"])(a0,a1,a2);var _zlibVersion=Module["_zlibVersion"]=()=>(_zlibVersion=Module["_zlibVersion"]=wasmExports["zlibVersion"])();var _deflateCopy=Module["_deflateCopy"]=(a0,a1)=>(_deflateCopy=Module["_deflateCopy"]=wasmExports["deflateCopy"])(a0,a1);var _inflateCopy=Module["_inflateCopy"]=(a0,a1)=>(_inflateCopy=Module["_inflateCopy"]=wasmExports["inflateCopy"])(a0,a1);var _acos=Module["_acos"]=a0=>(_acos=Module["_acos"]=wasmExports["acos"])(a0);var _acosh=Module["_acosh"]=a0=>(_acosh=Module["_acosh"]=wasmExports["acosh"])(a0);var _asin=Module["_asin"]=a0=>(_asin=Module["_asin"]=wasmExports["asin"])(a0);var _asinh=Module["_asinh"]=a0=>(_asinh=Module["_asinh"]=wasmExports["asinh"])(a0);var _atan=Module["_atan"]=a0=>(_atan=Module["_atan"]=wasmExports["atan"])(a0);var _atanh=Module["_atanh"]=a0=>(_atanh=Module["_atanh"]=wasmExports["atanh"])(a0);var _cbrt=Module["_cbrt"]=a0=>(_cbrt=Module["_cbrt"]=wasmExports["cbrt"])(a0);var _copysign=Module["_copysign"]=(a0,a1)=>(_copysign=Module["_copysign"]=wasmExports["copysign"])(a0,a1);var _cosh=Module["_cosh"]=a0=>(_cosh=Module["_cosh"]=wasmExports["cosh"])(a0);var _erf=Module["_erf"]=a0=>(_erf=Module["_erf"]=wasmExports["erf"])(a0);var _erfc=Module["_erfc"]=a0=>(_erfc=Module["_erfc"]=wasmExports["erfc"])(a0);var _exp2=Module["_exp2"]=a0=>(_exp2=Module["_exp2"]=wasmExports["exp2"])(a0);var _expm1=Module["_expm1"]=a0=>(_expm1=Module["_expm1"]=wasmExports["expm1"])(a0);var _fabs=Module["_fabs"]=a0=>(_fabs=Module["_fabs"]=wasmExports["fabs"])(a0);var _sinh=Module["_sinh"]=a0=>(_sinh=Module["_sinh"]=wasmExports["sinh"])(a0);var _sqrt=Module["_sqrt"]=a0=>(_sqrt=Module["_sqrt"]=wasmExports["sqrt"])(a0);var _tan=Module["_tan"]=a0=>(_tan=Module["_tan"]=wasmExports["tan"])(a0);var _tanh=Module["_tanh"]=a0=>(_tanh=Module["_tanh"]=wasmExports["tanh"])(a0);var _fma=Module["_fma"]=(a0,a1,a2)=>(_fma=Module["_fma"]=wasmExports["fma"])(a0,a1,a2);var _nextafter=Module["_nextafter"]=(a0,a1)=>(_nextafter=Module["_nextafter"]=wasmExports["nextafter"])(a0,a1);var _log1p=Module["_log1p"]=a0=>(_log1p=Module["_log1p"]=wasmExports["log1p"])(a0);var _log10=Module["_log10"]=a0=>(_log10=Module["_log10"]=wasmExports["log10"])(a0);var _log2=Module["_log2"]=a0=>(_log2=Module["_log2"]=wasmExports["log2"])(a0);var _explicit_bzero=Module["_explicit_bzero"]=(a0,a1)=>(_explicit_bzero=Module["_explicit_bzero"]=wasmExports["explicit_bzero"])(a0,a1);var _strncat=Module["_strncat"]=(a0,a1,a2)=>(_strncat=Module["_strncat"]=wasmExports["strncat"])(a0,a1,a2);var _crypt_r=Module["_crypt_r"]=(a0,a1,a2)=>(_crypt_r=Module["_crypt_r"]=wasmExports["crypt_r"])(a0,a1,a2);var _mmap=Module["_mmap"]=(a0,a1,a2,a3,a4,a5)=>(_mmap=Module["_mmap"]=wasmExports["mmap"])(a0,a1,a2,a3,a4,a5);var _munmap=Module["_munmap"]=(a0,a1)=>(_munmap=Module["_munmap"]=wasmExports["munmap"])(a0,a1);var _msync=Module["_msync"]=(a0,a1,a2)=>(_msync=Module["_msync"]=wasmExports["msync"])(a0,a1,a2);var _madvise=Module["_madvise"]=(a0,a1,a2)=>(_madvise=Module["_madvise"]=wasmExports["madvise"])(a0,a1,a2);var _ftruncate=Module["_ftruncate"]=(a0,a1)=>(_ftruncate=Module["_ftruncate"]=wasmExports["ftruncate"])(a0,a1);var _mremap=Module["_mremap"]=(a0,a1,a2,a3,a4)=>(_mremap=Module["_mremap"]=wasmExports["mremap"])(a0,a1,a2,a3,a4);var _poll=Module["_poll"]=(a0,a1,a2)=>(_poll=Module["_poll"]=wasmExports["poll"])(a0,a1,a2);var _select=Module["_select"]=(a0,a1,a2,a3,a4)=>(_select=Module["_select"]=wasmExports["select"])(a0,a1,a2,a3,a4);var _inet_ntop=Module["_inet_ntop"]=(a0,a1,a2,a3)=>(_inet_ntop=Module["_inet_ntop"]=wasmExports["inet_ntop"])(a0,a1,a2,a3);var _gethostbyname=Module["_gethostbyname"]=a0=>(_gethostbyname=Module["_gethostbyname"]=wasmExports["gethostbyname"])(a0);var _gethostbyaddr=Module["_gethostbyaddr"]=(a0,a1,a2)=>(_gethostbyaddr=Module["_gethostbyaddr"]=wasmExports["gethostbyaddr"])(a0,a1,a2);var _gethostname=Module["_gethostname"]=(a0,a1)=>(_gethostname=Module["_gethostname"]=wasmExports["gethostname"])(a0,a1);var _getservbyname=Module["_getservbyname"]=(a0,a1)=>(_getservbyname=Module["_getservbyname"]=wasmExports["getservbyname"])(a0,a1);var _ntohs=a0=>(_ntohs=wasmExports["ntohs"])(a0);var _htons=a0=>(_htons=wasmExports["htons"])(a0);var _getservbyport=Module["_getservbyport"]=(a0,a1)=>(_getservbyport=Module["_getservbyport"]=wasmExports["getservbyport"])(a0,a1);var _ntohl=Module["_ntohl"]=a0=>(_ntohl=Module["_ntohl"]=wasmExports["ntohl"])(a0);var _htonl=a0=>(_htonl=wasmExports["htonl"])(a0);var _inet_aton=Module["_inet_aton"]=(a0,a1)=>(_inet_aton=Module["_inet_aton"]=wasmExports["inet_aton"])(a0,a1);var _inet_ntoa=Module["_inet_ntoa"]=a0=>(_inet_ntoa=Module["_inet_ntoa"]=wasmExports["inet_ntoa"])(a0);var _inet_pton=Module["_inet_pton"]=(a0,a1,a2)=>(_inet_pton=Module["_inet_pton"]=wasmExports["inet_pton"])(a0,a1,a2);var _gai_strerror=Module["_gai_strerror"]=a0=>(_gai_strerror=Module["_gai_strerror"]=wasmExports["gai_strerror"])(a0);var _freeaddrinfo=Module["_freeaddrinfo"]=a0=>(_freeaddrinfo=Module["_freeaddrinfo"]=wasmExports["freeaddrinfo"])(a0);var _if_nameindex=Module["_if_nameindex"]=()=>(_if_nameindex=Module["_if_nameindex"]=wasmExports["if_nameindex"])();var _if_freenameindex=Module["_if_freenameindex"]=a0=>(_if_freenameindex=Module["_if_freenameindex"]=wasmExports["if_freenameindex"])(a0);var _if_nametoindex=Module["_if_nametoindex"]=a0=>(_if_nametoindex=Module["_if_nametoindex"]=wasmExports["if_nametoindex"])(a0);var _if_indextoname=Module["_if_indextoname"]=(a0,a1)=>(_if_indextoname=Module["_if_indextoname"]=wasmExports["if_indextoname"])(a0,a1);var ___h_errno_location=Module["___h_errno_location"]=()=>(___h_errno_location=Module["___h_errno_location"]=wasmExports["__h_errno_location"])();var _hstrerror=Module["_hstrerror"]=a0=>(_hstrerror=Module["_hstrerror"]=wasmExports["hstrerror"])(a0);var _getsockname=Module["_getsockname"]=(a0,a1,a2)=>(_getsockname=Module["_getsockname"]=wasmExports["getsockname"])(a0,a1,a2);var _socket=Module["_socket"]=(a0,a1,a2)=>(_socket=Module["_socket"]=wasmExports["socket"])(a0,a1,a2);var _getsockopt=Module["_getsockopt"]=(a0,a1,a2,a3,a4)=>(_getsockopt=Module["_getsockopt"]=wasmExports["getsockopt"])(a0,a1,a2,a3,a4);var _bind=Module["_bind"]=(a0,a1,a2)=>(_bind=Module["_bind"]=wasmExports["bind"])(a0,a1,a2);var _getpeername=Module["_getpeername"]=(a0,a1,a2)=>(_getpeername=Module["_getpeername"]=wasmExports["getpeername"])(a0,a1,a2);var _listen=Module["_listen"]=(a0,a1)=>(_listen=Module["_listen"]=wasmExports["listen"])(a0,a1);var _setsockopt=Module["_setsockopt"]=(a0,a1,a2,a3,a4)=>(_setsockopt=Module["_setsockopt"]=wasmExports["setsockopt"])(a0,a1,a2,a3,a4);var _accept4=Module["_accept4"]=(a0,a1,a2,a3)=>(_accept4=Module["_accept4"]=wasmExports["accept4"])(a0,a1,a2,a3);var _accept=Module["_accept"]=(a0,a1,a2)=>(_accept=Module["_accept"]=wasmExports["accept"])(a0,a1,a2);var _connect=Module["_connect"]=(a0,a1,a2)=>(_connect=Module["_connect"]=wasmExports["connect"])(a0,a1,a2);var _recv=Module["_recv"]=(a0,a1,a2,a3)=>(_recv=Module["_recv"]=wasmExports["recv"])(a0,a1,a2,a3);var _recvfrom=Module["_recvfrom"]=(a0,a1,a2,a3,a4,a5)=>(_recvfrom=Module["_recvfrom"]=wasmExports["recvfrom"])(a0,a1,a2,a3,a4,a5);var _send=Module["_send"]=(a0,a1,a2,a3)=>(_send=Module["_send"]=wasmExports["send"])(a0,a1,a2,a3);var _sendto=Module["_sendto"]=(a0,a1,a2,a3,a4,a5)=>(_sendto=Module["_sendto"]=wasmExports["sendto"])(a0,a1,a2,a3,a4,a5);var _recvmsg=Module["_recvmsg"]=(a0,a1,a2)=>(_recvmsg=Module["_recvmsg"]=wasmExports["recvmsg"])(a0,a1,a2);var _sendmsg=Module["_sendmsg"]=(a0,a1,a2)=>(_sendmsg=Module["_sendmsg"]=wasmExports["sendmsg"])(a0,a1,a2);var __Py_AtExit=Module["__Py_AtExit"]=(a0,a1,a2)=>(__Py_AtExit=Module["__Py_AtExit"]=wasmExports["_Py_AtExit"])(a0,a1,a2);var _getrlimit=Module["_getrlimit"]=(a0,a1)=>(_getrlimit=Module["_getrlimit"]=wasmExports["getrlimit"])(a0,a1);var _setrlimit=Module["_setrlimit"]=(a0,a1)=>(_setrlimit=Module["_setrlimit"]=wasmExports["setrlimit"])(a0,a1);var _raise=Module["_raise"]=a0=>(_raise=Module["_raise"]=wasmExports["raise"])(a0);var _sigfillset=Module["_sigfillset"]=a0=>(_sigfillset=Module["_sigfillset"]=wasmExports["sigfillset"])(a0);var _pthread_sigmask=Module["_pthread_sigmask"]=(a0,a1,a2)=>(_pthread_sigmask=Module["_pthread_sigmask"]=wasmExports["pthread_sigmask"])(a0,a1,a2);var _PyOS_AfterFork=Module["_PyOS_AfterFork"]=()=>(_PyOS_AfterFork=Module["_PyOS_AfterFork"]=wasmExports["PyOS_AfterFork"])();var __PyLong_FromUid=Module["__PyLong_FromUid"]=a0=>(__PyLong_FromUid=Module["__PyLong_FromUid"]=wasmExports["_PyLong_FromUid"])(a0);var __PyLong_FromGid=Module["__PyLong_FromGid"]=a0=>(__PyLong_FromGid=Module["__PyLong_FromGid"]=wasmExports["_PyLong_FromGid"])(a0);var __Py_Sigset_Converter=Module["__Py_Sigset_Converter"]=(a0,a1)=>(__Py_Sigset_Converter=Module["__Py_Sigset_Converter"]=wasmExports["_Py_Sigset_Converter"])(a0,a1);var _sigemptyset=Module["_sigemptyset"]=a0=>(_sigemptyset=Module["_sigemptyset"]=wasmExports["sigemptyset"])(a0);var _sigaddset=Module["_sigaddset"]=(a0,a1)=>(_sigaddset=Module["_sigaddset"]=wasmExports["sigaddset"])(a0,a1);var _access=Module["_access"]=(a0,a1)=>(_access=Module["_access"]=wasmExports["access"])(a0,a1);var _ttyname_r=Module["_ttyname_r"]=(a0,a1,a2)=>(_ttyname_r=Module["_ttyname_r"]=wasmExports["ttyname_r"])(a0,a1,a2);var _fchdir=Module["_fchdir"]=a0=>(_fchdir=Module["_fchdir"]=wasmExports["fchdir"])(a0);var _fchmod=Module["_fchmod"]=(a0,a1)=>(_fchmod=Module["_fchmod"]=wasmExports["fchmod"])(a0,a1);var _fchmodat=Module["_fchmodat"]=(a0,a1,a2,a3)=>(_fchmodat=Module["_fchmodat"]=wasmExports["fchmodat"])(a0,a1,a2,a3);var _chmod=Module["_chmod"]=(a0,a1)=>(_chmod=Module["_chmod"]=wasmExports["chmod"])(a0,a1);var _fchown=Module["_fchown"]=(a0,a1,a2)=>(_fchown=Module["_fchown"]=wasmExports["fchown"])(a0,a1,a2);var _fchownat=Module["_fchownat"]=(a0,a1,a2,a3,a4)=>(_fchownat=Module["_fchownat"]=wasmExports["fchownat"])(a0,a1,a2,a3,a4);var _chown=Module["_chown"]=(a0,a1,a2)=>(_chown=Module["_chown"]=wasmExports["chown"])(a0,a1,a2);var _chroot=Module["_chroot"]=a0=>(_chroot=Module["_chroot"]=wasmExports["chroot"])(a0);var _ctermid=Module["_ctermid"]=a0=>(_ctermid=Module["_ctermid"]=wasmExports["ctermid"])(a0);var _fdopendir=Module["_fdopendir"]=a0=>(_fdopendir=Module["_fdopendir"]=wasmExports["fdopendir"])(a0);var _rewinddir=Module["_rewinddir"]=a0=>(_rewinddir=Module["_rewinddir"]=wasmExports["rewinddir"])(a0);var _mkdirat=Module["_mkdirat"]=(a0,a1,a2)=>(_mkdirat=Module["_mkdirat"]=wasmExports["mkdirat"])(a0,a1,a2);var _mkdir=Module["_mkdir"]=(a0,a1)=>(_mkdir=Module["_mkdir"]=wasmExports["mkdir"])(a0,a1);var _getpriority=Module["_getpriority"]=(a0,a1)=>(_getpriority=Module["_getpriority"]=wasmExports["getpriority"])(a0,a1);var _readlinkat=Module["_readlinkat"]=(a0,a1,a2,a3)=>(_readlinkat=Module["_readlinkat"]=wasmExports["readlinkat"])(a0,a1,a2,a3);var _unlinkat=Module["_unlinkat"]=(a0,a1,a2)=>(_unlinkat=Module["_unlinkat"]=wasmExports["unlinkat"])(a0,a1,a2);var _rmdir=Module["_rmdir"]=a0=>(_rmdir=Module["_rmdir"]=wasmExports["rmdir"])(a0);var _symlink=Module["_symlink"]=(a0,a1)=>(_symlink=Module["_symlink"]=wasmExports["symlink"])(a0,a1);var _system=Module["_system"]=a0=>(_system=Module["_system"]=wasmExports["system"])(a0);var _uname=Module["_uname"]=a0=>(_uname=Module["_uname"]=wasmExports["uname"])(a0);var _futimesat=Module["_futimesat"]=(a0,a1,a2)=>(_futimesat=Module["_futimesat"]=wasmExports["futimesat"])(a0,a1,a2);var _futimens=Module["_futimens"]=(a0,a1)=>(_futimens=Module["_futimens"]=wasmExports["futimens"])(a0,a1);var _times=Module["_times"]=a0=>(_times=Module["_times"]=wasmExports["times"])(a0);var _fexecve=Module["_fexecve"]=(a0,a1,a2)=>(_fexecve=Module["_fexecve"]=wasmExports["fexecve"])(a0,a1,a2);var _sched_yield=Module["_sched_yield"]=()=>(_sched_yield=Module["_sched_yield"]=wasmExports["sched_yield"])();var _login_tty=Module["_login_tty"]=a0=>(_login_tty=Module["_login_tty"]=wasmExports["login_tty"])(a0);var _getgid=Module["_getgid"]=()=>(_getgid=Module["_getgid"]=wasmExports["getgid"])();var _getpgrp=Module["_getpgrp"]=()=>(_getpgrp=Module["_getpgrp"]=wasmExports["getpgrp"])();var _getppid=Module["_getppid"]=()=>(_getppid=Module["_getppid"]=wasmExports["getppid"])();var _getuid=Module["_getuid"]=()=>(_getuid=Module["_getuid"]=wasmExports["getuid"])();var _getlogin=Module["_getlogin"]=()=>(_getlogin=Module["_getlogin"]=wasmExports["getlogin"])();var _killpg=Module["_killpg"]=(a0,a1)=>(_killpg=Module["_killpg"]=wasmExports["killpg"])(a0,a1);var _setuid=Module["_setuid"]=a0=>(_setuid=Module["_setuid"]=wasmExports["setuid"])(a0);var _setgid=Module["_setgid"]=a0=>(_setgid=Module["_setgid"]=wasmExports["setgid"])(a0);var _getpgid=Module["_getpgid"]=a0=>(_getpgid=Module["_getpgid"]=wasmExports["getpgid"])(a0);var _setpgrp=Module["_setpgrp"]=()=>(_setpgrp=Module["_setpgrp"]=wasmExports["setpgrp"])();var _wait=Module["_wait"]=a0=>(_wait=Module["_wait"]=wasmExports["wait"])(a0);var _waitid=Module["_waitid"]=(a0,a1,a2,a3)=>(_waitid=Module["_waitid"]=wasmExports["waitid"])(a0,a1,a2,a3);var _waitpid=Module["_waitpid"]=(a0,a1,a2)=>(_waitpid=Module["_waitpid"]=wasmExports["waitpid"])(a0,a1,a2);var _getsid=Module["_getsid"]=a0=>(_getsid=Module["_getsid"]=wasmExports["getsid"])(a0);var _tcgetpgrp=Module["_tcgetpgrp"]=a0=>(_tcgetpgrp=Module["_tcgetpgrp"]=wasmExports["tcgetpgrp"])(a0);var _tcsetpgrp=Module["_tcsetpgrp"]=(a0,a1)=>(_tcsetpgrp=Module["_tcsetpgrp"]=wasmExports["tcsetpgrp"])(a0,a1);var _openat=Module["_openat"]=(a0,a1,a2,a3)=>(_openat=Module["_openat"]=wasmExports["openat"])(a0,a1,a2,a3);var _dup3=Module["_dup3"]=(a0,a1,a2)=>(_dup3=Module["_dup3"]=wasmExports["dup3"])(a0,a1,a2);var _lockf=Module["_lockf"]=(a0,a1,a2)=>(_lockf=Module["_lockf"]=wasmExports["lockf"])(a0,a1,a2);var _readv=Module["_readv"]=(a0,a1,a2)=>(_readv=Module["_readv"]=wasmExports["readv"])(a0,a1,a2);var _pread=Module["_pread"]=(a0,a1,a2,a3)=>(_pread=Module["_pread"]=wasmExports["pread"])(a0,a1,a2,a3);var _writev=Module["_writev"]=(a0,a1,a2)=>(_writev=Module["_writev"]=wasmExports["writev"])(a0,a1,a2);var _pwrite=Module["_pwrite"]=(a0,a1,a2,a3)=>(_pwrite=Module["_pwrite"]=wasmExports["pwrite"])(a0,a1,a2,a3);var _pipe=Module["_pipe"]=a0=>(_pipe=Module["_pipe"]=wasmExports["pipe"])(a0);var _truncate=Module["_truncate"]=(a0,a1)=>(_truncate=Module["_truncate"]=wasmExports["truncate"])(a0,a1);var _posix_fadvise=Module["_posix_fadvise"]=(a0,a1,a2,a3)=>(_posix_fadvise=Module["_posix_fadvise"]=wasmExports["posix_fadvise"])(a0,a1,a2,a3);var _unsetenv=Module["_unsetenv"]=a0=>(_unsetenv=Module["_unsetenv"]=wasmExports["unsetenv"])(a0);var _fsync=Module["_fsync"]=a0=>(_fsync=Module["_fsync"]=wasmExports["fsync"])(a0);var _sync=Module["_sync"]=()=>(_sync=Module["_sync"]=wasmExports["sync"])();var _fdatasync=Module["_fdatasync"]=a0=>(_fdatasync=Module["_fdatasync"]=wasmExports["fdatasync"])(a0);var _fstatvfs=Module["_fstatvfs"]=(a0,a1)=>(_fstatvfs=Module["_fstatvfs"]=wasmExports["fstatvfs"])(a0,a1);var _statvfs=Module["_statvfs"]=(a0,a1)=>(_statvfs=Module["_statvfs"]=wasmExports["statvfs"])(a0,a1);var _fpathconf=Module["_fpathconf"]=(a0,a1)=>(_fpathconf=Module["_fpathconf"]=wasmExports["fpathconf"])(a0,a1);var _pathconf=Module["_pathconf"]=(a0,a1)=>(_pathconf=Module["_pathconf"]=wasmExports["pathconf"])(a0,a1);var _getloadavg=Module["_getloadavg"]=(a0,a1)=>(_getloadavg=Module["_getloadavg"]=wasmExports["getloadavg"])(a0,a1);var _lstat=Module["_lstat"]=(a0,a1)=>(_lstat=Module["_lstat"]=wasmExports["lstat"])(a0,a1);var _fstatat=Module["_fstatat"]=(a0,a1,a2,a3)=>(_fstatat=Module["_fstatat"]=wasmExports["fstatat"])(a0,a1,a2,a3);var _renameat=Module["_renameat"]=(a0,a1,a2,a3)=>(_renameat=Module["_renameat"]=wasmExports["renameat"])(a0,a1,a2,a3);var _rename=Module["_rename"]=(a0,a1)=>(_rename=Module["_rename"]=wasmExports["rename"])(a0,a1);var _unlink=Module["_unlink"]=a0=>(_unlink=Module["_unlink"]=wasmExports["unlink"])(a0);var _utimes=Module["_utimes"]=(a0,a1)=>(_utimes=Module["_utimes"]=wasmExports["utimes"])(a0,a1);var _qsort=Module["_qsort"]=(a0,a1,a2,a3)=>(_qsort=Module["_qsort"]=wasmExports["qsort"])(a0,a1,a2,a3);var __PyErr_CheckSignals=Module["__PyErr_CheckSignals"]=()=>(__PyErr_CheckSignals=Module["__PyErr_CheckSignals"]=wasmExports["_PyErr_CheckSignals"])();var _PyErr_SetInterrupt=Module["_PyErr_SetInterrupt"]=()=>(_PyErr_SetInterrupt=Module["_PyErr_SetInterrupt"]=wasmExports["PyErr_SetInterrupt"])();var _PyOS_InterruptOccurred=Module["_PyOS_InterruptOccurred"]=()=>(_PyOS_InterruptOccurred=Module["_PyOS_InterruptOccurred"]=wasmExports["PyOS_InterruptOccurred"])();var __PyOS_IsMainThread=Module["__PyOS_IsMainThread"]=()=>(__PyOS_IsMainThread=Module["__PyOS_IsMainThread"]=wasmExports["_PyOS_IsMainThread"])();var _getitimer=Module["_getitimer"]=(a0,a1)=>(_getitimer=Module["_getitimer"]=wasmExports["getitimer"])(a0,a1);var _strsignal=Module["_strsignal"]=a0=>(_strsignal=Module["_strsignal"]=wasmExports["strsignal"])(a0);var _strstr=Module["_strstr"]=(a0,a1)=>(_strstr=Module["_strstr"]=wasmExports["strstr"])(a0,a1);var _pause=Module["_pause"]=()=>(_pause=Module["_pause"]=wasmExports["pause"])();var _sigpending=Module["_sigpending"]=a0=>(_sigpending=Module["_sigpending"]=wasmExports["sigpending"])(a0);var _sigwait=Module["_sigwait"]=(a0,a1)=>(_sigwait=Module["_sigwait"]=wasmExports["sigwait"])(a0,a1);var _sigwaitinfo=Module["_sigwaitinfo"]=(a0,a1)=>(_sigwaitinfo=Module["_sigwaitinfo"]=wasmExports["sigwaitinfo"])(a0,a1);var _sigtimedwait=Module["_sigtimedwait"]=(a0,a1,a2)=>(_sigtimedwait=Module["_sigtimedwait"]=wasmExports["sigtimedwait"])(a0,a1,a2);var _sigismember=Module["_sigismember"]=(a0,a1)=>(_sigismember=Module["_sigismember"]=wasmExports["sigismember"])(a0,a1);var ___libc_current_sigrtmin=Module["___libc_current_sigrtmin"]=()=>(___libc_current_sigrtmin=Module["___libc_current_sigrtmin"]=wasmExports["__libc_current_sigrtmin"])();var ___libc_current_sigrtmax=Module["___libc_current_sigrtmax"]=()=>(___libc_current_sigrtmax=Module["___libc_current_sigrtmax"]=wasmExports["__libc_current_sigrtmax"])();var _isalnum=Module["_isalnum"]=a0=>(_isalnum=Module["_isalnum"]=wasmExports["isalnum"])(a0);var _toupper=Module["_toupper"]=a0=>(_toupper=Module["_toupper"]=wasmExports["toupper"])(a0);var _clock_settime=Module["_clock_settime"]=(a0,a1)=>(_clock_settime=Module["_clock_settime"]=wasmExports["clock_settime"])(a0,a1);var _pthread_getcpuclockid=Module["_pthread_getcpuclockid"]=(a0,a1)=>(_pthread_getcpuclockid=Module["_pthread_getcpuclockid"]=wasmExports["pthread_getcpuclockid"])(a0,a1);var _clock_nanosleep=Module["_clock_nanosleep"]=(a0,a1,a2,a3)=>(_clock_nanosleep=Module["_clock_nanosleep"]=wasmExports["clock_nanosleep"])(a0,a1,a2,a3);var _time=Module["_time"]=a0=>(_time=Module["_time"]=wasmExports["time"])(a0);var _mktime=Module["_mktime"]=a0=>(_mktime=Module["_mktime"]=wasmExports["mktime"])(a0);var _clock=Module["_clock"]=()=>(_clock=Module["_clock"]=wasmExports["clock"])();var _wcscoll=Module["_wcscoll"]=(a0,a1)=>(_wcscoll=Module["_wcscoll"]=wasmExports["wcscoll"])(a0,a1);var _wcsxfrm=Module["_wcsxfrm"]=(a0,a1,a2)=>(_wcsxfrm=Module["_wcsxfrm"]=wasmExports["wcsxfrm"])(a0,a1,a2);var _gettext=Module["_gettext"]=a0=>(_gettext=Module["_gettext"]=wasmExports["gettext"])(a0);var _dgettext=Module["_dgettext"]=(a0,a1)=>(_dgettext=Module["_dgettext"]=wasmExports["dgettext"])(a0,a1);var _dcgettext=Module["_dcgettext"]=(a0,a1,a2)=>(_dcgettext=Module["_dcgettext"]=wasmExports["dcgettext"])(a0,a1,a2);var _textdomain=Module["_textdomain"]=a0=>(_textdomain=Module["_textdomain"]=wasmExports["textdomain"])(a0);var _bindtextdomain=Module["_bindtextdomain"]=(a0,a1)=>(_bindtextdomain=Module["_bindtextdomain"]=wasmExports["bindtextdomain"])(a0,a1);var _bind_textdomain_codeset=Module["_bind_textdomain_codeset"]=(a0,a1)=>(_bind_textdomain_codeset=Module["_bind_textdomain_codeset"]=wasmExports["bind_textdomain_codeset"])(a0,a1);var _gettimeofday=Module["_gettimeofday"]=(a0,a1)=>(_gettimeofday=Module["_gettimeofday"]=wasmExports["gettimeofday"])(a0,a1);var ___small_fprintf=Module["___small_fprintf"]=(a0,a1,a2)=>(___small_fprintf=Module["___small_fprintf"]=wasmExports["__small_fprintf"])(a0,a1,a2);var __Py_Get_Getpath_CodeObject=Module["__Py_Get_Getpath_CodeObject"]=()=>(__Py_Get_Getpath_CodeObject=Module["__Py_Get_Getpath_CodeObject"]=wasmExports["_Py_Get_Getpath_CodeObject"])();var _ffi_prep_closure=Module["_ffi_prep_closure"]=(a0,a1,a2,a3)=>(_ffi_prep_closure=Module["_ffi_prep_closure"]=wasmExports["ffi_prep_closure"])(a0,a1,a2,a3);var _ffi_get_struct_offsets=Module["_ffi_get_struct_offsets"]=(a0,a1,a2)=>(_ffi_get_struct_offsets=Module["_ffi_get_struct_offsets"]=wasmExports["ffi_get_struct_offsets"])(a0,a1,a2);var _ffi_java_raw_size=Module["_ffi_java_raw_size"]=a0=>(_ffi_java_raw_size=Module["_ffi_java_raw_size"]=wasmExports["ffi_java_raw_size"])(a0);var _ffi_java_raw_to_ptrarray=Module["_ffi_java_raw_to_ptrarray"]=(a0,a1,a2)=>(_ffi_java_raw_to_ptrarray=Module["_ffi_java_raw_to_ptrarray"]=wasmExports["ffi_java_raw_to_ptrarray"])(a0,a1,a2);var _ffi_java_ptrarray_to_raw=Module["_ffi_java_ptrarray_to_raw"]=(a0,a1,a2)=>(_ffi_java_ptrarray_to_raw=Module["_ffi_java_ptrarray_to_raw"]=wasmExports["ffi_java_ptrarray_to_raw"])(a0,a1,a2);var _ffi_java_raw_call=Module["_ffi_java_raw_call"]=(a0,a1,a2,a3)=>(_ffi_java_raw_call=Module["_ffi_java_raw_call"]=wasmExports["ffi_java_raw_call"])(a0,a1,a2,a3);var _ffi_prep_java_raw_closure_loc=Module["_ffi_prep_java_raw_closure_loc"]=(a0,a1,a2,a3,a4)=>(_ffi_prep_java_raw_closure_loc=Module["_ffi_prep_java_raw_closure_loc"]=wasmExports["ffi_prep_java_raw_closure_loc"])(a0,a1,a2,a3,a4);var _ffi_prep_java_raw_closure=Module["_ffi_prep_java_raw_closure"]=(a0,a1,a2,a3)=>(_ffi_prep_java_raw_closure=Module["_ffi_prep_java_raw_closure"]=wasmExports["ffi_prep_java_raw_closure"])(a0,a1,a2,a3);var _ffi_tramp_is_supported=Module["_ffi_tramp_is_supported"]=()=>(_ffi_tramp_is_supported=Module["_ffi_tramp_is_supported"]=wasmExports["ffi_tramp_is_supported"])();var _ffi_tramp_alloc=Module["_ffi_tramp_alloc"]=a0=>(_ffi_tramp_alloc=Module["_ffi_tramp_alloc"]=wasmExports["ffi_tramp_alloc"])(a0);var _ffi_tramp_set_parms=Module["_ffi_tramp_set_parms"]=(a0,a1,a2)=>(_ffi_tramp_set_parms=Module["_ffi_tramp_set_parms"]=wasmExports["ffi_tramp_set_parms"])(a0,a1,a2);var _ffi_tramp_get_addr=Module["_ffi_tramp_get_addr"]=a0=>(_ffi_tramp_get_addr=Module["_ffi_tramp_get_addr"]=wasmExports["ffi_tramp_get_addr"])(a0);var _ffi_tramp_free=Module["_ffi_tramp_free"]=a0=>(_ffi_tramp_free=Module["_ffi_tramp_free"]=wasmExports["ffi_tramp_free"])(a0);var __hiwire_immortal_get=Module["__hiwire_immortal_get"]=a0=>(__hiwire_immortal_get=Module["__hiwire_immortal_get"]=wasmExports["_hiwire_immortal_get"])(a0);var __hiwire_get=Module["__hiwire_get"]=a0=>(__hiwire_get=Module["__hiwire_get"]=wasmExports["_hiwire_get"])(a0);var _hiwire_incref=Module["_hiwire_incref"]=a0=>(_hiwire_incref=Module["_hiwire_incref"]=wasmExports["hiwire_incref"])(a0);var __hiwire_immortal_add=Module["__hiwire_immortal_add"]=a0=>(__hiwire_immortal_add=Module["__hiwire_immortal_add"]=wasmExports["_hiwire_immortal_add"])(a0);var __hiwire_table_init=Module["__hiwire_table_init"]=()=>(__hiwire_table_init=Module["__hiwire_table_init"]=wasmExports["_hiwire_table_init"])();var __hiwire_set=Module["__hiwire_set"]=(a0,a1)=>(__hiwire_set=Module["__hiwire_set"]=wasmExports["_hiwire_set"])(a0,a1);var _hiwire_num_refs=Module["_hiwire_num_refs"]=()=>(_hiwire_num_refs=Module["_hiwire_num_refs"]=wasmExports["hiwire_num_refs"])();var __hiwire_slot_info=Module["__hiwire_slot_info"]=a0=>(__hiwire_slot_info=Module["__hiwire_slot_info"]=wasmExports["_hiwire_slot_info"])(a0);var __hiwire_delete=Module["__hiwire_delete"]=a0=>(__hiwire_delete=Module["__hiwire_delete"]=wasmExports["_hiwire_delete"])(a0);var __hiwire_immortal_table_init=Module["__hiwire_immortal_table_init"]=()=>(__hiwire_immortal_table_init=Module["__hiwire_immortal_table_init"]=wasmExports["_hiwire_immortal_table_init"])();var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=a0=>(_emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=wasmExports["emscripten_GetProcAddress"])(a0);var _emscripten_webgl1_get_proc_address=Module["_emscripten_webgl1_get_proc_address"]=a0=>(_emscripten_webgl1_get_proc_address=Module["_emscripten_webgl1_get_proc_address"]=wasmExports["emscripten_webgl1_get_proc_address"])(a0);var __webgl1_match_ext_proc_address_without_suffix=Module["__webgl1_match_ext_proc_address_without_suffix"]=a0=>(__webgl1_match_ext_proc_address_without_suffix=Module["__webgl1_match_ext_proc_address_without_suffix"]=wasmExports["_webgl1_match_ext_proc_address_without_suffix"])(a0);var _emscripten_webgl_get_proc_address=Module["_emscripten_webgl_get_proc_address"]=a0=>(_emscripten_webgl_get_proc_address=Module["_emscripten_webgl_get_proc_address"]=wasmExports["emscripten_webgl_get_proc_address"])(a0);var _SDL_GL_GetProcAddress=Module["_SDL_GL_GetProcAddress"]=a0=>(_SDL_GL_GetProcAddress=Module["_SDL_GL_GetProcAddress"]=wasmExports["SDL_GL_GetProcAddress"])(a0);var _eglGetProcAddress=Module["_eglGetProcAddress"]=a0=>(_eglGetProcAddress=Module["_eglGetProcAddress"]=wasmExports["eglGetProcAddress"])(a0);var _glfwGetProcAddress=Module["_glfwGetProcAddress"]=a0=>(_glfwGetProcAddress=Module["_glfwGetProcAddress"]=wasmExports["glfwGetProcAddress"])(a0);var _emscripten_webgl_init_context_attributes=Module["_emscripten_webgl_init_context_attributes"]=a0=>(_emscripten_webgl_init_context_attributes=Module["_emscripten_webgl_init_context_attributes"]=wasmExports["emscripten_webgl_init_context_attributes"])(a0);var _emscripten_is_main_runtime_thread=Module["_emscripten_is_main_runtime_thread"]=()=>(_emscripten_is_main_runtime_thread=Module["_emscripten_is_main_runtime_thread"]=wasmExports["emscripten_is_main_runtime_thread"])();var _BZ2_blockSort=Module["_BZ2_blockSort"]=a0=>(_BZ2_blockSort=Module["_BZ2_blockSort"]=wasmExports["BZ2_blockSort"])(a0);var _BZ2_bz__AssertH__fail=Module["_BZ2_bz__AssertH__fail"]=a0=>(_BZ2_bz__AssertH__fail=Module["_BZ2_bz__AssertH__fail"]=wasmExports["BZ2_bz__AssertH__fail"])(a0);var _BZ2_bzlibVersion=Module["_BZ2_bzlibVersion"]=()=>(_BZ2_bzlibVersion=Module["_BZ2_bzlibVersion"]=wasmExports["BZ2_bzlibVersion"])();var _BZ2_compressBlock=Module["_BZ2_compressBlock"]=(a0,a1)=>(_BZ2_compressBlock=Module["_BZ2_compressBlock"]=wasmExports["BZ2_compressBlock"])(a0,a1);var _BZ2_indexIntoF=Module["_BZ2_indexIntoF"]=(a0,a1)=>(_BZ2_indexIntoF=Module["_BZ2_indexIntoF"]=wasmExports["BZ2_indexIntoF"])(a0,a1);var _BZ2_decompress=Module["_BZ2_decompress"]=a0=>(_BZ2_decompress=Module["_BZ2_decompress"]=wasmExports["BZ2_decompress"])(a0);var _BZ2_bzWriteOpen=Module["_BZ2_bzWriteOpen"]=(a0,a1,a2,a3,a4)=>(_BZ2_bzWriteOpen=Module["_BZ2_bzWriteOpen"]=wasmExports["BZ2_bzWriteOpen"])(a0,a1,a2,a3,a4);var _BZ2_bzWrite=Module["_BZ2_bzWrite"]=(a0,a1,a2,a3)=>(_BZ2_bzWrite=Module["_BZ2_bzWrite"]=wasmExports["BZ2_bzWrite"])(a0,a1,a2,a3);var _BZ2_bzWriteClose=Module["_BZ2_bzWriteClose"]=(a0,a1,a2,a3,a4)=>(_BZ2_bzWriteClose=Module["_BZ2_bzWriteClose"]=wasmExports["BZ2_bzWriteClose"])(a0,a1,a2,a3,a4);var _BZ2_bzWriteClose64=Module["_BZ2_bzWriteClose64"]=(a0,a1,a2,a3,a4,a5,a6)=>(_BZ2_bzWriteClose64=Module["_BZ2_bzWriteClose64"]=wasmExports["BZ2_bzWriteClose64"])(a0,a1,a2,a3,a4,a5,a6);var _BZ2_bzReadOpen=Module["_BZ2_bzReadOpen"]=(a0,a1,a2,a3,a4,a5)=>(_BZ2_bzReadOpen=Module["_BZ2_bzReadOpen"]=wasmExports["BZ2_bzReadOpen"])(a0,a1,a2,a3,a4,a5);var _BZ2_bzReadClose=Module["_BZ2_bzReadClose"]=(a0,a1)=>(_BZ2_bzReadClose=Module["_BZ2_bzReadClose"]=wasmExports["BZ2_bzReadClose"])(a0,a1);var _BZ2_bzRead=Module["_BZ2_bzRead"]=(a0,a1,a2,a3)=>(_BZ2_bzRead=Module["_BZ2_bzRead"]=wasmExports["BZ2_bzRead"])(a0,a1,a2,a3);var _fgetc=Module["_fgetc"]=a0=>(_fgetc=Module["_fgetc"]=wasmExports["fgetc"])(a0);var _BZ2_bzReadGetUnused=Module["_BZ2_bzReadGetUnused"]=(a0,a1,a2,a3)=>(_BZ2_bzReadGetUnused=Module["_BZ2_bzReadGetUnused"]=wasmExports["BZ2_bzReadGetUnused"])(a0,a1,a2,a3);var _BZ2_bzBuffToBuffCompress=Module["_BZ2_bzBuffToBuffCompress"]=(a0,a1,a2,a3,a4,a5,a6)=>(_BZ2_bzBuffToBuffCompress=Module["_BZ2_bzBuffToBuffCompress"]=wasmExports["BZ2_bzBuffToBuffCompress"])(a0,a1,a2,a3,a4,a5,a6);var _BZ2_bzBuffToBuffDecompress=Module["_BZ2_bzBuffToBuffDecompress"]=(a0,a1,a2,a3,a4,a5)=>(_BZ2_bzBuffToBuffDecompress=Module["_BZ2_bzBuffToBuffDecompress"]=wasmExports["BZ2_bzBuffToBuffDecompress"])(a0,a1,a2,a3,a4,a5);var _BZ2_bzopen=Module["_BZ2_bzopen"]=(a0,a1)=>(_BZ2_bzopen=Module["_BZ2_bzopen"]=wasmExports["BZ2_bzopen"])(a0,a1);var _BZ2_bzdopen=Module["_BZ2_bzdopen"]=(a0,a1)=>(_BZ2_bzdopen=Module["_BZ2_bzdopen"]=wasmExports["BZ2_bzdopen"])(a0,a1);var _BZ2_bzread=Module["_BZ2_bzread"]=(a0,a1,a2)=>(_BZ2_bzread=Module["_BZ2_bzread"]=wasmExports["BZ2_bzread"])(a0,a1,a2);var _BZ2_bzwrite=Module["_BZ2_bzwrite"]=(a0,a1,a2)=>(_BZ2_bzwrite=Module["_BZ2_bzwrite"]=wasmExports["BZ2_bzwrite"])(a0,a1,a2);var _BZ2_bzflush=Module["_BZ2_bzflush"]=a0=>(_BZ2_bzflush=Module["_BZ2_bzflush"]=wasmExports["BZ2_bzflush"])(a0);var _BZ2_bzclose=Module["_BZ2_bzclose"]=a0=>(_BZ2_bzclose=Module["_BZ2_bzclose"]=wasmExports["BZ2_bzclose"])(a0);var _BZ2_bzerror=Module["_BZ2_bzerror"]=(a0,a1)=>(_BZ2_bzerror=Module["_BZ2_bzerror"]=wasmExports["BZ2_bzerror"])(a0,a1);var _BZ2_bsInitWrite=Module["_BZ2_bsInitWrite"]=a0=>(_BZ2_bsInitWrite=Module["_BZ2_bsInitWrite"]=wasmExports["BZ2_bsInitWrite"])(a0);var _BZ2_hbMakeCodeLengths=Module["_BZ2_hbMakeCodeLengths"]=(a0,a1,a2,a3)=>(_BZ2_hbMakeCodeLengths=Module["_BZ2_hbMakeCodeLengths"]=wasmExports["BZ2_hbMakeCodeLengths"])(a0,a1,a2,a3);var _BZ2_hbAssignCodes=Module["_BZ2_hbAssignCodes"]=(a0,a1,a2,a3,a4)=>(_BZ2_hbAssignCodes=Module["_BZ2_hbAssignCodes"]=wasmExports["BZ2_hbAssignCodes"])(a0,a1,a2,a3,a4);var _BZ2_hbCreateDecodeTables=Module["_BZ2_hbCreateDecodeTables"]=(a0,a1,a2,a3,a4,a5,a6)=>(_BZ2_hbCreateDecodeTables=Module["_BZ2_hbCreateDecodeTables"]=wasmExports["BZ2_hbCreateDecodeTables"])(a0,a1,a2,a3,a4,a5,a6);var _adler32_z=Module["_adler32_z"]=(a0,a1,a2)=>(_adler32_z=Module["_adler32_z"]=wasmExports["adler32_z"])(a0,a1,a2);var _adler32_combine=Module["_adler32_combine"]=(a0,a1,a2)=>(_adler32_combine=Module["_adler32_combine"]=wasmExports["adler32_combine"])(a0,a1,a2);var _adler32_combine64=Module["_adler32_combine64"]=(a0,a1,a2)=>(_adler32_combine64=Module["_adler32_combine64"]=wasmExports["adler32_combine64"])(a0,a1,a2);var _compress2=Module["_compress2"]=(a0,a1,a2,a3,a4)=>(_compress2=Module["_compress2"]=wasmExports["compress2"])(a0,a1,a2,a3,a4);var _deflateInit_=Module["_deflateInit_"]=(a0,a1,a2,a3)=>(_deflateInit_=Module["_deflateInit_"]=wasmExports["deflateInit_"])(a0,a1,a2,a3);var _compress=Module["_compress"]=(a0,a1,a2,a3)=>(_compress=Module["_compress"]=wasmExports["compress"])(a0,a1,a2,a3);var _compressBound=Module["_compressBound"]=a0=>(_compressBound=Module["_compressBound"]=wasmExports["compressBound"])(a0);var _get_crc_table=Module["_get_crc_table"]=()=>(_get_crc_table=Module["_get_crc_table"]=wasmExports["get_crc_table"])();var _crc32_z=Module["_crc32_z"]=(a0,a1,a2)=>(_crc32_z=Module["_crc32_z"]=wasmExports["crc32_z"])(a0,a1,a2);var _crc32_combine64=Module["_crc32_combine64"]=(a0,a1,a2)=>(_crc32_combine64=Module["_crc32_combine64"]=wasmExports["crc32_combine64"])(a0,a1,a2);var _crc32_combine=Module["_crc32_combine"]=(a0,a1,a2)=>(_crc32_combine=Module["_crc32_combine"]=wasmExports["crc32_combine"])(a0,a1,a2);var _crc32_combine_gen64=Module["_crc32_combine_gen64"]=a0=>(_crc32_combine_gen64=Module["_crc32_combine_gen64"]=wasmExports["crc32_combine_gen64"])(a0);var _crc32_combine_gen=Module["_crc32_combine_gen"]=a0=>(_crc32_combine_gen=Module["_crc32_combine_gen"]=wasmExports["crc32_combine_gen"])(a0);var _crc32_combine_op=Module["_crc32_combine_op"]=(a0,a1,a2)=>(_crc32_combine_op=Module["_crc32_combine_op"]=wasmExports["crc32_combine_op"])(a0,a1,a2);var _zcalloc=Module["_zcalloc"]=(a0,a1,a2)=>(_zcalloc=Module["_zcalloc"]=wasmExports["zcalloc"])(a0,a1,a2);var _zcfree=Module["_zcfree"]=(a0,a1)=>(_zcfree=Module["_zcfree"]=wasmExports["zcfree"])(a0,a1);var _deflateReset=Module["_deflateReset"]=a0=>(_deflateReset=Module["_deflateReset"]=wasmExports["deflateReset"])(a0);var _deflateResetKeep=Module["_deflateResetKeep"]=a0=>(_deflateResetKeep=Module["_deflateResetKeep"]=wasmExports["deflateResetKeep"])(a0);var _deflateGetDictionary=Module["_deflateGetDictionary"]=(a0,a1,a2)=>(_deflateGetDictionary=Module["_deflateGetDictionary"]=wasmExports["deflateGetDictionary"])(a0,a1,a2);var __tr_init=Module["__tr_init"]=a0=>(__tr_init=Module["__tr_init"]=wasmExports["_tr_init"])(a0);var _deflateSetHeader=Module["_deflateSetHeader"]=(a0,a1)=>(_deflateSetHeader=Module["_deflateSetHeader"]=wasmExports["deflateSetHeader"])(a0,a1);var _deflatePending=Module["_deflatePending"]=(a0,a1,a2)=>(_deflatePending=Module["_deflatePending"]=wasmExports["deflatePending"])(a0,a1,a2);var _deflatePrime=Module["_deflatePrime"]=(a0,a1,a2)=>(_deflatePrime=Module["_deflatePrime"]=wasmExports["deflatePrime"])(a0,a1,a2);var __tr_flush_bits=Module["__tr_flush_bits"]=a0=>(__tr_flush_bits=Module["__tr_flush_bits"]=wasmExports["_tr_flush_bits"])(a0);var _deflateParams=Module["_deflateParams"]=(a0,a1,a2)=>(_deflateParams=Module["_deflateParams"]=wasmExports["deflateParams"])(a0,a1,a2);var __tr_align=Module["__tr_align"]=a0=>(__tr_align=Module["__tr_align"]=wasmExports["_tr_align"])(a0);var __tr_stored_block=Module["__tr_stored_block"]=(a0,a1,a2,a3)=>(__tr_stored_block=Module["__tr_stored_block"]=wasmExports["_tr_stored_block"])(a0,a1,a2,a3);var _deflateTune=Module["_deflateTune"]=(a0,a1,a2,a3,a4)=>(_deflateTune=Module["_deflateTune"]=wasmExports["deflateTune"])(a0,a1,a2,a3,a4);var _deflateBound=Module["_deflateBound"]=(a0,a1)=>(_deflateBound=Module["_deflateBound"]=wasmExports["deflateBound"])(a0,a1);var __tr_flush_block=Module["__tr_flush_block"]=(a0,a1,a2,a3)=>(__tr_flush_block=Module["__tr_flush_block"]=wasmExports["_tr_flush_block"])(a0,a1,a2,a3);var _gzclose=Module["_gzclose"]=a0=>(_gzclose=Module["_gzclose"]=wasmExports["gzclose"])(a0);var _gzclose_r=Module["_gzclose_r"]=a0=>(_gzclose_r=Module["_gzclose_r"]=wasmExports["gzclose_r"])(a0);var _gzclose_w=Module["_gzclose_w"]=a0=>(_gzclose_w=Module["_gzclose_w"]=wasmExports["gzclose_w"])(a0);var _gzopen=Module["_gzopen"]=(a0,a1)=>(_gzopen=Module["_gzopen"]=wasmExports["gzopen"])(a0,a1);var _gzopen64=Module["_gzopen64"]=(a0,a1)=>(_gzopen64=Module["_gzopen64"]=wasmExports["gzopen64"])(a0,a1);var _gzdopen=Module["_gzdopen"]=(a0,a1)=>(_gzdopen=Module["_gzdopen"]=wasmExports["gzdopen"])(a0,a1);var _gzbuffer=Module["_gzbuffer"]=(a0,a1)=>(_gzbuffer=Module["_gzbuffer"]=wasmExports["gzbuffer"])(a0,a1);var _gzrewind=Module["_gzrewind"]=a0=>(_gzrewind=Module["_gzrewind"]=wasmExports["gzrewind"])(a0);var _gzseek64=Module["_gzseek64"]=(a0,a1,a2)=>(_gzseek64=Module["_gzseek64"]=wasmExports["gzseek64"])(a0,a1,a2);var _gz_error=Module["_gz_error"]=(a0,a1,a2)=>(_gz_error=Module["_gz_error"]=wasmExports["gz_error"])(a0,a1,a2);var _gzseek=Module["_gzseek"]=(a0,a1,a2)=>(_gzseek=Module["_gzseek"]=wasmExports["gzseek"])(a0,a1,a2);var _gztell64=Module["_gztell64"]=a0=>(_gztell64=Module["_gztell64"]=wasmExports["gztell64"])(a0);var _gztell=Module["_gztell"]=a0=>(_gztell=Module["_gztell"]=wasmExports["gztell"])(a0);var _gzoffset64=Module["_gzoffset64"]=a0=>(_gzoffset64=Module["_gzoffset64"]=wasmExports["gzoffset64"])(a0);var _gzoffset=Module["_gzoffset"]=a0=>(_gzoffset=Module["_gzoffset"]=wasmExports["gzoffset"])(a0);var _gzeof=Module["_gzeof"]=a0=>(_gzeof=Module["_gzeof"]=wasmExports["gzeof"])(a0);var _gzerror=Module["_gzerror"]=(a0,a1)=>(_gzerror=Module["_gzerror"]=wasmExports["gzerror"])(a0,a1);var _gzclearerr=Module["_gzclearerr"]=a0=>(_gzclearerr=Module["_gzclearerr"]=wasmExports["gzclearerr"])(a0);var _gzread=Module["_gzread"]=(a0,a1,a2)=>(_gzread=Module["_gzread"]=wasmExports["gzread"])(a0,a1,a2);var _gzfread=Module["_gzfread"]=(a0,a1,a2,a3)=>(_gzfread=Module["_gzfread"]=wasmExports["gzfread"])(a0,a1,a2,a3);var _gzgetc=Module["_gzgetc"]=a0=>(_gzgetc=Module["_gzgetc"]=wasmExports["gzgetc"])(a0);var _gzgetc_=Module["_gzgetc_"]=a0=>(_gzgetc_=Module["_gzgetc_"]=wasmExports["gzgetc_"])(a0);var _gzungetc=Module["_gzungetc"]=(a0,a1)=>(_gzungetc=Module["_gzungetc"]=wasmExports["gzungetc"])(a0,a1);var _gzgets=Module["_gzgets"]=(a0,a1,a2)=>(_gzgets=Module["_gzgets"]=wasmExports["gzgets"])(a0,a1,a2);var _gzdirect=Module["_gzdirect"]=a0=>(_gzdirect=Module["_gzdirect"]=wasmExports["gzdirect"])(a0);var _inflateReset=Module["_inflateReset"]=a0=>(_inflateReset=Module["_inflateReset"]=wasmExports["inflateReset"])(a0);var _gzwrite=Module["_gzwrite"]=(a0,a1,a2)=>(_gzwrite=Module["_gzwrite"]=wasmExports["gzwrite"])(a0,a1,a2);var _gzfwrite=Module["_gzfwrite"]=(a0,a1,a2,a3)=>(_gzfwrite=Module["_gzfwrite"]=wasmExports["gzfwrite"])(a0,a1,a2,a3);var _gzputc=Module["_gzputc"]=(a0,a1)=>(_gzputc=Module["_gzputc"]=wasmExports["gzputc"])(a0,a1);var _gzputs=Module["_gzputs"]=(a0,a1)=>(_gzputs=Module["_gzputs"]=wasmExports["gzputs"])(a0,a1);var _gzvprintf=Module["_gzvprintf"]=(a0,a1,a2)=>(_gzvprintf=Module["_gzvprintf"]=wasmExports["gzvprintf"])(a0,a1,a2);var _gzprintf=Module["_gzprintf"]=(a0,a1,a2)=>(_gzprintf=Module["_gzprintf"]=wasmExports["gzprintf"])(a0,a1,a2);var _gzflush=Module["_gzflush"]=(a0,a1)=>(_gzflush=Module["_gzflush"]=wasmExports["gzflush"])(a0,a1);var _gzsetparams=Module["_gzsetparams"]=(a0,a1,a2)=>(_gzsetparams=Module["_gzsetparams"]=wasmExports["gzsetparams"])(a0,a1,a2);var _inflateBackInit_=Module["_inflateBackInit_"]=(a0,a1,a2,a3,a4)=>(_inflateBackInit_=Module["_inflateBackInit_"]=wasmExports["inflateBackInit_"])(a0,a1,a2,a3,a4);var _inflateBack=Module["_inflateBack"]=(a0,a1,a2,a3,a4)=>(_inflateBack=Module["_inflateBack"]=wasmExports["inflateBack"])(a0,a1,a2,a3,a4);var _inflate_table=Module["_inflate_table"]=(a0,a1,a2,a3,a4,a5)=>(_inflate_table=Module["_inflate_table"]=wasmExports["inflate_table"])(a0,a1,a2,a3,a4,a5);var _inflate_fast=Module["_inflate_fast"]=(a0,a1)=>(_inflate_fast=Module["_inflate_fast"]=wasmExports["inflate_fast"])(a0,a1);var _inflateBackEnd=Module["_inflateBackEnd"]=a0=>(_inflateBackEnd=Module["_inflateBackEnd"]=wasmExports["inflateBackEnd"])(a0);var _inflateResetKeep=Module["_inflateResetKeep"]=a0=>(_inflateResetKeep=Module["_inflateResetKeep"]=wasmExports["inflateResetKeep"])(a0);var _inflateReset2=Module["_inflateReset2"]=(a0,a1)=>(_inflateReset2=Module["_inflateReset2"]=wasmExports["inflateReset2"])(a0,a1);var _inflateInit_=Module["_inflateInit_"]=(a0,a1,a2)=>(_inflateInit_=Module["_inflateInit_"]=wasmExports["inflateInit_"])(a0,a1,a2);var _inflatePrime=Module["_inflatePrime"]=(a0,a1,a2)=>(_inflatePrime=Module["_inflatePrime"]=wasmExports["inflatePrime"])(a0,a1,a2);var _inflateGetDictionary=Module["_inflateGetDictionary"]=(a0,a1,a2)=>(_inflateGetDictionary=Module["_inflateGetDictionary"]=wasmExports["inflateGetDictionary"])(a0,a1,a2);var _inflateGetHeader=Module["_inflateGetHeader"]=(a0,a1)=>(_inflateGetHeader=Module["_inflateGetHeader"]=wasmExports["inflateGetHeader"])(a0,a1);var _inflateSync=Module["_inflateSync"]=a0=>(_inflateSync=Module["_inflateSync"]=wasmExports["inflateSync"])(a0);var _inflateSyncPoint=Module["_inflateSyncPoint"]=a0=>(_inflateSyncPoint=Module["_inflateSyncPoint"]=wasmExports["inflateSyncPoint"])(a0);var _inflateUndermine=Module["_inflateUndermine"]=(a0,a1)=>(_inflateUndermine=Module["_inflateUndermine"]=wasmExports["inflateUndermine"])(a0,a1);var _inflateValidate=Module["_inflateValidate"]=(a0,a1)=>(_inflateValidate=Module["_inflateValidate"]=wasmExports["inflateValidate"])(a0,a1);var _inflateMark=Module["_inflateMark"]=a0=>(_inflateMark=Module["_inflateMark"]=wasmExports["inflateMark"])(a0);var _inflateCodesUsed=Module["_inflateCodesUsed"]=a0=>(_inflateCodesUsed=Module["_inflateCodesUsed"]=wasmExports["inflateCodesUsed"])(a0);var __tr_tally=Module["__tr_tally"]=(a0,a1,a2)=>(__tr_tally=Module["__tr_tally"]=wasmExports["_tr_tally"])(a0,a1,a2);var _uncompress2=Module["_uncompress2"]=(a0,a1,a2,a3)=>(_uncompress2=Module["_uncompress2"]=wasmExports["uncompress2"])(a0,a1,a2,a3);var _uncompress=Module["_uncompress"]=(a0,a1,a2,a3)=>(_uncompress=Module["_uncompress"]=wasmExports["uncompress"])(a0,a1,a2,a3);var _zlibCompileFlags=Module["_zlibCompileFlags"]=()=>(_zlibCompileFlags=Module["_zlibCompileFlags"]=wasmExports["zlibCompileFlags"])();var _zError=Module["_zError"]=a0=>(_zError=Module["_zError"]=wasmExports["zError"])(a0);var __emscripten_memcpy_bulkmem=Module["__emscripten_memcpy_bulkmem"]=(a0,a1,a2)=>(__emscripten_memcpy_bulkmem=Module["__emscripten_memcpy_bulkmem"]=wasmExports["_emscripten_memcpy_bulkmem"])(a0,a1,a2);var _emscripten_builtin_memcpy=Module["_emscripten_builtin_memcpy"]=(a0,a1,a2)=>(_emscripten_builtin_memcpy=Module["_emscripten_builtin_memcpy"]=wasmExports["emscripten_builtin_memcpy"])(a0,a1,a2);var ___memset=Module["___memset"]=(a0,a1,a2)=>(___memset=Module["___memset"]=wasmExports["__memset"])(a0,a1,a2);var __emscripten_memset_bulkmem=Module["__emscripten_memset_bulkmem"]=(a0,a1,a2)=>(__emscripten_memset_bulkmem=Module["__emscripten_memset_bulkmem"]=wasmExports["_emscripten_memset_bulkmem"])(a0,a1,a2);var _emscripten_builtin_memset=Module["_emscripten_builtin_memset"]=(a0,a1,a2)=>(_emscripten_builtin_memset=Module["_emscripten_builtin_memset"]=wasmExports["emscripten_builtin_memset"])(a0,a1,a2);var _getdate=Module["_getdate"]=a0=>(_getdate=Module["_getdate"]=wasmExports["getdate"])(a0);var _stime=Module["_stime"]=a0=>(_stime=Module["_stime"]=wasmExports["stime"])(a0);var _clock_getcpuclockid=Module["_clock_getcpuclockid"]=(a0,a1)=>(_clock_getcpuclockid=Module["_clock_getcpuclockid"]=wasmExports["clock_getcpuclockid"])(a0,a1);var _getpwnam=Module["_getpwnam"]=a0=>(_getpwnam=Module["_getpwnam"]=wasmExports["getpwnam"])(a0);var _getpwuid=Module["_getpwuid"]=a0=>(_getpwuid=Module["_getpwuid"]=wasmExports["getpwuid"])(a0);var _getpwnam_r=Module["_getpwnam_r"]=(a0,a1,a2,a3,a4)=>(_getpwnam_r=Module["_getpwnam_r"]=wasmExports["getpwnam_r"])(a0,a1,a2,a3,a4);var _getpwuid_r=Module["_getpwuid_r"]=(a0,a1,a2,a3,a4)=>(_getpwuid_r=Module["_getpwuid_r"]=wasmExports["getpwuid_r"])(a0,a1,a2,a3,a4);var _setpwent=Module["_setpwent"]=()=>(_setpwent=Module["_setpwent"]=wasmExports["setpwent"])();var _endpwent=Module["_endpwent"]=()=>(_endpwent=Module["_endpwent"]=wasmExports["endpwent"])();var _getpwent=Module["_getpwent"]=()=>(_getpwent=Module["_getpwent"]=wasmExports["getpwent"])();var _getgrnam=Module["_getgrnam"]=a0=>(_getgrnam=Module["_getgrnam"]=wasmExports["getgrnam"])(a0);var _getgrgid=Module["_getgrgid"]=a0=>(_getgrgid=Module["_getgrgid"]=wasmExports["getgrgid"])(a0);var _getgrnam_r=Module["_getgrnam_r"]=(a0,a1,a2,a3,a4)=>(_getgrnam_r=Module["_getgrnam_r"]=wasmExports["getgrnam_r"])(a0,a1,a2,a3,a4);var _getgrgid_r=Module["_getgrgid_r"]=(a0,a1,a2,a3,a4)=>(_getgrgid_r=Module["_getgrgid_r"]=wasmExports["getgrgid_r"])(a0,a1,a2,a3,a4);var _getgrent=Module["_getgrent"]=()=>(_getgrent=Module["_getgrent"]=wasmExports["getgrent"])();var _endgrent=Module["_endgrent"]=()=>(_endgrent=Module["_endgrent"]=wasmExports["endgrent"])();var _setgrent=Module["_setgrent"]=()=>(_setgrent=Module["_setgrent"]=wasmExports["setgrent"])();var _flock=Module["_flock"]=(a0,a1)=>(_flock=Module["_flock"]=wasmExports["flock"])(a0,a1);var _vfork=Module["_vfork"]=()=>(_vfork=Module["_vfork"]=wasmExports["vfork"])();var _posix_spawn=Module["_posix_spawn"]=(a0,a1,a2,a3,a4,a5)=>(_posix_spawn=Module["_posix_spawn"]=wasmExports["posix_spawn"])(a0,a1,a2,a3,a4,a5);var _popen=Module["_popen"]=(a0,a1)=>(_popen=Module["_popen"]=wasmExports["popen"])(a0,a1);var _pclose=Module["_pclose"]=a0=>(_pclose=Module["_pclose"]=wasmExports["pclose"])(a0);var _setgroups=Module["_setgroups"]=(a0,a1)=>(_setgroups=Module["_setgroups"]=wasmExports["setgroups"])(a0,a1);var _sigaltstack=Module["_sigaltstack"]=(a0,a1)=>(_sigaltstack=Module["_sigaltstack"]=wasmExports["sigaltstack"])(a0,a1);var ___syscall_uname=Module["___syscall_uname"]=a0=>(___syscall_uname=Module["___syscall_uname"]=wasmExports["__syscall_uname"])(a0);var ___syscall_setpgid=Module["___syscall_setpgid"]=(a0,a1)=>(___syscall_setpgid=Module["___syscall_setpgid"]=wasmExports["__syscall_setpgid"])(a0,a1);var ___syscall_sync=Module["___syscall_sync"]=()=>(___syscall_sync=Module["___syscall_sync"]=wasmExports["__syscall_sync"])();var ___syscall_getsid=Module["___syscall_getsid"]=a0=>(___syscall_getsid=Module["___syscall_getsid"]=wasmExports["__syscall_getsid"])(a0);var ___syscall_getpgid=Module["___syscall_getpgid"]=a0=>(___syscall_getpgid=Module["___syscall_getpgid"]=wasmExports["__syscall_getpgid"])(a0);var ___syscall_getpid=Module["___syscall_getpid"]=()=>(___syscall_getpid=Module["___syscall_getpid"]=wasmExports["__syscall_getpid"])();var ___syscall_getppid=Module["___syscall_getppid"]=()=>(___syscall_getppid=Module["___syscall_getppid"]=wasmExports["__syscall_getppid"])();var ___syscall_linkat=Module["___syscall_linkat"]=(a0,a1,a2,a3,a4)=>(___syscall_linkat=Module["___syscall_linkat"]=wasmExports["__syscall_linkat"])(a0,a1,a2,a3,a4);var ___syscall_getgroups32=Module["___syscall_getgroups32"]=(a0,a1)=>(___syscall_getgroups32=Module["___syscall_getgroups32"]=wasmExports["__syscall_getgroups32"])(a0,a1);var ___syscall_setsid=Module["___syscall_setsid"]=()=>(___syscall_setsid=Module["___syscall_setsid"]=wasmExports["__syscall_setsid"])();var ___syscall_umask=Module["___syscall_umask"]=a0=>(___syscall_umask=Module["___syscall_umask"]=wasmExports["__syscall_umask"])(a0);var ___syscall_setrlimit=Module["___syscall_setrlimit"]=(a0,a1)=>(___syscall_setrlimit=Module["___syscall_setrlimit"]=wasmExports["__syscall_setrlimit"])(a0,a1);var ___syscall_getrusage=Module["___syscall_getrusage"]=(a0,a1)=>(___syscall_getrusage=Module["___syscall_getrusage"]=wasmExports["__syscall_getrusage"])(a0,a1);var ___syscall_getpriority=Module["___syscall_getpriority"]=(a0,a1)=>(___syscall_getpriority=Module["___syscall_getpriority"]=wasmExports["__syscall_getpriority"])(a0,a1);var ___syscall_setpriority=Module["___syscall_setpriority"]=(a0,a1,a2)=>(___syscall_setpriority=Module["___syscall_setpriority"]=wasmExports["__syscall_setpriority"])(a0,a1,a2);var ___syscall_setdomainname=Module["___syscall_setdomainname"]=(a0,a1)=>(___syscall_setdomainname=Module["___syscall_setdomainname"]=wasmExports["__syscall_setdomainname"])(a0,a1);var ___syscall_getuid32=Module["___syscall_getuid32"]=()=>(___syscall_getuid32=Module["___syscall_getuid32"]=wasmExports["__syscall_getuid32"])();var ___syscall_getgid32=Module["___syscall_getgid32"]=()=>(___syscall_getgid32=Module["___syscall_getgid32"]=wasmExports["__syscall_getgid32"])();var ___syscall_geteuid32=Module["___syscall_geteuid32"]=()=>(___syscall_geteuid32=Module["___syscall_geteuid32"]=wasmExports["__syscall_geteuid32"])();var ___syscall_getegid32=Module["___syscall_getegid32"]=()=>(___syscall_getegid32=Module["___syscall_getegid32"]=wasmExports["__syscall_getegid32"])();var ___syscall_getresuid32=Module["___syscall_getresuid32"]=(a0,a1,a2)=>(___syscall_getresuid32=Module["___syscall_getresuid32"]=wasmExports["__syscall_getresuid32"])(a0,a1,a2);var ___syscall_getresgid32=Module["___syscall_getresgid32"]=(a0,a1,a2)=>(___syscall_getresgid32=Module["___syscall_getresgid32"]=wasmExports["__syscall_getresgid32"])(a0,a1,a2);var ___syscall_pause=Module["___syscall_pause"]=()=>(___syscall_pause=Module["___syscall_pause"]=wasmExports["__syscall_pause"])();var ___syscall_madvise=Module["___syscall_madvise"]=(a0,a1,a2)=>(___syscall_madvise=Module["___syscall_madvise"]=wasmExports["__syscall_madvise"])(a0,a1,a2);var ___syscall_mlock=Module["___syscall_mlock"]=(a0,a1)=>(___syscall_mlock=Module["___syscall_mlock"]=wasmExports["__syscall_mlock"])(a0,a1);var ___syscall_munlock=Module["___syscall_munlock"]=(a0,a1)=>(___syscall_munlock=Module["___syscall_munlock"]=wasmExports["__syscall_munlock"])(a0,a1);var ___syscall_mprotect=Module["___syscall_mprotect"]=(a0,a1,a2)=>(___syscall_mprotect=Module["___syscall_mprotect"]=wasmExports["__syscall_mprotect"])(a0,a1,a2);var ___syscall_mremap=Module["___syscall_mremap"]=(a0,a1,a2,a3,a4)=>(___syscall_mremap=Module["___syscall_mremap"]=wasmExports["__syscall_mremap"])(a0,a1,a2,a3,a4);var ___syscall_mlockall=Module["___syscall_mlockall"]=a0=>(___syscall_mlockall=Module["___syscall_mlockall"]=wasmExports["__syscall_mlockall"])(a0);var ___syscall_munlockall=Module["___syscall_munlockall"]=()=>(___syscall_munlockall=Module["___syscall_munlockall"]=wasmExports["__syscall_munlockall"])();var ___syscall_prlimit64=Module["___syscall_prlimit64"]=(a0,a1,a2,a3)=>(___syscall_prlimit64=Module["___syscall_prlimit64"]=wasmExports["__syscall_prlimit64"])(a0,a1,a2,a3);var ___syscall_ugetrlimit=Module["___syscall_ugetrlimit"]=(a0,a1)=>(___syscall_ugetrlimit=Module["___syscall_ugetrlimit"]=wasmExports["__syscall_ugetrlimit"])(a0,a1);var ___syscall_setsockopt=Module["___syscall_setsockopt"]=(a0,a1,a2,a3,a4,a5)=>(___syscall_setsockopt=Module["___syscall_setsockopt"]=wasmExports["__syscall_setsockopt"])(a0,a1,a2,a3,a4,a5);var ___syscall_acct=Module["___syscall_acct"]=a0=>(___syscall_acct=Module["___syscall_acct"]=wasmExports["__syscall_acct"])(a0);var ___syscall_mincore=Module["___syscall_mincore"]=(a0,a1,a2)=>(___syscall_mincore=Module["___syscall_mincore"]=wasmExports["__syscall_mincore"])(a0,a1,a2);var ___syscall_pipe2=Module["___syscall_pipe2"]=(a0,a1)=>(___syscall_pipe2=Module["___syscall_pipe2"]=wasmExports["__syscall_pipe2"])(a0,a1);var ___syscall_pselect6=Module["___syscall_pselect6"]=(a0,a1,a2,a3,a4,a5)=>(___syscall_pselect6=Module["___syscall_pselect6"]=wasmExports["__syscall_pselect6"])(a0,a1,a2,a3,a4,a5);var ___syscall_recvmmsg=Module["___syscall_recvmmsg"]=(a0,a1,a2,a3,a4)=>(___syscall_recvmmsg=Module["___syscall_recvmmsg"]=wasmExports["__syscall_recvmmsg"])(a0,a1,a2,a3,a4);var ___syscall_sendmmsg=Module["___syscall_sendmmsg"]=(a0,a1,a2,a3,a4)=>(___syscall_sendmmsg=Module["___syscall_sendmmsg"]=wasmExports["__syscall_sendmmsg"])(a0,a1,a2,a3,a4);var ___syscall_shutdown=Module["___syscall_shutdown"]=(a0,a1,a2,a3,a4,a5)=>(___syscall_shutdown=Module["___syscall_shutdown"]=wasmExports["__syscall_shutdown"])(a0,a1,a2,a3,a4,a5);var ___syscall_socketpair=Module["___syscall_socketpair"]=(a0,a1,a2,a3,a4,a5)=>(___syscall_socketpair=Module["___syscall_socketpair"]=wasmExports["__syscall_socketpair"])(a0,a1,a2,a3,a4,a5);var ___syscall_wait4=Module["___syscall_wait4"]=(a0,a1,a2,a3)=>(___syscall_wait4=Module["___syscall_wait4"]=wasmExports["__syscall_wait4"])(a0,a1,a2,a3);var _atexit=Module["_atexit"]=a0=>(_atexit=Module["_atexit"]=wasmExports["atexit"])(a0);var ___cxa_atexit=Module["___cxa_atexit"]=(a0,a1,a2)=>(___cxa_atexit=Module["___cxa_atexit"]=wasmExports["__cxa_atexit"])(a0,a1,a2);var ___cxa_finalize=Module["___cxa_finalize"]=a0=>(___cxa_finalize=Module["___cxa_finalize"]=wasmExports["__cxa_finalize"])(a0);var __Exit=Module["__Exit"]=a0=>(__Exit=Module["__Exit"]=wasmExports["_Exit"])(a0);var _cosf=Module["_cosf"]=a0=>(_cosf=Module["_cosf"]=wasmExports["cosf"])(a0);var _sinf=Module["_sinf"]=a0=>(_sinf=Module["_sinf"]=wasmExports["sinf"])(a0);var _expf=Module["_expf"]=a0=>(_expf=Module["_expf"]=wasmExports["expf"])(a0);var ___multf3=Module["___multf3"]=(a0,a1,a2,a3,a4)=>(___multf3=Module["___multf3"]=wasmExports["__multf3"])(a0,a1,a2,a3,a4);var ___addtf3=Module["___addtf3"]=(a0,a1,a2,a3,a4)=>(___addtf3=Module["___addtf3"]=wasmExports["__addtf3"])(a0,a1,a2,a3,a4);var ___subtf3=Module["___subtf3"]=(a0,a1,a2,a3,a4)=>(___subtf3=Module["___subtf3"]=wasmExports["__subtf3"])(a0,a1,a2,a3,a4);var ___ctype_b_loc=Module["___ctype_b_loc"]=()=>(___ctype_b_loc=Module["___ctype_b_loc"]=wasmExports["__ctype_b_loc"])();var ___ctype_get_mb_cur_max=Module["___ctype_get_mb_cur_max"]=()=>(___ctype_get_mb_cur_max=Module["___ctype_get_mb_cur_max"]=wasmExports["__ctype_get_mb_cur_max"])();var ___get_tp=Module["___get_tp"]=()=>(___get_tp=Module["___get_tp"]=wasmExports["__get_tp"])();var ___ctype_tolower_loc=Module["___ctype_tolower_loc"]=()=>(___ctype_tolower_loc=Module["___ctype_tolower_loc"]=wasmExports["__ctype_tolower_loc"])();var ___ctype_toupper_loc=Module["___ctype_toupper_loc"]=()=>(___ctype_toupper_loc=Module["___ctype_toupper_loc"]=wasmExports["__ctype_toupper_loc"])();var ___emscripten_environ_constructor=Module["___emscripten_environ_constructor"]=()=>(___emscripten_environ_constructor=Module["___emscripten_environ_constructor"]=wasmExports["__emscripten_environ_constructor"])();var _emscripten_builtin_malloc=Module["_emscripten_builtin_malloc"]=a0=>(_emscripten_builtin_malloc=Module["_emscripten_builtin_malloc"]=wasmExports["emscripten_builtin_malloc"])(a0);var ___flt_rounds=Module["___flt_rounds"]=()=>(___flt_rounds=Module["___flt_rounds"]=wasmExports["__flt_rounds"])();var _fegetround=Module["_fegetround"]=()=>(_fegetround=Module["_fegetround"]=wasmExports["fegetround"])();var ___fmodeflags=Module["___fmodeflags"]=a0=>(___fmodeflags=Module["___fmodeflags"]=wasmExports["__fmodeflags"])(a0);var ___fpclassify=Module["___fpclassify"]=a0=>(___fpclassify=Module["___fpclassify"]=wasmExports["__fpclassify"])(a0);var ___fpclassifyf=Module["___fpclassifyf"]=a0=>(___fpclassifyf=Module["___fpclassifyf"]=wasmExports["__fpclassifyf"])(a0);var ___fpclassifyl=Module["___fpclassifyl"]=(a0,a1)=>(___fpclassifyl=Module["___fpclassifyl"]=wasmExports["__fpclassifyl"])(a0,a1);var ___divtf3=Module["___divtf3"]=(a0,a1,a2,a3,a4)=>(___divtf3=Module["___divtf3"]=wasmExports["__divtf3"])(a0,a1,a2,a3,a4);var ___mo_lookup=Module["___mo_lookup"]=(a0,a1,a2)=>(___mo_lookup=Module["___mo_lookup"]=wasmExports["__mo_lookup"])(a0,a1,a2);var ___overflow=Module["___overflow"]=(a0,a1)=>(___overflow=Module["___overflow"]=wasmExports["__overflow"])(a0,a1);var _scalbn=Module["_scalbn"]=(a0,a1)=>(_scalbn=Module["_scalbn"]=wasmExports["scalbn"])(a0,a1);var _floor=Module["_floor"]=a0=>(_floor=Module["_floor"]=wasmExports["floor"])(a0);var ___lttf2=Module["___lttf2"]=(a0,a1,a2,a3)=>(___lttf2=Module["___lttf2"]=wasmExports["__lttf2"])(a0,a1,a2,a3);var ___fixtfdi=Module["___fixtfdi"]=(a0,a1)=>(___fixtfdi=Module["___fixtfdi"]=wasmExports["__fixtfdi"])(a0,a1);var ___gttf2=Module["___gttf2"]=(a0,a1,a2,a3)=>(___gttf2=Module["___gttf2"]=wasmExports["__gttf2"])(a0,a1,a2,a3);var ___fixtfsi=Module["___fixtfsi"]=(a0,a1)=>(___fixtfsi=Module["___fixtfsi"]=wasmExports["__fixtfsi"])(a0,a1);var ___floatsitf=Module["___floatsitf"]=(a0,a1)=>(___floatsitf=Module["___floatsitf"]=wasmExports["__floatsitf"])(a0,a1);var ___signbit=Module["___signbit"]=a0=>(___signbit=Module["___signbit"]=wasmExports["__signbit"])(a0);var ___signbitf=Module["___signbitf"]=a0=>(___signbitf=Module["___signbitf"]=wasmExports["__signbitf"])(a0);var ___signbitl=Module["___signbitl"]=(a0,a1)=>(___signbitl=Module["___signbitl"]=wasmExports["__signbitl"])(a0,a1);var ___wasi_syscall_ret=Module["___wasi_syscall_ret"]=a0=>(___wasi_syscall_ret=Module["___wasi_syscall_ret"]=wasmExports["__wasi_syscall_ret"])(a0);var ___synccall=Module["___synccall"]=(a0,a1)=>(___synccall=Module["___synccall"]=wasmExports["__synccall"])(a0,a1);var _fabsl=Module["_fabsl"]=(a0,a1,a2)=>(_fabsl=Module["_fabsl"]=wasmExports["fabsl"])(a0,a1,a2);var ___getf2=Module["___getf2"]=(a0,a1,a2,a3)=>(___getf2=Module["___getf2"]=wasmExports["__getf2"])(a0,a1,a2,a3);var ___uflow=Module["___uflow"]=a0=>(___uflow=Module["___uflow"]=wasmExports["__uflow"])(a0);var ___fxstat=Module["___fxstat"]=(a0,a1,a2)=>(___fxstat=Module["___fxstat"]=wasmExports["__fxstat"])(a0,a1,a2);var ___fxstatat=Module["___fxstatat"]=(a0,a1,a2,a3,a4)=>(___fxstatat=Module["___fxstatat"]=wasmExports["__fxstatat"])(a0,a1,a2,a3,a4);var ___lxstat=Module["___lxstat"]=(a0,a1,a2)=>(___lxstat=Module["___lxstat"]=wasmExports["__lxstat"])(a0,a1,a2);var ___xstat=Module["___xstat"]=(a0,a1,a2)=>(___xstat=Module["___xstat"]=wasmExports["__xstat"])(a0,a1,a2);var ___xmknod=Module["___xmknod"]=(a0,a1,a2,a3)=>(___xmknod=Module["___xmknod"]=wasmExports["__xmknod"])(a0,a1,a2,a3);var _mknod=Module["_mknod"]=(a0,a1,a2)=>(_mknod=Module["_mknod"]=wasmExports["mknod"])(a0,a1,a2);var ___xmknodat=Module["___xmknodat"]=(a0,a1,a2,a3,a4)=>(___xmknodat=Module["___xmknodat"]=wasmExports["__xmknodat"])(a0,a1,a2,a3,a4);var _mknodat=Module["_mknodat"]=(a0,a1,a2,a3)=>(_mknodat=Module["_mknodat"]=wasmExports["mknodat"])(a0,a1,a2,a3);var _a64l=Module["_a64l"]=a0=>(_a64l=Module["_a64l"]=wasmExports["a64l"])(a0);var _l64a=Module["_l64a"]=a0=>(_l64a=Module["_l64a"]=wasmExports["l64a"])(a0);var _abs=Module["_abs"]=a0=>(_abs=Module["_abs"]=wasmExports["abs"])(a0);var _acct=Module["_acct"]=a0=>(_acct=Module["_acct"]=wasmExports["acct"])(a0);var _acosf=Module["_acosf"]=a0=>(_acosf=Module["_acosf"]=wasmExports["acosf"])(a0);var _sqrtf=Module["_sqrtf"]=a0=>(_sqrtf=Module["_sqrtf"]=wasmExports["sqrtf"])(a0);var _acoshf=Module["_acoshf"]=a0=>(_acoshf=Module["_acoshf"]=wasmExports["acoshf"])(a0);var _log1pf=Module["_log1pf"]=a0=>(_log1pf=Module["_log1pf"]=wasmExports["log1pf"])(a0);var _logf=Module["_logf"]=a0=>(_logf=Module["_logf"]=wasmExports["logf"])(a0);var _acoshl=Module["_acoshl"]=(a0,a1,a2)=>(_acoshl=Module["_acoshl"]=wasmExports["acoshl"])(a0,a1,a2);var _acosl=Module["_acosl"]=(a0,a1,a2)=>(_acosl=Module["_acosl"]=wasmExports["acosl"])(a0,a1,a2);var ___eqtf2=Module["___eqtf2"]=(a0,a1,a2,a3)=>(___eqtf2=Module["___eqtf2"]=wasmExports["__eqtf2"])(a0,a1,a2,a3);var ___netf2=Module["___netf2"]=(a0,a1,a2,a3)=>(___netf2=Module["___netf2"]=wasmExports["__netf2"])(a0,a1,a2,a3);var _sqrtl=Module["_sqrtl"]=(a0,a1,a2)=>(_sqrtl=Module["_sqrtl"]=wasmExports["sqrtl"])(a0,a1,a2);var _alarm=Module["_alarm"]=a0=>(_alarm=Module["_alarm"]=wasmExports["alarm"])(a0);var _setitimer=Module["_setitimer"]=(a0,a1,a2)=>(_setitimer=Module["_setitimer"]=wasmExports["setitimer"])(a0,a1,a2);var _aligned_alloc=Module["_aligned_alloc"]=(a0,a1)=>(_aligned_alloc=Module["_aligned_alloc"]=wasmExports["aligned_alloc"])(a0,a1);var _posix_memalign=Module["_posix_memalign"]=(a0,a1,a2)=>(_posix_memalign=Module["_posix_memalign"]=wasmExports["posix_memalign"])(a0,a1,a2);var _alphasort=Module["_alphasort"]=(a0,a1)=>(_alphasort=Module["_alphasort"]=wasmExports["alphasort"])(a0,a1);var _strcoll=Module["_strcoll"]=(a0,a1)=>(_strcoll=Module["_strcoll"]=wasmExports["strcoll"])(a0,a1);var _asctime=Module["_asctime"]=a0=>(_asctime=Module["_asctime"]=wasmExports["asctime"])(a0);var ___nl_langinfo_l=Module["___nl_langinfo_l"]=(a0,a1)=>(___nl_langinfo_l=Module["___nl_langinfo_l"]=wasmExports["__nl_langinfo_l"])(a0,a1);var _asctime_r=Module["_asctime_r"]=(a0,a1)=>(_asctime_r=Module["_asctime_r"]=wasmExports["asctime_r"])(a0,a1);var _asinf=Module["_asinf"]=a0=>(_asinf=Module["_asinf"]=wasmExports["asinf"])(a0);var _fabsf=Module["_fabsf"]=a0=>(_fabsf=Module["_fabsf"]=wasmExports["fabsf"])(a0);var _asinhf=Module["_asinhf"]=a0=>(_asinhf=Module["_asinhf"]=wasmExports["asinhf"])(a0);var _asinhl=Module["_asinhl"]=(a0,a1,a2)=>(_asinhl=Module["_asinhl"]=wasmExports["asinhl"])(a0,a1,a2);var _asinl=Module["_asinl"]=(a0,a1,a2)=>(_asinl=Module["_asinl"]=wasmExports["asinl"])(a0,a1,a2);var _asprintf=Module["_asprintf"]=(a0,a1,a2)=>(_asprintf=Module["_asprintf"]=wasmExports["asprintf"])(a0,a1,a2);var _vasprintf=Module["_vasprintf"]=(a0,a1,a2)=>(_vasprintf=Module["_vasprintf"]=wasmExports["vasprintf"])(a0,a1,a2);var ___lock=Module["___lock"]=a0=>(___lock=Module["___lock"]=wasmExports["__lock"])(a0);var ___unlock=Module["___unlock"]=a0=>(___unlock=Module["___unlock"]=wasmExports["__unlock"])(a0);var _at_quick_exit=Module["_at_quick_exit"]=a0=>(_at_quick_exit=Module["_at_quick_exit"]=wasmExports["at_quick_exit"])(a0);var _atan2f=Module["_atan2f"]=(a0,a1)=>(_atan2f=Module["_atan2f"]=wasmExports["atan2f"])(a0,a1);var _atanf=Module["_atanf"]=a0=>(_atanf=Module["_atanf"]=wasmExports["atanf"])(a0);var _atan2l=Module["_atan2l"]=(a0,a1,a2,a3,a4)=>(_atan2l=Module["_atan2l"]=wasmExports["atan2l"])(a0,a1,a2,a3,a4);var _atanl=Module["_atanl"]=(a0,a1,a2)=>(_atanl=Module["_atanl"]=wasmExports["atanl"])(a0,a1,a2);var _atanhf=Module["_atanhf"]=a0=>(_atanhf=Module["_atanhf"]=wasmExports["atanhf"])(a0);var _atanhl=Module["_atanhl"]=(a0,a1,a2)=>(_atanhl=Module["_atanhl"]=wasmExports["atanhl"])(a0,a1,a2);var _log1pl=Module["_log1pl"]=(a0,a1,a2)=>(_log1pl=Module["_log1pl"]=wasmExports["log1pl"])(a0,a1,a2);var ____cxa_finalize=Module["____cxa_finalize"]=a0=>(____cxa_finalize=Module["____cxa_finalize"]=wasmExports["___cxa_finalize"])(a0);var ____cxa_atexit=Module["____cxa_atexit"]=(a0,a1,a2)=>(____cxa_atexit=Module["____cxa_atexit"]=wasmExports["___cxa_atexit"])(a0,a1,a2);var ___libc_calloc=Module["___libc_calloc"]=(a0,a1)=>(___libc_calloc=Module["___libc_calloc"]=wasmExports["__libc_calloc"])(a0,a1);var ___atexit=Module["___atexit"]=a0=>(___atexit=Module["___atexit"]=wasmExports["__atexit"])(a0);var _atof=Module["_atof"]=a0=>(_atof=Module["_atof"]=wasmExports["atof"])(a0);var _strtod=Module["_strtod"]=(a0,a1)=>(_strtod=Module["_strtod"]=wasmExports["strtod"])(a0,a1);var _atoi=Module["_atoi"]=a0=>(_atoi=Module["_atoi"]=wasmExports["atoi"])(a0);var _atol=Module["_atol"]=a0=>(_atol=Module["_atol"]=wasmExports["atol"])(a0);var _atoll=Module["_atoll"]=a0=>(_atoll=Module["_atoll"]=wasmExports["atoll"])(a0);var _basename=Module["_basename"]=a0=>(_basename=Module["_basename"]=wasmExports["basename"])(a0);var ___xpg_basename=Module["___xpg_basename"]=a0=>(___xpg_basename=Module["___xpg_basename"]=wasmExports["__xpg_basename"])(a0);var _bcmp=Module["_bcmp"]=(a0,a1,a2)=>(_bcmp=Module["_bcmp"]=wasmExports["bcmp"])(a0,a1,a2);var _bcopy=Module["_bcopy"]=(a0,a1,a2)=>(_bcopy=Module["_bcopy"]=wasmExports["bcopy"])(a0,a1,a2);var _strcasecmp=Module["_strcasecmp"]=(a0,a1)=>(_strcasecmp=Module["_strcasecmp"]=wasmExports["strcasecmp"])(a0,a1);var _bsearch=Module["_bsearch"]=(a0,a1,a2,a3,a4)=>(_bsearch=Module["_bsearch"]=wasmExports["bsearch"])(a0,a1,a2,a3,a4);var _btowc=Module["_btowc"]=a0=>(_btowc=Module["_btowc"]=wasmExports["btowc"])(a0);var _bzero=Module["_bzero"]=(a0,a1)=>(_bzero=Module["_bzero"]=wasmExports["bzero"])(a0,a1);var _c16rtomb=Module["_c16rtomb"]=(a0,a1,a2)=>(_c16rtomb=Module["_c16rtomb"]=wasmExports["c16rtomb"])(a0,a1,a2);var _wcrtomb=Module["_wcrtomb"]=(a0,a1,a2)=>(_wcrtomb=Module["_wcrtomb"]=wasmExports["wcrtomb"])(a0,a1,a2);var _c32rtomb=Module["_c32rtomb"]=(a0,a1,a2)=>(_c32rtomb=Module["_c32rtomb"]=wasmExports["c32rtomb"])(a0,a1,a2);var _cabs=Module["_cabs"]=a0=>(_cabs=Module["_cabs"]=wasmExports["cabs"])(a0);var _cabsf=Module["_cabsf"]=a0=>(_cabsf=Module["_cabsf"]=wasmExports["cabsf"])(a0);var _hypotf=Module["_hypotf"]=(a0,a1)=>(_hypotf=Module["_hypotf"]=wasmExports["hypotf"])(a0,a1);var _cabsl=Module["_cabsl"]=(a0,a1)=>(_cabsl=Module["_cabsl"]=wasmExports["cabsl"])(a0,a1);var _hypotl=Module["_hypotl"]=(a0,a1,a2,a3,a4)=>(_hypotl=Module["_hypotl"]=wasmExports["hypotl"])(a0,a1,a2,a3,a4);var _cacos=Module["_cacos"]=(a0,a1)=>(_cacos=Module["_cacos"]=wasmExports["cacos"])(a0,a1);var _casin=Module["_casin"]=(a0,a1)=>(_casin=Module["_casin"]=wasmExports["casin"])(a0,a1);var _cacosf=Module["_cacosf"]=(a0,a1)=>(_cacosf=Module["_cacosf"]=wasmExports["cacosf"])(a0,a1);var _casinf=Module["_casinf"]=(a0,a1)=>(_casinf=Module["_casinf"]=wasmExports["casinf"])(a0,a1);var _cacosh=Module["_cacosh"]=(a0,a1)=>(_cacosh=Module["_cacosh"]=wasmExports["cacosh"])(a0,a1);var _cacoshf=Module["_cacoshf"]=(a0,a1)=>(_cacoshf=Module["_cacoshf"]=wasmExports["cacoshf"])(a0,a1);var _cacoshl=Module["_cacoshl"]=(a0,a1)=>(_cacoshl=Module["_cacoshl"]=wasmExports["cacoshl"])(a0,a1);var _cacosl=Module["_cacosl"]=(a0,a1)=>(_cacosl=Module["_cacosl"]=wasmExports["cacosl"])(a0,a1);var _casinl=Module["_casinl"]=(a0,a1)=>(_casinl=Module["_casinl"]=wasmExports["casinl"])(a0,a1);var _call_once=Module["_call_once"]=(a0,a1)=>(_call_once=Module["_call_once"]=wasmExports["call_once"])(a0,a1);var _carg=Module["_carg"]=a0=>(_carg=Module["_carg"]=wasmExports["carg"])(a0);var _cargf=Module["_cargf"]=a0=>(_cargf=Module["_cargf"]=wasmExports["cargf"])(a0);var _cargl=Module["_cargl"]=(a0,a1)=>(_cargl=Module["_cargl"]=wasmExports["cargl"])(a0,a1);var _csqrt=Module["_csqrt"]=(a0,a1)=>(_csqrt=Module["_csqrt"]=wasmExports["csqrt"])(a0,a1);var _clog=Module["_clog"]=(a0,a1)=>(_clog=Module["_clog"]=wasmExports["clog"])(a0,a1);var _csqrtf=Module["_csqrtf"]=(a0,a1)=>(_csqrtf=Module["_csqrtf"]=wasmExports["csqrtf"])(a0,a1);var _clogf=Module["_clogf"]=(a0,a1)=>(_clogf=Module["_clogf"]=wasmExports["clogf"])(a0,a1);var _casinh=Module["_casinh"]=(a0,a1)=>(_casinh=Module["_casinh"]=wasmExports["casinh"])(a0,a1);var _casinhf=Module["_casinhf"]=(a0,a1)=>(_casinhf=Module["_casinhf"]=wasmExports["casinhf"])(a0,a1);var _casinhl=Module["_casinhl"]=(a0,a1)=>(_casinhl=Module["_casinhl"]=wasmExports["casinhl"])(a0,a1);var _csqrtl=Module["_csqrtl"]=(a0,a1)=>(_csqrtl=Module["_csqrtl"]=wasmExports["csqrtl"])(a0,a1);var _clogl=Module["_clogl"]=(a0,a1)=>(_clogl=Module["_clogl"]=wasmExports["clogl"])(a0,a1);var _catan=Module["_catan"]=(a0,a1)=>(_catan=Module["_catan"]=wasmExports["catan"])(a0,a1);var _catanf=Module["_catanf"]=(a0,a1)=>(_catanf=Module["_catanf"]=wasmExports["catanf"])(a0,a1);var _catanh=Module["_catanh"]=(a0,a1)=>(_catanh=Module["_catanh"]=wasmExports["catanh"])(a0,a1);var _catanhf=Module["_catanhf"]=(a0,a1)=>(_catanhf=Module["_catanhf"]=wasmExports["catanhf"])(a0,a1);var _catanhl=Module["_catanhl"]=(a0,a1)=>(_catanhl=Module["_catanhl"]=wasmExports["catanhl"])(a0,a1);var _catanl=Module["_catanl"]=(a0,a1)=>(_catanl=Module["_catanl"]=wasmExports["catanl"])(a0,a1);var _logl=Module["_logl"]=(a0,a1,a2)=>(_logl=Module["_logl"]=wasmExports["logl"])(a0,a1,a2);var ___trunctfsf2=Module["___trunctfsf2"]=(a0,a1)=>(___trunctfsf2=Module["___trunctfsf2"]=wasmExports["__trunctfsf2"])(a0,a1);var ___extendsftf2=Module["___extendsftf2"]=(a0,a1)=>(___extendsftf2=Module["___extendsftf2"]=wasmExports["__extendsftf2"])(a0,a1);var _catclose=Module["_catclose"]=a0=>(_catclose=Module["_catclose"]=wasmExports["catclose"])(a0);var _catgets=Module["_catgets"]=(a0,a1,a2,a3)=>(_catgets=Module["_catgets"]=wasmExports["catgets"])(a0,a1,a2,a3);var _catopen=Module["_catopen"]=(a0,a1)=>(_catopen=Module["_catopen"]=wasmExports["catopen"])(a0,a1);var _cbrtf=Module["_cbrtf"]=a0=>(_cbrtf=Module["_cbrtf"]=wasmExports["cbrtf"])(a0);var _cbrtl=Module["_cbrtl"]=(a0,a1,a2)=>(_cbrtl=Module["_cbrtl"]=wasmExports["cbrtl"])(a0,a1,a2);var _ccos=Module["_ccos"]=(a0,a1)=>(_ccos=Module["_ccos"]=wasmExports["ccos"])(a0,a1);var _ccosh=Module["_ccosh"]=(a0,a1)=>(_ccosh=Module["_ccosh"]=wasmExports["ccosh"])(a0,a1);var _ccosf=Module["_ccosf"]=(a0,a1)=>(_ccosf=Module["_ccosf"]=wasmExports["ccosf"])(a0,a1);var _ccoshf=Module["_ccoshf"]=(a0,a1)=>(_ccoshf=Module["_ccoshf"]=wasmExports["ccoshf"])(a0,a1);var _coshf=Module["_coshf"]=a0=>(_coshf=Module["_coshf"]=wasmExports["coshf"])(a0);var _sinhf=Module["_sinhf"]=a0=>(_sinhf=Module["_sinhf"]=wasmExports["sinhf"])(a0);var _copysignf=Module["_copysignf"]=(a0,a1)=>(_copysignf=Module["_copysignf"]=wasmExports["copysignf"])(a0,a1);var _ccoshl=Module["_ccoshl"]=(a0,a1)=>(_ccoshl=Module["_ccoshl"]=wasmExports["ccoshl"])(a0,a1);var _ccosl=Module["_ccosl"]=(a0,a1)=>(_ccosl=Module["_ccosl"]=wasmExports["ccosl"])(a0,a1);var _ceil=Module["_ceil"]=a0=>(_ceil=Module["_ceil"]=wasmExports["ceil"])(a0);var _ceilf=Module["_ceilf"]=a0=>(_ceilf=Module["_ceilf"]=wasmExports["ceilf"])(a0);var _ceill=Module["_ceill"]=(a0,a1,a2)=>(_ceill=Module["_ceill"]=wasmExports["ceill"])(a0,a1,a2);var _cexp=Module["_cexp"]=(a0,a1)=>(_cexp=Module["_cexp"]=wasmExports["cexp"])(a0,a1);var _cexpf=Module["_cexpf"]=(a0,a1)=>(_cexpf=Module["_cexpf"]=wasmExports["cexpf"])(a0,a1);var _cexpl=Module["_cexpl"]=(a0,a1)=>(_cexpl=Module["_cexpl"]=wasmExports["cexpl"])(a0,a1);var _cfgetospeed=Module["_cfgetospeed"]=a0=>(_cfgetospeed=Module["_cfgetospeed"]=wasmExports["cfgetospeed"])(a0);var _cfgetispeed=Module["_cfgetispeed"]=a0=>(_cfgetispeed=Module["_cfgetispeed"]=wasmExports["cfgetispeed"])(a0);var _cfmakeraw=Module["_cfmakeraw"]=a0=>(_cfmakeraw=Module["_cfmakeraw"]=wasmExports["cfmakeraw"])(a0);var _cfsetospeed=Module["_cfsetospeed"]=(a0,a1)=>(_cfsetospeed=Module["_cfsetospeed"]=wasmExports["cfsetospeed"])(a0,a1);var _cfsetispeed=Module["_cfsetispeed"]=(a0,a1)=>(_cfsetispeed=Module["_cfsetispeed"]=wasmExports["cfsetispeed"])(a0,a1);var _cfsetspeed=Module["_cfsetspeed"]=(a0,a1)=>(_cfsetspeed=Module["_cfsetspeed"]=wasmExports["cfsetspeed"])(a0,a1);var _cimag=Module["_cimag"]=a0=>(_cimag=Module["_cimag"]=wasmExports["cimag"])(a0);var _cimagf=Module["_cimagf"]=a0=>(_cimagf=Module["_cimagf"]=wasmExports["cimagf"])(a0);var _cimagl=Module["_cimagl"]=(a0,a1)=>(_cimagl=Module["_cimagl"]=wasmExports["cimagl"])(a0,a1);var _clearenv=Module["_clearenv"]=()=>(_clearenv=Module["_clearenv"]=wasmExports["clearenv"])();var _clearerr_unlocked=Module["_clearerr_unlocked"]=a0=>(_clearerr_unlocked=Module["_clearerr_unlocked"]=wasmExports["clearerr_unlocked"])(a0);var _emscripten_thread_sleep=Module["_emscripten_thread_sleep"]=a0=>(_emscripten_thread_sleep=Module["_emscripten_thread_sleep"]=wasmExports["emscripten_thread_sleep"])(a0);var _cnd_broadcast=Module["_cnd_broadcast"]=a0=>(_cnd_broadcast=Module["_cnd_broadcast"]=wasmExports["cnd_broadcast"])(a0);var _cnd_destroy=Module["_cnd_destroy"]=a0=>(_cnd_destroy=Module["_cnd_destroy"]=wasmExports["cnd_destroy"])(a0);var _cnd_init=Module["_cnd_init"]=a0=>(_cnd_init=Module["_cnd_init"]=wasmExports["cnd_init"])(a0);var _cnd_signal=Module["_cnd_signal"]=a0=>(_cnd_signal=Module["_cnd_signal"]=wasmExports["cnd_signal"])(a0);var _cnd_timedwait=Module["_cnd_timedwait"]=(a0,a1,a2)=>(_cnd_timedwait=Module["_cnd_timedwait"]=wasmExports["cnd_timedwait"])(a0,a1,a2);var _cnd_wait=Module["_cnd_wait"]=(a0,a1)=>(_cnd_wait=Module["_cnd_wait"]=wasmExports["cnd_wait"])(a0,a1);var _conj=Module["_conj"]=(a0,a1)=>(_conj=Module["_conj"]=wasmExports["conj"])(a0,a1);var _conjf=Module["_conjf"]=(a0,a1)=>(_conjf=Module["_conjf"]=wasmExports["conjf"])(a0,a1);var _conjl=Module["_conjl"]=(a0,a1)=>(_conjl=Module["_conjl"]=wasmExports["conjl"])(a0,a1);var _copysignl=Module["_copysignl"]=(a0,a1,a2,a3,a4)=>(_copysignl=Module["_copysignl"]=wasmExports["copysignl"])(a0,a1,a2,a3,a4);var _expm1f=Module["_expm1f"]=a0=>(_expm1f=Module["_expm1f"]=wasmExports["expm1f"])(a0);var _coshl=Module["_coshl"]=(a0,a1,a2)=>(_coshl=Module["_coshl"]=wasmExports["coshl"])(a0,a1,a2);var _cosl=Module["_cosl"]=(a0,a1,a2)=>(_cosl=Module["_cosl"]=wasmExports["cosl"])(a0,a1,a2);var _cpow=Module["_cpow"]=(a0,a1,a2)=>(_cpow=Module["_cpow"]=wasmExports["cpow"])(a0,a1,a2);var ___muldc3=Module["___muldc3"]=(a0,a1,a2,a3,a4)=>(___muldc3=Module["___muldc3"]=wasmExports["__muldc3"])(a0,a1,a2,a3,a4);var _cpowf=Module["_cpowf"]=(a0,a1,a2)=>(_cpowf=Module["_cpowf"]=wasmExports["cpowf"])(a0,a1,a2);var ___mulsc3=Module["___mulsc3"]=(a0,a1,a2,a3,a4)=>(___mulsc3=Module["___mulsc3"]=wasmExports["__mulsc3"])(a0,a1,a2,a3,a4);var _cpowl=Module["_cpowl"]=(a0,a1,a2)=>(_cpowl=Module["_cpowl"]=wasmExports["cpowl"])(a0,a1,a2);var ___unordtf2=Module["___unordtf2"]=(a0,a1,a2,a3)=>(___unordtf2=Module["___unordtf2"]=wasmExports["__unordtf2"])(a0,a1,a2,a3);var ___multc3=Module["___multc3"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8)=>(___multc3=Module["___multc3"]=wasmExports["__multc3"])(a0,a1,a2,a3,a4,a5,a6,a7,a8);var _cproj=Module["_cproj"]=(a0,a1)=>(_cproj=Module["_cproj"]=wasmExports["cproj"])(a0,a1);var _cprojf=Module["_cprojf"]=(a0,a1)=>(_cprojf=Module["_cprojf"]=wasmExports["cprojf"])(a0,a1);var _cprojl=Module["_cprojl"]=(a0,a1)=>(_cprojl=Module["_cprojl"]=wasmExports["cprojl"])(a0,a1);var _creal=Module["_creal"]=a0=>(_creal=Module["_creal"]=wasmExports["creal"])(a0);var _crealf=Module["_crealf"]=a0=>(_crealf=Module["_crealf"]=wasmExports["crealf"])(a0);var _creall=Module["_creall"]=(a0,a1)=>(_creall=Module["_creall"]=wasmExports["creall"])(a0,a1);var _creat=Module["_creat"]=(a0,a1)=>(_creat=Module["_creat"]=wasmExports["creat"])(a0,a1);var _crypt=Module["_crypt"]=(a0,a1)=>(_crypt=Module["_crypt"]=wasmExports["crypt"])(a0,a1);var ___crypt_blowfish=Module["___crypt_blowfish"]=(a0,a1,a2)=>(___crypt_blowfish=Module["___crypt_blowfish"]=wasmExports["__crypt_blowfish"])(a0,a1,a2);var ___crypt_des=Module["___crypt_des"]=(a0,a1,a2)=>(___crypt_des=Module["___crypt_des"]=wasmExports["__crypt_des"])(a0,a1,a2);var ___crypt_md5=Module["___crypt_md5"]=(a0,a1,a2)=>(___crypt_md5=Module["___crypt_md5"]=wasmExports["__crypt_md5"])(a0,a1,a2);var _strnlen=Module["_strnlen"]=(a0,a1)=>(_strnlen=Module["_strnlen"]=wasmExports["strnlen"])(a0,a1);var ___crypt_sha256=Module["___crypt_sha256"]=(a0,a1,a2)=>(___crypt_sha256=Module["___crypt_sha256"]=wasmExports["__crypt_sha256"])(a0,a1,a2);var ___crypt_sha512=Module["___crypt_sha512"]=(a0,a1,a2)=>(___crypt_sha512=Module["___crypt_sha512"]=wasmExports["__crypt_sha512"])(a0,a1,a2);var _sprintf=Module["_sprintf"]=(a0,a1,a2)=>(_sprintf=Module["_sprintf"]=wasmExports["sprintf"])(a0,a1,a2);var _csin=Module["_csin"]=(a0,a1)=>(_csin=Module["_csin"]=wasmExports["csin"])(a0,a1);var _csinh=Module["_csinh"]=(a0,a1)=>(_csinh=Module["_csinh"]=wasmExports["csinh"])(a0,a1);var _csinf=Module["_csinf"]=(a0,a1)=>(_csinf=Module["_csinf"]=wasmExports["csinf"])(a0,a1);var _csinhf=Module["_csinhf"]=(a0,a1)=>(_csinhf=Module["_csinhf"]=wasmExports["csinhf"])(a0,a1);var _csinhl=Module["_csinhl"]=(a0,a1)=>(_csinhl=Module["_csinhl"]=wasmExports["csinhl"])(a0,a1);var _csinl=Module["_csinl"]=(a0,a1)=>(_csinl=Module["_csinl"]=wasmExports["csinl"])(a0,a1);var _ctan=Module["_ctan"]=(a0,a1)=>(_ctan=Module["_ctan"]=wasmExports["ctan"])(a0,a1);var _ctanh=Module["_ctanh"]=(a0,a1)=>(_ctanh=Module["_ctanh"]=wasmExports["ctanh"])(a0,a1);var _ctanf=Module["_ctanf"]=(a0,a1)=>(_ctanf=Module["_ctanf"]=wasmExports["ctanf"])(a0,a1);var _ctanhf=Module["_ctanhf"]=(a0,a1)=>(_ctanhf=Module["_ctanhf"]=wasmExports["ctanhf"])(a0,a1);var _tanf=Module["_tanf"]=a0=>(_tanf=Module["_tanf"]=wasmExports["tanf"])(a0);var _ctanhl=Module["_ctanhl"]=(a0,a1)=>(_ctanhl=Module["_ctanhl"]=wasmExports["ctanhl"])(a0,a1);var _ctanl=Module["_ctanl"]=(a0,a1)=>(_ctanl=Module["_ctanl"]=wasmExports["ctanl"])(a0,a1);var _ctime=Module["_ctime"]=a0=>(_ctime=Module["_ctime"]=wasmExports["ctime"])(a0);var _localtime=Module["_localtime"]=a0=>(_localtime=Module["_localtime"]=wasmExports["localtime"])(a0);var _ctime_r=Module["_ctime_r"]=(a0,a1)=>(_ctime_r=Module["_ctime_r"]=wasmExports["ctime_r"])(a0,a1);var _dcngettext=Module["_dcngettext"]=(a0,a1,a2,a3,a4)=>(_dcngettext=Module["_dcngettext"]=wasmExports["dcngettext"])(a0,a1,a2,a3,a4);var ___gettextdomain=Module["___gettextdomain"]=()=>(___gettextdomain=Module["___gettextdomain"]=wasmExports["__gettextdomain"])();var _dngettext=Module["_dngettext"]=(a0,a1,a2,a3)=>(_dngettext=Module["_dngettext"]=wasmExports["dngettext"])(a0,a1,a2,a3);var _difftime=Module["_difftime"]=(a0,a1)=>(_difftime=Module["_difftime"]=wasmExports["difftime"])(a0,a1);var _dirname=Module["_dirname"]=a0=>(_dirname=Module["_dirname"]=wasmExports["dirname"])(a0);var _div=Module["_div"]=(a0,a1,a2)=>(_div=Module["_div"]=wasmExports["div"])(a0,a1,a2);var _dladdr=Module["_dladdr"]=(a0,a1)=>(_dladdr=Module["_dladdr"]=wasmExports["dladdr"])(a0,a1);var ___libc_free=Module["___libc_free"]=a0=>(___libc_free=Module["___libc_free"]=wasmExports["__libc_free"])(a0);var ___libc_malloc=Module["___libc_malloc"]=a0=>(___libc_malloc=Module["___libc_malloc"]=wasmExports["__libc_malloc"])(a0);var ___dl_seterr=(a0,a1)=>(___dl_seterr=wasmExports["__dl_seterr"])(a0,a1);var _dn_comp=Module["_dn_comp"]=(a0,a1,a2,a3,a4)=>(_dn_comp=Module["_dn_comp"]=wasmExports["dn_comp"])(a0,a1,a2,a3,a4);var _dn_expand=Module["_dn_expand"]=(a0,a1,a2,a3,a4)=>(_dn_expand=Module["_dn_expand"]=wasmExports["dn_expand"])(a0,a1,a2,a3,a4);var _dn_skipname=Module["_dn_skipname"]=(a0,a1)=>(_dn_skipname=Module["_dn_skipname"]=wasmExports["dn_skipname"])(a0,a1);var _dprintf=Module["_dprintf"]=(a0,a1,a2)=>(_dprintf=Module["_dprintf"]=wasmExports["dprintf"])(a0,a1,a2);var _vdprintf=Module["_vdprintf"]=(a0,a1,a2)=>(_vdprintf=Module["_vdprintf"]=wasmExports["vdprintf"])(a0,a1,a2);var _erand48=Module["_erand48"]=a0=>(_erand48=Module["_erand48"]=wasmExports["erand48"])(a0);var _drand48=Module["_drand48"]=()=>(_drand48=Module["_drand48"]=wasmExports["drand48"])();var ___wasi_fd_is_valid=Module["___wasi_fd_is_valid"]=a0=>(___wasi_fd_is_valid=Module["___wasi_fd_is_valid"]=wasmExports["__wasi_fd_is_valid"])(a0);var ___duplocale=Module["___duplocale"]=a0=>(___duplocale=Module["___duplocale"]=wasmExports["__duplocale"])(a0);var _duplocale=Module["_duplocale"]=a0=>(_duplocale=Module["_duplocale"]=wasmExports["duplocale"])(a0);var _new_dlevent=Module["_new_dlevent"]=(a0,a1)=>(_new_dlevent=Module["_new_dlevent"]=wasmExports["new_dlevent"])(a0,a1);var _pthread_setcancelstate=Module["_pthread_setcancelstate"]=(a0,a1)=>(_pthread_setcancelstate=Module["_pthread_setcancelstate"]=wasmExports["pthread_setcancelstate"])(a0,a1);var _emscripten_dlopen=Module["_emscripten_dlopen"]=(a0,a1,a2,a3,a4)=>(_emscripten_dlopen=Module["_emscripten_dlopen"]=wasmExports["emscripten_dlopen"])(a0,a1,a2,a3,a4);var _emscripten_dlopen_promise=Module["_emscripten_dlopen_promise"]=(a0,a1)=>(_emscripten_dlopen_promise=Module["_emscripten_dlopen_promise"]=wasmExports["emscripten_dlopen_promise"])(a0,a1);var _strspn=Module["_strspn"]=(a0,a1)=>(_strspn=Module["_strspn"]=wasmExports["strspn"])(a0,a1);var _ecvt=Module["_ecvt"]=(a0,a1,a2,a3)=>(_ecvt=Module["_ecvt"]=wasmExports["ecvt"])(a0,a1,a2,a3);var _emscripten_console_logf=Module["_emscripten_console_logf"]=(a0,a1)=>(_emscripten_console_logf=Module["_emscripten_console_logf"]=wasmExports["emscripten_console_logf"])(a0,a1);var _emscripten_console_errorf=Module["_emscripten_console_errorf"]=(a0,a1)=>(_emscripten_console_errorf=Module["_emscripten_console_errorf"]=wasmExports["emscripten_console_errorf"])(a0,a1);var _emscripten_console_warnf=Module["_emscripten_console_warnf"]=(a0,a1)=>(_emscripten_console_warnf=Module["_emscripten_console_warnf"]=wasmExports["emscripten_console_warnf"])(a0,a1);var _emscripten_outf=Module["_emscripten_outf"]=(a0,a1)=>(_emscripten_outf=Module["_emscripten_outf"]=wasmExports["emscripten_outf"])(a0,a1);var _emscripten_errf=Module["_emscripten_errf"]=(a0,a1)=>(_emscripten_errf=Module["_emscripten_errf"]=wasmExports["emscripten_errf"])(a0,a1);var _emscripten_fiber_init=Module["_emscripten_fiber_init"]=(a0,a1,a2,a3,a4,a5,a6)=>(_emscripten_fiber_init=Module["_emscripten_fiber_init"]=wasmExports["emscripten_fiber_init"])(a0,a1,a2,a3,a4,a5,a6);var _emscripten_fiber_init_from_current_context=Module["_emscripten_fiber_init_from_current_context"]=(a0,a1,a2)=>(_emscripten_fiber_init_from_current_context=Module["_emscripten_fiber_init_from_current_context"]=wasmExports["emscripten_fiber_init_from_current_context"])(a0,a1,a2);var _emscripten_stack_get_base=Module["_emscripten_stack_get_base"]=()=>(_emscripten_stack_get_base=Module["_emscripten_stack_get_base"]=wasmExports["emscripten_stack_get_base"])();var _emscripten_stack_get_end=Module["_emscripten_stack_get_end"]=()=>(_emscripten_stack_get_end=Module["_emscripten_stack_get_end"]=wasmExports["emscripten_stack_get_end"])();var _emscripten_get_heap_size=Module["_emscripten_get_heap_size"]=()=>(_emscripten_get_heap_size=Module["_emscripten_get_heap_size"]=wasmExports["emscripten_get_heap_size"])();var ___syscall_munmap=Module["___syscall_munmap"]=(a0,a1)=>(___syscall_munmap=Module["___syscall_munmap"]=wasmExports["__syscall_munmap"])(a0,a1);var _emscripten_builtin_free=Module["_emscripten_builtin_free"]=a0=>(_emscripten_builtin_free=Module["_emscripten_builtin_free"]=wasmExports["emscripten_builtin_free"])(a0);var ___syscall_msync=Module["___syscall_msync"]=(a0,a1,a2)=>(___syscall_msync=Module["___syscall_msync"]=wasmExports["__syscall_msync"])(a0,a1,a2);var ___syscall_mmap2=Module["___syscall_mmap2"]=(a0,a1,a2,a3,a4,a5)=>(___syscall_mmap2=Module["___syscall_mmap2"]=wasmExports["__syscall_mmap2"])(a0,a1,a2,a3,a4,a5);var _emscripten_builtin_memalign=(a0,a1)=>(_emscripten_builtin_memalign=wasmExports["emscripten_builtin_memalign"])(a0,a1);var _emscripten_scan_stack=Module["_emscripten_scan_stack"]=a0=>(_emscripten_scan_stack=Module["_emscripten_scan_stack"]=wasmExports["emscripten_scan_stack"])(a0);var _emscripten_stack_get_current=()=>(_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"])();var ___clock=Module["___clock"]=()=>(___clock=Module["___clock"]=wasmExports["__clock"])();var ___time=Module["___time"]=a0=>(___time=Module["___time"]=wasmExports["__time"])(a0);var ___clock_getres=Module["___clock_getres"]=(a0,a1)=>(___clock_getres=Module["___clock_getres"]=wasmExports["__clock_getres"])(a0,a1);var ___gettimeofday=Module["___gettimeofday"]=(a0,a1)=>(___gettimeofday=Module["___gettimeofday"]=wasmExports["__gettimeofday"])(a0,a1);var _dysize=Module["_dysize"]=a0=>(_dysize=Module["_dysize"]=wasmExports["dysize"])(a0);var _setkey=Module["_setkey"]=a0=>(_setkey=Module["_setkey"]=wasmExports["setkey"])(a0);var _encrypt=Module["_encrypt"]=(a0,a1)=>(_encrypt=Module["_encrypt"]=wasmExports["encrypt"])(a0,a1);var _sethostent=Module["_sethostent"]=a0=>(_sethostent=Module["_sethostent"]=wasmExports["sethostent"])(a0);var _gethostent=Module["_gethostent"]=()=>(_gethostent=Module["_gethostent"]=wasmExports["gethostent"])();var _getnetent=Module["_getnetent"]=()=>(_getnetent=Module["_getnetent"]=wasmExports["getnetent"])();var _endhostent=Module["_endhostent"]=()=>(_endhostent=Module["_endhostent"]=wasmExports["endhostent"])();var _setnetent=Module["_setnetent"]=a0=>(_setnetent=Module["_setnetent"]=wasmExports["setnetent"])(a0);var _endnetent=Module["_endnetent"]=()=>(_endnetent=Module["_endnetent"]=wasmExports["endnetent"])();var _erff=Module["_erff"]=a0=>(_erff=Module["_erff"]=wasmExports["erff"])(a0);var _erfcf=Module["_erfcf"]=a0=>(_erfcf=Module["_erfcf"]=wasmExports["erfcf"])(a0);var _erfl=Module["_erfl"]=(a0,a1,a2)=>(_erfl=Module["_erfl"]=wasmExports["erfl"])(a0,a1,a2);var _erfcl=Module["_erfcl"]=(a0,a1,a2)=>(_erfcl=Module["_erfcl"]=wasmExports["erfcl"])(a0,a1,a2);var _vwarn=Module["_vwarn"]=(a0,a1)=>(_vwarn=Module["_vwarn"]=wasmExports["vwarn"])(a0,a1);var _fprintf=Module["_fprintf"]=(a0,a1,a2)=>(_fprintf=Module["_fprintf"]=wasmExports["fprintf"])(a0,a1,a2);var _vwarnx=Module["_vwarnx"]=(a0,a1)=>(_vwarnx=Module["_vwarnx"]=wasmExports["vwarnx"])(a0,a1);var _putc=Module["_putc"]=(a0,a1)=>(_putc=Module["_putc"]=wasmExports["putc"])(a0,a1);var _verr=Module["_verr"]=(a0,a1,a2)=>(_verr=Module["_verr"]=wasmExports["verr"])(a0,a1,a2);var _verrx=Module["_verrx"]=(a0,a1,a2)=>(_verrx=Module["_verrx"]=wasmExports["verrx"])(a0,a1,a2);var _warn=Module["_warn"]=(a0,a1)=>(_warn=Module["_warn"]=wasmExports["warn"])(a0,a1);var _warnx=Module["_warnx"]=(a0,a1)=>(_warnx=Module["_warnx"]=wasmExports["warnx"])(a0,a1);var _err=Module["_err"]=(a0,a1,a2)=>(_err=Module["_err"]=wasmExports["err"])(a0,a1,a2);var _errx=Module["_errx"]=(a0,a1,a2)=>(_errx=Module["_errx"]=wasmExports["errx"])(a0,a1,a2);var _ether_aton_r=Module["_ether_aton_r"]=(a0,a1)=>(_ether_aton_r=Module["_ether_aton_r"]=wasmExports["ether_aton_r"])(a0,a1);var _ether_aton=Module["_ether_aton"]=a0=>(_ether_aton=Module["_ether_aton"]=wasmExports["ether_aton"])(a0);var _ether_ntoa_r=Module["_ether_ntoa_r"]=(a0,a1)=>(_ether_ntoa_r=Module["_ether_ntoa_r"]=wasmExports["ether_ntoa_r"])(a0,a1);var _ether_ntoa=Module["_ether_ntoa"]=a0=>(_ether_ntoa=Module["_ether_ntoa"]=wasmExports["ether_ntoa"])(a0);var _ether_line=Module["_ether_line"]=(a0,a1,a2)=>(_ether_line=Module["_ether_line"]=wasmExports["ether_line"])(a0,a1,a2);var _ether_ntohost=Module["_ether_ntohost"]=(a0,a1)=>(_ether_ntohost=Module["_ether_ntohost"]=wasmExports["ether_ntohost"])(a0,a1);var _ether_hostton=Module["_ether_hostton"]=(a0,a1)=>(_ether_hostton=Module["_ether_hostton"]=wasmExports["ether_hostton"])(a0,a1);var _execl=Module["_execl"]=(a0,a1,a2)=>(_execl=Module["_execl"]=wasmExports["execl"])(a0,a1,a2);var _execle=Module["_execle"]=(a0,a1,a2)=>(_execle=Module["_execle"]=wasmExports["execle"])(a0,a1,a2);var _execlp=Module["_execlp"]=(a0,a1,a2)=>(_execlp=Module["_execlp"]=wasmExports["execlp"])(a0,a1,a2);var _execvp=Module["_execvp"]=(a0,a1)=>(_execvp=Module["_execvp"]=wasmExports["execvp"])(a0,a1);var _execvpe=Module["_execvpe"]=(a0,a1,a2)=>(_execvpe=Module["_execvpe"]=wasmExports["execvpe"])(a0,a1,a2);var _exp10=Module["_exp10"]=a0=>(_exp10=Module["_exp10"]=wasmExports["exp10"])(a0);var _pow10=Module["_pow10"]=a0=>(_pow10=Module["_pow10"]=wasmExports["pow10"])(a0);var _exp10f=Module["_exp10f"]=a0=>(_exp10f=Module["_exp10f"]=wasmExports["exp10f"])(a0);var _modff=Module["_modff"]=(a0,a1)=>(_modff=Module["_modff"]=wasmExports["modff"])(a0,a1);var _exp2f=Module["_exp2f"]=a0=>(_exp2f=Module["_exp2f"]=wasmExports["exp2f"])(a0);var _pow10f=Module["_pow10f"]=a0=>(_pow10f=Module["_pow10f"]=wasmExports["pow10f"])(a0);var _exp10l=Module["_exp10l"]=(a0,a1,a2)=>(_exp10l=Module["_exp10l"]=wasmExports["exp10l"])(a0,a1,a2);var _modfl=Module["_modfl"]=(a0,a1,a2,a3)=>(_modfl=Module["_modfl"]=wasmExports["modfl"])(a0,a1,a2,a3);var _exp2l=Module["_exp2l"]=(a0,a1,a2)=>(_exp2l=Module["_exp2l"]=wasmExports["exp2l"])(a0,a1,a2);var _powl=Module["_powl"]=(a0,a1,a2,a3,a4)=>(_powl=Module["_powl"]=wasmExports["powl"])(a0,a1,a2,a3,a4);var _pow10l=Module["_pow10l"]=(a0,a1,a2)=>(_pow10l=Module["_pow10l"]=wasmExports["pow10l"])(a0,a1,a2);var ___letf2=Module["___letf2"]=(a0,a1,a2,a3)=>(___letf2=Module["___letf2"]=wasmExports["__letf2"])(a0,a1,a2,a3);var _scalbnl=Module["_scalbnl"]=(a0,a1,a2,a3)=>(_scalbnl=Module["_scalbnl"]=wasmExports["scalbnl"])(a0,a1,a2,a3);var _expl=Module["_expl"]=(a0,a1,a2)=>(_expl=Module["_expl"]=wasmExports["expl"])(a0,a1,a2);var _expm1l=Module["_expm1l"]=(a0,a1,a2)=>(_expm1l=Module["_expm1l"]=wasmExports["expm1l"])(a0,a1,a2);var __flushlbf=Module["__flushlbf"]=()=>(__flushlbf=Module["__flushlbf"]=wasmExports["_flushlbf"])();var ___fsetlocking=Module["___fsetlocking"]=(a0,a1)=>(___fsetlocking=Module["___fsetlocking"]=wasmExports["__fsetlocking"])(a0,a1);var ___fwriting=Module["___fwriting"]=a0=>(___fwriting=Module["___fwriting"]=wasmExports["__fwriting"])(a0);var ___freading=Module["___freading"]=a0=>(___freading=Module["___freading"]=wasmExports["__freading"])(a0);var ___freadable=Module["___freadable"]=a0=>(___freadable=Module["___freadable"]=wasmExports["__freadable"])(a0);var ___fwritable=Module["___fwritable"]=a0=>(___fwritable=Module["___fwritable"]=wasmExports["__fwritable"])(a0);var ___flbf=Module["___flbf"]=a0=>(___flbf=Module["___flbf"]=wasmExports["__flbf"])(a0);var ___fbufsize=Module["___fbufsize"]=a0=>(___fbufsize=Module["___fbufsize"]=wasmExports["__fbufsize"])(a0);var ___fpending=Module["___fpending"]=a0=>(___fpending=Module["___fpending"]=wasmExports["__fpending"])(a0);var ___fpurge=Module["___fpurge"]=a0=>(___fpurge=Module["___fpurge"]=wasmExports["__fpurge"])(a0);var _fpurge=Module["_fpurge"]=a0=>(_fpurge=Module["_fpurge"]=wasmExports["fpurge"])(a0);var ___freadahead=Module["___freadahead"]=a0=>(___freadahead=Module["___freadahead"]=wasmExports["__freadahead"])(a0);var ___freadptr=Module["___freadptr"]=(a0,a1)=>(___freadptr=Module["___freadptr"]=wasmExports["__freadptr"])(a0,a1);var ___freadptrinc=Module["___freadptrinc"]=(a0,a1)=>(___freadptrinc=Module["___freadptrinc"]=wasmExports["__freadptrinc"])(a0,a1);var ___fseterr=Module["___fseterr"]=a0=>(___fseterr=Module["___fseterr"]=wasmExports["__fseterr"])(a0);var _faccessat=Module["_faccessat"]=(a0,a1,a2,a3)=>(_faccessat=Module["_faccessat"]=wasmExports["faccessat"])(a0,a1,a2,a3);var _fcvt=Module["_fcvt"]=(a0,a1,a2,a3)=>(_fcvt=Module["_fcvt"]=wasmExports["fcvt"])(a0,a1,a2,a3);var _fdim=Module["_fdim"]=(a0,a1)=>(_fdim=Module["_fdim"]=wasmExports["fdim"])(a0,a1);var _fdimf=Module["_fdimf"]=(a0,a1)=>(_fdimf=Module["_fdimf"]=wasmExports["fdimf"])(a0,a1);var _fdiml=Module["_fdiml"]=(a0,a1,a2,a3,a4)=>(_fdiml=Module["_fdiml"]=wasmExports["fdiml"])(a0,a1,a2,a3,a4);var _fegetexceptflag=Module["_fegetexceptflag"]=(a0,a1)=>(_fegetexceptflag=Module["_fegetexceptflag"]=wasmExports["fegetexceptflag"])(a0,a1);var _fetestexcept=Module["_fetestexcept"]=a0=>(_fetestexcept=Module["_fetestexcept"]=wasmExports["fetestexcept"])(a0);var _feholdexcept=Module["_feholdexcept"]=a0=>(_feholdexcept=Module["_feholdexcept"]=wasmExports["feholdexcept"])(a0);var _fegetenv=Module["_fegetenv"]=a0=>(_fegetenv=Module["_fegetenv"]=wasmExports["fegetenv"])(a0);var _feclearexcept=Module["_feclearexcept"]=a0=>(_feclearexcept=Module["_feclearexcept"]=wasmExports["feclearexcept"])(a0);var _feraiseexcept=Module["_feraiseexcept"]=a0=>(_feraiseexcept=Module["_feraiseexcept"]=wasmExports["feraiseexcept"])(a0);var ___fesetround=Module["___fesetround"]=a0=>(___fesetround=Module["___fesetround"]=wasmExports["__fesetround"])(a0);var _fesetenv=Module["_fesetenv"]=a0=>(_fesetenv=Module["_fesetenv"]=wasmExports["fesetenv"])(a0);var _feof_unlocked=Module["_feof_unlocked"]=a0=>(_feof_unlocked=Module["_feof_unlocked"]=wasmExports["feof_unlocked"])(a0);var __IO_feof_unlocked=Module["__IO_feof_unlocked"]=a0=>(__IO_feof_unlocked=Module["__IO_feof_unlocked"]=wasmExports["_IO_feof_unlocked"])(a0);var _ferror_unlocked=Module["_ferror_unlocked"]=a0=>(_ferror_unlocked=Module["_ferror_unlocked"]=wasmExports["ferror_unlocked"])(a0);var __IO_ferror_unlocked=Module["__IO_ferror_unlocked"]=a0=>(__IO_ferror_unlocked=Module["__IO_ferror_unlocked"]=wasmExports["_IO_ferror_unlocked"])(a0);var _fesetexceptflag=Module["_fesetexceptflag"]=(a0,a1)=>(_fesetexceptflag=Module["_fesetexceptflag"]=wasmExports["fesetexceptflag"])(a0,a1);var _fesetround=Module["_fesetround"]=a0=>(_fesetround=Module["_fesetround"]=wasmExports["fesetround"])(a0);var _feupdateenv=Module["_feupdateenv"]=a0=>(_feupdateenv=Module["_feupdateenv"]=wasmExports["feupdateenv"])(a0);var _fflush_unlocked=Module["_fflush_unlocked"]=a0=>(_fflush_unlocked=Module["_fflush_unlocked"]=wasmExports["fflush_unlocked"])(a0);var _ffs=Module["_ffs"]=a0=>(_ffs=Module["_ffs"]=wasmExports["ffs"])(a0);var _ffsl=Module["_ffsl"]=a0=>(_ffsl=Module["_ffsl"]=wasmExports["ffsl"])(a0);var _ffsll=Module["_ffsll"]=a0=>(_ffsll=Module["_ffsll"]=wasmExports["ffsll"])(a0);var _emscripten_futex_wake=Module["_emscripten_futex_wake"]=(a0,a1)=>(_emscripten_futex_wake=Module["_emscripten_futex_wake"]=wasmExports["emscripten_futex_wake"])(a0,a1);var _fgetln=Module["_fgetln"]=(a0,a1)=>(_fgetln=Module["_fgetln"]=wasmExports["fgetln"])(a0,a1);var _getline=Module["_getline"]=(a0,a1,a2)=>(_getline=Module["_getline"]=wasmExports["getline"])(a0,a1,a2);var _fgetpos=Module["_fgetpos"]=(a0,a1)=>(_fgetpos=Module["_fgetpos"]=wasmExports["fgetpos"])(a0,a1);var _fgets_unlocked=Module["_fgets_unlocked"]=(a0,a1,a2)=>(_fgets_unlocked=Module["_fgets_unlocked"]=wasmExports["fgets_unlocked"])(a0,a1,a2);var ___fgetwc_unlocked=Module["___fgetwc_unlocked"]=a0=>(___fgetwc_unlocked=Module["___fgetwc_unlocked"]=wasmExports["__fgetwc_unlocked"])(a0);var _fwide=Module["_fwide"]=(a0,a1)=>(_fwide=Module["_fwide"]=wasmExports["fwide"])(a0,a1);var _mbtowc=Module["_mbtowc"]=(a0,a1,a2)=>(_mbtowc=Module["_mbtowc"]=wasmExports["mbtowc"])(a0,a1,a2);var _fgetwc=Module["_fgetwc"]=a0=>(_fgetwc=Module["_fgetwc"]=wasmExports["fgetwc"])(a0);var _fgetwc_unlocked=Module["_fgetwc_unlocked"]=a0=>(_fgetwc_unlocked=Module["_fgetwc_unlocked"]=wasmExports["fgetwc_unlocked"])(a0);var _getwc_unlocked=Module["_getwc_unlocked"]=a0=>(_getwc_unlocked=Module["_getwc_unlocked"]=wasmExports["getwc_unlocked"])(a0);var _fgetws=Module["_fgetws"]=(a0,a1,a2)=>(_fgetws=Module["_fgetws"]=wasmExports["fgetws"])(a0,a1,a2);var _fgetws_unlocked=Module["_fgetws_unlocked"]=(a0,a1,a2)=>(_fgetws_unlocked=Module["_fgetws_unlocked"]=wasmExports["fgetws_unlocked"])(a0,a1,a2);var _fileno_unlocked=Module["_fileno_unlocked"]=a0=>(_fileno_unlocked=Module["_fileno_unlocked"]=wasmExports["fileno_unlocked"])(a0);var _finite=Module["_finite"]=a0=>(_finite=Module["_finite"]=wasmExports["finite"])(a0);var _finitef=Module["_finitef"]=a0=>(_finitef=Module["_finitef"]=wasmExports["finitef"])(a0);var ___floatunsitf=Module["___floatunsitf"]=(a0,a1)=>(___floatunsitf=Module["___floatunsitf"]=wasmExports["__floatunsitf"])(a0,a1);var _fmodl=Module["_fmodl"]=(a0,a1,a2,a3,a4)=>(_fmodl=Module["_fmodl"]=wasmExports["fmodl"])(a0,a1,a2,a3,a4);var _ftrylockfile=Module["_ftrylockfile"]=a0=>(_ftrylockfile=Module["_ftrylockfile"]=wasmExports["ftrylockfile"])(a0);var _floorf=Module["_floorf"]=a0=>(_floorf=Module["_floorf"]=wasmExports["floorf"])(a0);var _floorl=Module["_floorl"]=(a0,a1,a2)=>(_floorl=Module["_floorl"]=wasmExports["floorl"])(a0,a1,a2);var _fmaf=Module["_fmaf"]=(a0,a1,a2)=>(_fmaf=Module["_fmaf"]=wasmExports["fmaf"])(a0,a1,a2);var _fmal=Module["_fmal"]=(a0,a1,a2,a3,a4,a5,a6)=>(_fmal=Module["_fmal"]=wasmExports["fmal"])(a0,a1,a2,a3,a4,a5,a6);var _frexpl=Module["_frexpl"]=(a0,a1,a2,a3)=>(_frexpl=Module["_frexpl"]=wasmExports["frexpl"])(a0,a1,a2,a3);var _nextafterl=Module["_nextafterl"]=(a0,a1,a2,a3,a4)=>(_nextafterl=Module["_nextafterl"]=wasmExports["nextafterl"])(a0,a1,a2,a3,a4);var _ilogbl=Module["_ilogbl"]=(a0,a1)=>(_ilogbl=Module["_ilogbl"]=wasmExports["ilogbl"])(a0,a1);var _fmax=Module["_fmax"]=(a0,a1)=>(_fmax=Module["_fmax"]=wasmExports["fmax"])(a0,a1);var _fmaxf=Module["_fmaxf"]=(a0,a1)=>(_fmaxf=Module["_fmaxf"]=wasmExports["fmaxf"])(a0,a1);var _fmaxl=Module["_fmaxl"]=(a0,a1,a2,a3,a4)=>(_fmaxl=Module["_fmaxl"]=wasmExports["fmaxl"])(a0,a1,a2,a3,a4);var _fmemopen=Module["_fmemopen"]=(a0,a1,a2)=>(_fmemopen=Module["_fmemopen"]=wasmExports["fmemopen"])(a0,a1,a2);var _fmin=Module["_fmin"]=(a0,a1)=>(_fmin=Module["_fmin"]=wasmExports["fmin"])(a0,a1);var _fminf=Module["_fminf"]=(a0,a1)=>(_fminf=Module["_fminf"]=wasmExports["fminf"])(a0,a1);var _fminl=Module["_fminl"]=(a0,a1,a2,a3,a4)=>(_fminl=Module["_fminl"]=wasmExports["fminl"])(a0,a1,a2,a3,a4);var _fmodf=Module["_fmodf"]=(a0,a1)=>(_fmodf=Module["_fmodf"]=wasmExports["fmodf"])(a0,a1);var _fmtmsg=Module["_fmtmsg"]=(a0,a1,a2,a3,a4,a5)=>(_fmtmsg=Module["_fmtmsg"]=wasmExports["fmtmsg"])(a0,a1,a2,a3,a4,a5);var _fnmatch=Module["_fnmatch"]=(a0,a1,a2)=>(_fnmatch=Module["_fnmatch"]=wasmExports["fnmatch"])(a0,a1,a2);var _towupper=Module["_towupper"]=a0=>(_towupper=Module["_towupper"]=wasmExports["towupper"])(a0);var _towlower=Module["_towlower"]=a0=>(_towlower=Module["_towlower"]=wasmExports["towlower"])(a0);var _wctype=Module["_wctype"]=a0=>(_wctype=Module["_wctype"]=wasmExports["wctype"])(a0);var _iswctype=Module["_iswctype"]=(a0,a1)=>(_iswctype=Module["_iswctype"]=wasmExports["iswctype"])(a0,a1);var _fopencookie=Module["_fopencookie"]=(a0,a1,a2)=>(_fopencookie=Module["_fopencookie"]=wasmExports["fopencookie"])(a0,a1,a2);var _forkpty=Module["_forkpty"]=(a0,a1,a2,a3)=>(_forkpty=Module["_forkpty"]=wasmExports["forkpty"])(a0,a1,a2,a3);var _openpty=Module["_openpty"]=(a0,a1,a2,a3,a4)=>(_openpty=Module["_openpty"]=wasmExports["openpty"])(a0,a1,a2,a3,a4);var _pipe2=Module["_pipe2"]=(a0,a1)=>(_pipe2=Module["_pipe2"]=wasmExports["pipe2"])(a0,a1);var _vfiprintf=Module["_vfiprintf"]=(a0,a1,a2)=>(_vfiprintf=Module["_vfiprintf"]=wasmExports["vfiprintf"])(a0,a1,a2);var ___small_vfprintf=Module["___small_vfprintf"]=(a0,a1,a2)=>(___small_vfprintf=Module["___small_vfprintf"]=wasmExports["__small_vfprintf"])(a0,a1,a2);var _fputs_unlocked=Module["_fputs_unlocked"]=(a0,a1)=>(_fputs_unlocked=Module["_fputs_unlocked"]=wasmExports["fputs_unlocked"])(a0,a1);var ___fputwc_unlocked=Module["___fputwc_unlocked"]=(a0,a1)=>(___fputwc_unlocked=Module["___fputwc_unlocked"]=wasmExports["__fputwc_unlocked"])(a0,a1);var _wctomb=Module["_wctomb"]=(a0,a1)=>(_wctomb=Module["_wctomb"]=wasmExports["wctomb"])(a0,a1);var _fputwc=Module["_fputwc"]=(a0,a1)=>(_fputwc=Module["_fputwc"]=wasmExports["fputwc"])(a0,a1);var _fputwc_unlocked=Module["_fputwc_unlocked"]=(a0,a1)=>(_fputwc_unlocked=Module["_fputwc_unlocked"]=wasmExports["fputwc_unlocked"])(a0,a1);var _putwc_unlocked=Module["_putwc_unlocked"]=(a0,a1)=>(_putwc_unlocked=Module["_putwc_unlocked"]=wasmExports["putwc_unlocked"])(a0,a1);var _fputws=Module["_fputws"]=(a0,a1)=>(_fputws=Module["_fputws"]=wasmExports["fputws"])(a0,a1);var _wcsrtombs=Module["_wcsrtombs"]=(a0,a1,a2,a3)=>(_wcsrtombs=Module["_wcsrtombs"]=wasmExports["wcsrtombs"])(a0,a1,a2,a3);var _fputws_unlocked=Module["_fputws_unlocked"]=(a0,a1)=>(_fputws_unlocked=Module["_fputws_unlocked"]=wasmExports["fputws_unlocked"])(a0,a1);var _fread_unlocked=Module["_fread_unlocked"]=(a0,a1,a2,a3)=>(_fread_unlocked=Module["_fread_unlocked"]=wasmExports["fread_unlocked"])(a0,a1,a2,a3);var _freelocale=Module["_freelocale"]=a0=>(_freelocale=Module["_freelocale"]=wasmExports["freelocale"])(a0);var ___freelocale=Module["___freelocale"]=a0=>(___freelocale=Module["___freelocale"]=wasmExports["__freelocale"])(a0);var _freopen=Module["_freopen"]=(a0,a1,a2)=>(_freopen=Module["_freopen"]=wasmExports["freopen"])(a0,a1,a2);var _frexpf=Module["_frexpf"]=(a0,a1)=>(_frexpf=Module["_frexpf"]=wasmExports["frexpf"])(a0,a1);var _fscanf=Module["_fscanf"]=(a0,a1,a2)=>(_fscanf=Module["_fscanf"]=wasmExports["fscanf"])(a0,a1,a2);var _vfscanf=Module["_vfscanf"]=(a0,a1,a2)=>(_vfscanf=Module["_vfscanf"]=wasmExports["vfscanf"])(a0,a1,a2);var ___isoc99_fscanf=Module["___isoc99_fscanf"]=(a0,a1,a2)=>(___isoc99_fscanf=Module["___isoc99_fscanf"]=wasmExports["__isoc99_fscanf"])(a0,a1,a2);var _fseek=Module["_fseek"]=(a0,a1,a2)=>(_fseek=Module["_fseek"]=wasmExports["fseek"])(a0,a1,a2);var _fseeko=Module["_fseeko"]=(a0,a1,a2)=>(_fseeko=Module["_fseeko"]=wasmExports["fseeko"])(a0,a1,a2);var _fsetpos=Module["_fsetpos"]=(a0,a1)=>(_fsetpos=Module["_fsetpos"]=wasmExports["fsetpos"])(a0,a1);var _ftello=Module["_ftello"]=a0=>(_ftello=Module["_ftello"]=wasmExports["ftello"])(a0);var _ftime=Module["_ftime"]=a0=>(_ftime=Module["_ftime"]=wasmExports["ftime"])(a0);var _utimensat=Module["_utimensat"]=(a0,a1,a2,a3)=>(_utimensat=Module["_utimensat"]=wasmExports["utimensat"])(a0,a1,a2,a3);var _fwprintf=Module["_fwprintf"]=(a0,a1,a2)=>(_fwprintf=Module["_fwprintf"]=wasmExports["fwprintf"])(a0,a1,a2);var _vfwprintf=Module["_vfwprintf"]=(a0,a1,a2)=>(_vfwprintf=Module["_vfwprintf"]=wasmExports["vfwprintf"])(a0,a1,a2);var _fwrite_unlocked=Module["_fwrite_unlocked"]=(a0,a1,a2,a3)=>(_fwrite_unlocked=Module["_fwrite_unlocked"]=wasmExports["fwrite_unlocked"])(a0,a1,a2,a3);var _fwscanf=Module["_fwscanf"]=(a0,a1,a2)=>(_fwscanf=Module["_fwscanf"]=wasmExports["fwscanf"])(a0,a1,a2);var _vfwscanf=Module["_vfwscanf"]=(a0,a1,a2)=>(_vfwscanf=Module["_vfwscanf"]=wasmExports["vfwscanf"])(a0,a1,a2);var ___isoc99_fwscanf=Module["___isoc99_fwscanf"]=(a0,a1,a2)=>(___isoc99_fwscanf=Module["___isoc99_fwscanf"]=wasmExports["__isoc99_fwscanf"])(a0,a1,a2);var _gcvt=Module["_gcvt"]=(a0,a1,a2)=>(_gcvt=Module["_gcvt"]=wasmExports["gcvt"])(a0,a1,a2);var _get_current_dir_name=Module["_get_current_dir_name"]=()=>(_get_current_dir_name=Module["_get_current_dir_name"]=wasmExports["get_current_dir_name"])();var _strdup=Module["_strdup"]=a0=>(_strdup=Module["_strdup"]=wasmExports["strdup"])(a0);var __IO_getc=Module["__IO_getc"]=a0=>(__IO_getc=Module["__IO_getc"]=wasmExports["_IO_getc"])(a0);var _fgetc_unlocked=Module["_fgetc_unlocked"]=a0=>(_fgetc_unlocked=Module["_fgetc_unlocked"]=wasmExports["fgetc_unlocked"])(a0);var __IO_getc_unlocked=Module["__IO_getc_unlocked"]=a0=>(__IO_getc_unlocked=Module["__IO_getc_unlocked"]=wasmExports["_IO_getc_unlocked"])(a0);var _getchar=Module["_getchar"]=()=>(_getchar=Module["_getchar"]=wasmExports["getchar"])();var _getchar_unlocked=Module["_getchar_unlocked"]=()=>(_getchar_unlocked=Module["_getchar_unlocked"]=wasmExports["getchar_unlocked"])();var _getdelim=Module["_getdelim"]=(a0,a1,a2,a3)=>(_getdelim=Module["_getdelim"]=wasmExports["getdelim"])(a0,a1,a2,a3);var ___getdelim=Module["___getdelim"]=(a0,a1,a2,a3)=>(___getdelim=Module["___getdelim"]=wasmExports["__getdelim"])(a0,a1,a2,a3);var _getdents=Module["_getdents"]=(a0,a1,a2)=>(_getdents=Module["_getdents"]=wasmExports["getdents"])(a0,a1,a2);var _getdomainname=Module["_getdomainname"]=(a0,a1)=>(_getdomainname=Module["_getdomainname"]=wasmExports["getdomainname"])(a0,a1);var _getegid=Module["_getegid"]=()=>(_getegid=Module["_getegid"]=wasmExports["getegid"])();var _geteuid=Module["_geteuid"]=()=>(_geteuid=Module["_geteuid"]=wasmExports["geteuid"])();var _getgroups=Module["_getgroups"]=(a0,a1)=>(_getgroups=Module["_getgroups"]=wasmExports["getgroups"])(a0,a1);var _gethostid=Module["_gethostid"]=()=>(_gethostid=Module["_gethostid"]=wasmExports["gethostid"])();var _freeifaddrs=Module["_freeifaddrs"]=a0=>(_freeifaddrs=Module["_freeifaddrs"]=wasmExports["freeifaddrs"])(a0);var _getifaddrs=Module["_getifaddrs"]=a0=>(_getifaddrs=Module["_getifaddrs"]=wasmExports["getifaddrs"])(a0);var ___getitimer=Module["___getitimer"]=(a0,a1,a2)=>(___getitimer=Module["___getitimer"]=wasmExports["__getitimer"])(a0,a1,a2);var _getlogin_r=Module["_getlogin_r"]=(a0,a1)=>(_getlogin_r=Module["_getlogin_r"]=wasmExports["getlogin_r"])(a0,a1);var _getopt=Module["_getopt"]=(a0,a1,a2)=>(_getopt=Module["_getopt"]=wasmExports["getopt"])(a0,a1,a2);var ___posix_getopt=Module["___posix_getopt"]=(a0,a1,a2)=>(___posix_getopt=Module["___posix_getopt"]=wasmExports["__posix_getopt"])(a0,a1,a2);var _getopt_long=Module["_getopt_long"]=(a0,a1,a2,a3,a4)=>(_getopt_long=Module["_getopt_long"]=wasmExports["getopt_long"])(a0,a1,a2,a3,a4);var _getopt_long_only=Module["_getopt_long_only"]=(a0,a1,a2,a3,a4)=>(_getopt_long_only=Module["_getopt_long_only"]=wasmExports["getopt_long_only"])(a0,a1,a2,a3,a4);var _mblen=Module["_mblen"]=(a0,a1)=>(_mblen=Module["_mblen"]=wasmExports["mblen"])(a0,a1);var _getpagesize=Module["_getpagesize"]=()=>(_getpagesize=Module["_getpagesize"]=wasmExports["getpagesize"])();var _getresgid=Module["_getresgid"]=(a0,a1,a2)=>(_getresgid=Module["_getresgid"]=wasmExports["getresgid"])(a0,a1,a2);var _getresuid=Module["_getresuid"]=(a0,a1,a2)=>(_getresuid=Module["_getresuid"]=wasmExports["getresuid"])(a0,a1,a2);var _getrusage=Module["_getrusage"]=(a0,a1)=>(_getrusage=Module["_getrusage"]=wasmExports["getrusage"])(a0,a1);var _gets=Module["_gets"]=a0=>(_gets=Module["_gets"]=wasmExports["gets"])(a0);var _getservbyname_r=Module["_getservbyname_r"]=(a0,a1,a2,a3,a4,a5)=>(_getservbyname_r=Module["_getservbyname_r"]=wasmExports["getservbyname_r"])(a0,a1,a2,a3,a4,a5);var _getservbyport_r=Module["_getservbyport_r"]=(a0,a1,a2,a3,a4,a5)=>(_getservbyport_r=Module["_getservbyport_r"]=wasmExports["getservbyport_r"])(a0,a1,a2,a3,a4,a5);var _getsubopt=Module["_getsubopt"]=(a0,a1,a2)=>(_getsubopt=Module["_getsubopt"]=wasmExports["getsubopt"])(a0,a1,a2);var _gettid=Module["_gettid"]=()=>(_gettid=Module["_gettid"]=wasmExports["gettid"])();var _getw=Module["_getw"]=a0=>(_getw=Module["_getw"]=wasmExports["getw"])(a0);var _getwc=Module["_getwc"]=a0=>(_getwc=Module["_getwc"]=wasmExports["getwc"])(a0);var _getwchar=Module["_getwchar"]=()=>(_getwchar=Module["_getwchar"]=wasmExports["getwchar"])();var _getwchar_unlocked=Module["_getwchar_unlocked"]=()=>(_getwchar_unlocked=Module["_getwchar_unlocked"]=wasmExports["getwchar_unlocked"])();var _glob=Module["_glob"]=(a0,a1,a2,a3)=>(_glob=Module["_glob"]=wasmExports["glob"])(a0,a1,a2,a3);var _globfree=Module["_globfree"]=a0=>(_globfree=Module["_globfree"]=wasmExports["globfree"])(a0);var _gmtime=Module["_gmtime"]=a0=>(_gmtime=Module["_gmtime"]=wasmExports["gmtime"])(a0);var _herror=Module["_herror"]=a0=>(_herror=Module["_herror"]=wasmExports["herror"])(a0);var _hcreate=Module["_hcreate"]=a0=>(_hcreate=Module["_hcreate"]=wasmExports["hcreate"])(a0);var _hdestroy=Module["_hdestroy"]=()=>(_hdestroy=Module["_hdestroy"]=wasmExports["hdestroy"])();var _hsearch=Module["_hsearch"]=(a0,a1)=>(_hsearch=Module["_hsearch"]=wasmExports["hsearch"])(a0,a1);var _hcreate_r=Module["_hcreate_r"]=(a0,a1)=>(_hcreate_r=Module["_hcreate_r"]=wasmExports["hcreate_r"])(a0,a1);var _hdestroy_r=Module["_hdestroy_r"]=a0=>(_hdestroy_r=Module["_hdestroy_r"]=wasmExports["hdestroy_r"])(a0);var _hsearch_r=Module["_hsearch_r"]=(a0,a1,a2,a3)=>(_hsearch_r=Module["_hsearch_r"]=wasmExports["hsearch_r"])(a0,a1,a2,a3);var _iconv_open=Module["_iconv_open"]=(a0,a1)=>(_iconv_open=Module["_iconv_open"]=wasmExports["iconv_open"])(a0,a1);var _iconv=Module["_iconv"]=(a0,a1,a2,a3,a4)=>(_iconv=Module["_iconv"]=wasmExports["iconv"])(a0,a1,a2,a3,a4);var _iconv_close=Module["_iconv_close"]=a0=>(_iconv_close=Module["_iconv_close"]=wasmExports["iconv_close"])(a0);var _ioctl=Module["_ioctl"]=(a0,a1,a2)=>(_ioctl=Module["_ioctl"]=wasmExports["ioctl"])(a0,a1,a2);var _ilogb=Module["_ilogb"]=a0=>(_ilogb=Module["_ilogb"]=wasmExports["ilogb"])(a0);var _ilogbf=Module["_ilogbf"]=a0=>(_ilogbf=Module["_ilogbf"]=wasmExports["ilogbf"])(a0);var _imaxabs=Module["_imaxabs"]=a0=>(_imaxabs=Module["_imaxabs"]=wasmExports["imaxabs"])(a0);var _imaxdiv=Module["_imaxdiv"]=(a0,a1,a2)=>(_imaxdiv=Module["_imaxdiv"]=wasmExports["imaxdiv"])(a0,a1,a2);var _index=Module["_index"]=(a0,a1)=>(_index=Module["_index"]=wasmExports["index"])(a0,a1);var _inet_addr=Module["_inet_addr"]=a0=>(_inet_addr=Module["_inet_addr"]=wasmExports["inet_addr"])(a0);var _inet_network=Module["_inet_network"]=a0=>(_inet_network=Module["_inet_network"]=wasmExports["inet_network"])(a0);var _inet_makeaddr=Module["_inet_makeaddr"]=(a0,a1)=>(_inet_makeaddr=Module["_inet_makeaddr"]=wasmExports["inet_makeaddr"])(a0,a1);var _inet_lnaof=Module["_inet_lnaof"]=a0=>(_inet_lnaof=Module["_inet_lnaof"]=wasmExports["inet_lnaof"])(a0);var _inet_netof=Module["_inet_netof"]=a0=>(_inet_netof=Module["_inet_netof"]=wasmExports["inet_netof"])(a0);var _insque=Module["_insque"]=(a0,a1)=>(_insque=Module["_insque"]=wasmExports["insque"])(a0,a1);var _remque=Module["_remque"]=a0=>(_remque=Module["_remque"]=wasmExports["remque"])(a0);var ___intscan=Module["___intscan"]=(a0,a1,a2,a3)=>(___intscan=Module["___intscan"]=wasmExports["__intscan"])(a0,a1,a2,a3);var ___multi3=Module["___multi3"]=(a0,a1,a2,a3,a4)=>(___multi3=Module["___multi3"]=wasmExports["__multi3"])(a0,a1,a2,a3,a4);var ___isalnum_l=Module["___isalnum_l"]=(a0,a1)=>(___isalnum_l=Module["___isalnum_l"]=wasmExports["__isalnum_l"])(a0,a1);var _isalnum_l=Module["_isalnum_l"]=(a0,a1)=>(_isalnum_l=Module["_isalnum_l"]=wasmExports["isalnum_l"])(a0,a1);var _isalpha=Module["_isalpha"]=a0=>(_isalpha=Module["_isalpha"]=wasmExports["isalpha"])(a0);var ___isalpha_l=Module["___isalpha_l"]=(a0,a1)=>(___isalpha_l=Module["___isalpha_l"]=wasmExports["__isalpha_l"])(a0,a1);var _isalpha_l=Module["_isalpha_l"]=(a0,a1)=>(_isalpha_l=Module["_isalpha_l"]=wasmExports["isalpha_l"])(a0,a1);var _isascii=Module["_isascii"]=a0=>(_isascii=Module["_isascii"]=wasmExports["isascii"])(a0);var _isblank=Module["_isblank"]=a0=>(_isblank=Module["_isblank"]=wasmExports["isblank"])(a0);var ___isblank_l=Module["___isblank_l"]=(a0,a1)=>(___isblank_l=Module["___isblank_l"]=wasmExports["__isblank_l"])(a0,a1);var _isblank_l=Module["_isblank_l"]=(a0,a1)=>(_isblank_l=Module["_isblank_l"]=wasmExports["isblank_l"])(a0,a1);var _iscntrl=Module["_iscntrl"]=a0=>(_iscntrl=Module["_iscntrl"]=wasmExports["iscntrl"])(a0);var ___iscntrl_l=Module["___iscntrl_l"]=(a0,a1)=>(___iscntrl_l=Module["___iscntrl_l"]=wasmExports["__iscntrl_l"])(a0,a1);var _iscntrl_l=Module["_iscntrl_l"]=(a0,a1)=>(_iscntrl_l=Module["_iscntrl_l"]=wasmExports["iscntrl_l"])(a0,a1);var _isdigit=Module["_isdigit"]=a0=>(_isdigit=Module["_isdigit"]=wasmExports["isdigit"])(a0);var ___isdigit_l=Module["___isdigit_l"]=(a0,a1)=>(___isdigit_l=Module["___isdigit_l"]=wasmExports["__isdigit_l"])(a0,a1);var _isdigit_l=Module["_isdigit_l"]=(a0,a1)=>(_isdigit_l=Module["_isdigit_l"]=wasmExports["isdigit_l"])(a0,a1);var _isgraph=Module["_isgraph"]=a0=>(_isgraph=Module["_isgraph"]=wasmExports["isgraph"])(a0);var ___isgraph_l=Module["___isgraph_l"]=(a0,a1)=>(___isgraph_l=Module["___isgraph_l"]=wasmExports["__isgraph_l"])(a0,a1);var _isgraph_l=Module["_isgraph_l"]=(a0,a1)=>(_isgraph_l=Module["_isgraph_l"]=wasmExports["isgraph_l"])(a0,a1);var _islower=Module["_islower"]=a0=>(_islower=Module["_islower"]=wasmExports["islower"])(a0);var ___islower_l=Module["___islower_l"]=(a0,a1)=>(___islower_l=Module["___islower_l"]=wasmExports["__islower_l"])(a0,a1);var _islower_l=Module["_islower_l"]=(a0,a1)=>(_islower_l=Module["_islower_l"]=wasmExports["islower_l"])(a0,a1);var _isprint=Module["_isprint"]=a0=>(_isprint=Module["_isprint"]=wasmExports["isprint"])(a0);var ___isprint_l=Module["___isprint_l"]=(a0,a1)=>(___isprint_l=Module["___isprint_l"]=wasmExports["__isprint_l"])(a0,a1);var _isprint_l=Module["_isprint_l"]=(a0,a1)=>(_isprint_l=Module["_isprint_l"]=wasmExports["isprint_l"])(a0,a1);var _ispunct=Module["_ispunct"]=a0=>(_ispunct=Module["_ispunct"]=wasmExports["ispunct"])(a0);var ___ispunct_l=Module["___ispunct_l"]=(a0,a1)=>(___ispunct_l=Module["___ispunct_l"]=wasmExports["__ispunct_l"])(a0,a1);var _ispunct_l=Module["_ispunct_l"]=(a0,a1)=>(_ispunct_l=Module["_ispunct_l"]=wasmExports["ispunct_l"])(a0,a1);var _issetugid=Module["_issetugid"]=()=>(_issetugid=Module["_issetugid"]=wasmExports["issetugid"])();var _isspace=Module["_isspace"]=a0=>(_isspace=Module["_isspace"]=wasmExports["isspace"])(a0);var ___isspace_l=Module["___isspace_l"]=(a0,a1)=>(___isspace_l=Module["___isspace_l"]=wasmExports["__isspace_l"])(a0,a1);var _isspace_l=Module["_isspace_l"]=(a0,a1)=>(_isspace_l=Module["_isspace_l"]=wasmExports["isspace_l"])(a0,a1);var _isupper=Module["_isupper"]=a0=>(_isupper=Module["_isupper"]=wasmExports["isupper"])(a0);var ___isupper_l=Module["___isupper_l"]=(a0,a1)=>(___isupper_l=Module["___isupper_l"]=wasmExports["__isupper_l"])(a0,a1);var _isupper_l=Module["_isupper_l"]=(a0,a1)=>(_isupper_l=Module["_isupper_l"]=wasmExports["isupper_l"])(a0,a1);var _iswalnum=Module["_iswalnum"]=a0=>(_iswalnum=Module["_iswalnum"]=wasmExports["iswalnum"])(a0);var _iswalpha=Module["_iswalpha"]=a0=>(_iswalpha=Module["_iswalpha"]=wasmExports["iswalpha"])(a0);var ___iswalnum_l=Module["___iswalnum_l"]=(a0,a1)=>(___iswalnum_l=Module["___iswalnum_l"]=wasmExports["__iswalnum_l"])(a0,a1);var _iswalnum_l=Module["_iswalnum_l"]=(a0,a1)=>(_iswalnum_l=Module["_iswalnum_l"]=wasmExports["iswalnum_l"])(a0,a1);var ___iswalpha_l=Module["___iswalpha_l"]=(a0,a1)=>(___iswalpha_l=Module["___iswalpha_l"]=wasmExports["__iswalpha_l"])(a0,a1);var _iswalpha_l=Module["_iswalpha_l"]=(a0,a1)=>(_iswalpha_l=Module["_iswalpha_l"]=wasmExports["iswalpha_l"])(a0,a1);var _iswblank=Module["_iswblank"]=a0=>(_iswblank=Module["_iswblank"]=wasmExports["iswblank"])(a0);var ___iswblank_l=Module["___iswblank_l"]=(a0,a1)=>(___iswblank_l=Module["___iswblank_l"]=wasmExports["__iswblank_l"])(a0,a1);var _iswblank_l=Module["_iswblank_l"]=(a0,a1)=>(_iswblank_l=Module["_iswblank_l"]=wasmExports["iswblank_l"])(a0,a1);var _iswcntrl=Module["_iswcntrl"]=a0=>(_iswcntrl=Module["_iswcntrl"]=wasmExports["iswcntrl"])(a0);var ___iswcntrl_l=Module["___iswcntrl_l"]=(a0,a1)=>(___iswcntrl_l=Module["___iswcntrl_l"]=wasmExports["__iswcntrl_l"])(a0,a1);var _iswcntrl_l=Module["_iswcntrl_l"]=(a0,a1)=>(_iswcntrl_l=Module["_iswcntrl_l"]=wasmExports["iswcntrl_l"])(a0,a1);var _iswgraph=Module["_iswgraph"]=a0=>(_iswgraph=Module["_iswgraph"]=wasmExports["iswgraph"])(a0);var _iswlower=Module["_iswlower"]=a0=>(_iswlower=Module["_iswlower"]=wasmExports["iswlower"])(a0);var _iswprint=Module["_iswprint"]=a0=>(_iswprint=Module["_iswprint"]=wasmExports["iswprint"])(a0);var _iswpunct=Module["_iswpunct"]=a0=>(_iswpunct=Module["_iswpunct"]=wasmExports["iswpunct"])(a0);var _iswspace=Module["_iswspace"]=a0=>(_iswspace=Module["_iswspace"]=wasmExports["iswspace"])(a0);var _iswupper=Module["_iswupper"]=a0=>(_iswupper=Module["_iswupper"]=wasmExports["iswupper"])(a0);var _iswxdigit=Module["_iswxdigit"]=a0=>(_iswxdigit=Module["_iswxdigit"]=wasmExports["iswxdigit"])(a0);var ___iswctype_l=Module["___iswctype_l"]=(a0,a1,a2)=>(___iswctype_l=Module["___iswctype_l"]=wasmExports["__iswctype_l"])(a0,a1,a2);var ___wctype_l=Module["___wctype_l"]=(a0,a1)=>(___wctype_l=Module["___wctype_l"]=wasmExports["__wctype_l"])(a0,a1);var _iswctype_l=Module["_iswctype_l"]=(a0,a1,a2)=>(_iswctype_l=Module["_iswctype_l"]=wasmExports["iswctype_l"])(a0,a1,a2);var _wctype_l=Module["_wctype_l"]=(a0,a1)=>(_wctype_l=Module["_wctype_l"]=wasmExports["wctype_l"])(a0,a1);var _iswdigit=Module["_iswdigit"]=a0=>(_iswdigit=Module["_iswdigit"]=wasmExports["iswdigit"])(a0);var ___iswdigit_l=Module["___iswdigit_l"]=(a0,a1)=>(___iswdigit_l=Module["___iswdigit_l"]=wasmExports["__iswdigit_l"])(a0,a1);var _iswdigit_l=Module["_iswdigit_l"]=(a0,a1)=>(_iswdigit_l=Module["_iswdigit_l"]=wasmExports["iswdigit_l"])(a0,a1);var ___iswgraph_l=Module["___iswgraph_l"]=(a0,a1)=>(___iswgraph_l=Module["___iswgraph_l"]=wasmExports["__iswgraph_l"])(a0,a1);var _iswgraph_l=Module["_iswgraph_l"]=(a0,a1)=>(_iswgraph_l=Module["_iswgraph_l"]=wasmExports["iswgraph_l"])(a0,a1);var ___iswlower_l=Module["___iswlower_l"]=(a0,a1)=>(___iswlower_l=Module["___iswlower_l"]=wasmExports["__iswlower_l"])(a0,a1);var _iswlower_l=Module["_iswlower_l"]=(a0,a1)=>(_iswlower_l=Module["_iswlower_l"]=wasmExports["iswlower_l"])(a0,a1);var ___iswprint_l=Module["___iswprint_l"]=(a0,a1)=>(___iswprint_l=Module["___iswprint_l"]=wasmExports["__iswprint_l"])(a0,a1);var _iswprint_l=Module["_iswprint_l"]=(a0,a1)=>(_iswprint_l=Module["_iswprint_l"]=wasmExports["iswprint_l"])(a0,a1);var ___iswpunct_l=Module["___iswpunct_l"]=(a0,a1)=>(___iswpunct_l=Module["___iswpunct_l"]=wasmExports["__iswpunct_l"])(a0,a1);var _iswpunct_l=Module["_iswpunct_l"]=(a0,a1)=>(_iswpunct_l=Module["_iswpunct_l"]=wasmExports["iswpunct_l"])(a0,a1);var ___iswspace_l=Module["___iswspace_l"]=(a0,a1)=>(___iswspace_l=Module["___iswspace_l"]=wasmExports["__iswspace_l"])(a0,a1);var _iswspace_l=Module["_iswspace_l"]=(a0,a1)=>(_iswspace_l=Module["_iswspace_l"]=wasmExports["iswspace_l"])(a0,a1);var ___iswupper_l=Module["___iswupper_l"]=(a0,a1)=>(___iswupper_l=Module["___iswupper_l"]=wasmExports["__iswupper_l"])(a0,a1);var _iswupper_l=Module["_iswupper_l"]=(a0,a1)=>(_iswupper_l=Module["_iswupper_l"]=wasmExports["iswupper_l"])(a0,a1);var ___iswxdigit_l=Module["___iswxdigit_l"]=(a0,a1)=>(___iswxdigit_l=Module["___iswxdigit_l"]=wasmExports["__iswxdigit_l"])(a0,a1);var _iswxdigit_l=Module["_iswxdigit_l"]=(a0,a1)=>(_iswxdigit_l=Module["_iswxdigit_l"]=wasmExports["iswxdigit_l"])(a0,a1);var ___isxdigit_l=Module["___isxdigit_l"]=(a0,a1)=>(___isxdigit_l=Module["___isxdigit_l"]=wasmExports["__isxdigit_l"])(a0,a1);var _isxdigit_l=Module["_isxdigit_l"]=(a0,a1)=>(_isxdigit_l=Module["_isxdigit_l"]=wasmExports["isxdigit_l"])(a0,a1);var _j0=Module["_j0"]=a0=>(_j0=Module["_j0"]=wasmExports["j0"])(a0);var _y0=Module["_y0"]=a0=>(_y0=Module["_y0"]=wasmExports["y0"])(a0);var _j0f=Module["_j0f"]=a0=>(_j0f=Module["_j0f"]=wasmExports["j0f"])(a0);var _y0f=Module["_y0f"]=a0=>(_y0f=Module["_y0f"]=wasmExports["y0f"])(a0);var _j1=Module["_j1"]=a0=>(_j1=Module["_j1"]=wasmExports["j1"])(a0);var _y1=Module["_y1"]=a0=>(_y1=Module["_y1"]=wasmExports["y1"])(a0);var _j1f=Module["_j1f"]=a0=>(_j1f=Module["_j1f"]=wasmExports["j1f"])(a0);var _y1f=Module["_y1f"]=a0=>(_y1f=Module["_y1f"]=wasmExports["y1f"])(a0);var _jn=Module["_jn"]=(a0,a1)=>(_jn=Module["_jn"]=wasmExports["jn"])(a0,a1);var _yn=Module["_yn"]=(a0,a1)=>(_yn=Module["_yn"]=wasmExports["yn"])(a0,a1);var _jnf=Module["_jnf"]=(a0,a1)=>(_jnf=Module["_jnf"]=wasmExports["jnf"])(a0,a1);var _ynf=Module["_ynf"]=(a0,a1)=>(_ynf=Module["_ynf"]=wasmExports["ynf"])(a0,a1);var _labs=Module["_labs"]=a0=>(_labs=Module["_labs"]=wasmExports["labs"])(a0);var ___nl_langinfo=Module["___nl_langinfo"]=a0=>(___nl_langinfo=Module["___nl_langinfo"]=wasmExports["__nl_langinfo"])(a0);var _nl_langinfo_l=Module["_nl_langinfo_l"]=(a0,a1)=>(_nl_langinfo_l=Module["_nl_langinfo_l"]=wasmExports["nl_langinfo_l"])(a0,a1);var _lchmod=Module["_lchmod"]=(a0,a1)=>(_lchmod=Module["_lchmod"]=wasmExports["lchmod"])(a0,a1);var _lchown=Module["_lchown"]=(a0,a1,a2)=>(_lchown=Module["_lchown"]=wasmExports["lchown"])(a0,a1,a2);var _lcong48=Module["_lcong48"]=a0=>(_lcong48=Module["_lcong48"]=wasmExports["lcong48"])(a0);var _ldexpf=Module["_ldexpf"]=(a0,a1)=>(_ldexpf=Module["_ldexpf"]=wasmExports["ldexpf"])(a0,a1);var _scalbnf=Module["_scalbnf"]=(a0,a1)=>(_scalbnf=Module["_scalbnf"]=wasmExports["scalbnf"])(a0,a1);var _ldexpl=Module["_ldexpl"]=(a0,a1,a2,a3)=>(_ldexpl=Module["_ldexpl"]=wasmExports["ldexpl"])(a0,a1,a2,a3);var _ldiv=Module["_ldiv"]=(a0,a1,a2)=>(_ldiv=Module["_ldiv"]=wasmExports["ldiv"])(a0,a1,a2);var _get_nprocs_conf=Module["_get_nprocs_conf"]=()=>(_get_nprocs_conf=Module["_get_nprocs_conf"]=wasmExports["get_nprocs_conf"])();var _get_nprocs=Module["_get_nprocs"]=()=>(_get_nprocs=Module["_get_nprocs"]=wasmExports["get_nprocs"])();var _get_phys_pages=Module["_get_phys_pages"]=()=>(_get_phys_pages=Module["_get_phys_pages"]=wasmExports["get_phys_pages"])();var _get_avphys_pages=Module["_get_avphys_pages"]=()=>(_get_avphys_pages=Module["_get_avphys_pages"]=wasmExports["get_avphys_pages"])();var _lgamma=Module["_lgamma"]=a0=>(_lgamma=Module["_lgamma"]=wasmExports["lgamma"])(a0);var _lgamma_r=Module["_lgamma_r"]=(a0,a1)=>(_lgamma_r=Module["_lgamma_r"]=wasmExports["lgamma_r"])(a0,a1);var _lgammaf=Module["_lgammaf"]=a0=>(_lgammaf=Module["_lgammaf"]=wasmExports["lgammaf"])(a0);var _lgammaf_r=Module["_lgammaf_r"]=(a0,a1)=>(_lgammaf_r=Module["_lgammaf_r"]=wasmExports["lgammaf_r"])(a0,a1);var ___lgammal_r=Module["___lgammal_r"]=(a0,a1,a2,a3)=>(___lgammal_r=Module["___lgammal_r"]=wasmExports["__lgammal_r"])(a0,a1,a2,a3);var _lgammal=Module["_lgammal"]=(a0,a1,a2)=>(_lgammal=Module["_lgammal"]=wasmExports["lgammal"])(a0,a1,a2);var _lgammal_r=Module["_lgammal_r"]=(a0,a1,a2,a3)=>(_lgammal_r=Module["_lgammal_r"]=wasmExports["lgammal_r"])(a0,a1,a2,a3);var _emscripten_has_threading_support=Module["_emscripten_has_threading_support"]=()=>(_emscripten_has_threading_support=Module["_emscripten_has_threading_support"]=wasmExports["emscripten_has_threading_support"])();var _emscripten_num_logical_cores=Module["_emscripten_num_logical_cores"]=()=>(_emscripten_num_logical_cores=Module["_emscripten_num_logical_cores"]=wasmExports["emscripten_num_logical_cores"])();var _emscripten_force_num_logical_cores=Module["_emscripten_force_num_logical_cores"]=a0=>(_emscripten_force_num_logical_cores=Module["_emscripten_force_num_logical_cores"]=wasmExports["emscripten_force_num_logical_cores"])(a0);var _emscripten_futex_wait=Module["_emscripten_futex_wait"]=(a0,a1,a2)=>(_emscripten_futex_wait=Module["_emscripten_futex_wait"]=wasmExports["emscripten_futex_wait"])(a0,a1,a2);var _emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=()=>(_emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=wasmExports["emscripten_main_thread_process_queued_calls"])();var _emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=()=>(_emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=wasmExports["emscripten_current_thread_process_queued_calls"])();var __emscripten_yield=Module["__emscripten_yield"]=a0=>(__emscripten_yield=Module["__emscripten_yield"]=wasmExports["_emscripten_yield"])(a0);var __emscripten_check_timers=Module["__emscripten_check_timers"]=a0=>(__emscripten_check_timers=Module["__emscripten_check_timers"]=wasmExports["_emscripten_check_timers"])(a0);var _pthread_mutex_consistent=Module["_pthread_mutex_consistent"]=a0=>(_pthread_mutex_consistent=Module["_pthread_mutex_consistent"]=wasmExports["pthread_mutex_consistent"])(a0);var _pthread_barrier_init=Module["_pthread_barrier_init"]=(a0,a1,a2)=>(_pthread_barrier_init=Module["_pthread_barrier_init"]=wasmExports["pthread_barrier_init"])(a0,a1,a2);var _pthread_barrier_destroy=Module["_pthread_barrier_destroy"]=a0=>(_pthread_barrier_destroy=Module["_pthread_barrier_destroy"]=wasmExports["pthread_barrier_destroy"])(a0);var _pthread_barrier_wait=Module["_pthread_barrier_wait"]=a0=>(_pthread_barrier_wait=Module["_pthread_barrier_wait"]=wasmExports["pthread_barrier_wait"])(a0);var _pthread_cond_broadcast=Module["_pthread_cond_broadcast"]=a0=>(_pthread_cond_broadcast=Module["_pthread_cond_broadcast"]=wasmExports["pthread_cond_broadcast"])(a0);var _pthread_atfork=Module["_pthread_atfork"]=(a0,a1,a2)=>(_pthread_atfork=Module["_pthread_atfork"]=wasmExports["pthread_atfork"])(a0,a1,a2);var _pthread_cancel=Module["_pthread_cancel"]=a0=>(_pthread_cancel=Module["_pthread_cancel"]=wasmExports["pthread_cancel"])(a0);var _pthread_testcancel=Module["_pthread_testcancel"]=()=>(_pthread_testcancel=Module["_pthread_testcancel"]=wasmExports["pthread_testcancel"])();var ___pthread_detach=Module["___pthread_detach"]=a0=>(___pthread_detach=Module["___pthread_detach"]=wasmExports["__pthread_detach"])(a0);var _pthread_equal=Module["_pthread_equal"]=(a0,a1)=>(_pthread_equal=Module["_pthread_equal"]=wasmExports["pthread_equal"])(a0,a1);var _pthread_mutexattr_init=Module["_pthread_mutexattr_init"]=a0=>(_pthread_mutexattr_init=Module["_pthread_mutexattr_init"]=wasmExports["pthread_mutexattr_init"])(a0);var _pthread_mutexattr_setprotocol=Module["_pthread_mutexattr_setprotocol"]=(a0,a1)=>(_pthread_mutexattr_setprotocol=Module["_pthread_mutexattr_setprotocol"]=wasmExports["pthread_mutexattr_setprotocol"])(a0,a1);var _pthread_mutexattr_settype=Module["_pthread_mutexattr_settype"]=(a0,a1)=>(_pthread_mutexattr_settype=Module["_pthread_mutexattr_settype"]=wasmExports["pthread_mutexattr_settype"])(a0,a1);var _pthread_mutexattr_destroy=Module["_pthread_mutexattr_destroy"]=a0=>(_pthread_mutexattr_destroy=Module["_pthread_mutexattr_destroy"]=wasmExports["pthread_mutexattr_destroy"])(a0);var _pthread_mutexattr_setpshared=Module["_pthread_mutexattr_setpshared"]=(a0,a1)=>(_pthread_mutexattr_setpshared=Module["_pthread_mutexattr_setpshared"]=wasmExports["pthread_mutexattr_setpshared"])(a0,a1);var _pthread_condattr_destroy=Module["_pthread_condattr_destroy"]=a0=>(_pthread_condattr_destroy=Module["_pthread_condattr_destroy"]=wasmExports["pthread_condattr_destroy"])(a0);var _pthread_condattr_setpshared=Module["_pthread_condattr_setpshared"]=(a0,a1)=>(_pthread_condattr_setpshared=Module["_pthread_condattr_setpshared"]=wasmExports["pthread_condattr_setpshared"])(a0,a1);var _pthread_getattr_np=Module["_pthread_getattr_np"]=(a0,a1)=>(_pthread_getattr_np=Module["_pthread_getattr_np"]=wasmExports["pthread_getattr_np"])(a0,a1);var _pthread_setcanceltype=Module["_pthread_setcanceltype"]=(a0,a1)=>(_pthread_setcanceltype=Module["_pthread_setcanceltype"]=wasmExports["pthread_setcanceltype"])(a0,a1);var _pthread_rwlock_init=Module["_pthread_rwlock_init"]=(a0,a1)=>(_pthread_rwlock_init=Module["_pthread_rwlock_init"]=wasmExports["pthread_rwlock_init"])(a0,a1);var _pthread_rwlock_destroy=Module["_pthread_rwlock_destroy"]=a0=>(_pthread_rwlock_destroy=Module["_pthread_rwlock_destroy"]=wasmExports["pthread_rwlock_destroy"])(a0);var _pthread_rwlock_rdlock=Module["_pthread_rwlock_rdlock"]=a0=>(_pthread_rwlock_rdlock=Module["_pthread_rwlock_rdlock"]=wasmExports["pthread_rwlock_rdlock"])(a0);var _pthread_rwlock_tryrdlock=Module["_pthread_rwlock_tryrdlock"]=a0=>(_pthread_rwlock_tryrdlock=Module["_pthread_rwlock_tryrdlock"]=wasmExports["pthread_rwlock_tryrdlock"])(a0);var _pthread_rwlock_timedrdlock=Module["_pthread_rwlock_timedrdlock"]=(a0,a1)=>(_pthread_rwlock_timedrdlock=Module["_pthread_rwlock_timedrdlock"]=wasmExports["pthread_rwlock_timedrdlock"])(a0,a1);var _pthread_rwlock_wrlock=Module["_pthread_rwlock_wrlock"]=a0=>(_pthread_rwlock_wrlock=Module["_pthread_rwlock_wrlock"]=wasmExports["pthread_rwlock_wrlock"])(a0);var _pthread_rwlock_trywrlock=Module["_pthread_rwlock_trywrlock"]=a0=>(_pthread_rwlock_trywrlock=Module["_pthread_rwlock_trywrlock"]=wasmExports["pthread_rwlock_trywrlock"])(a0);var _pthread_rwlock_timedwrlock=Module["_pthread_rwlock_timedwrlock"]=(a0,a1)=>(_pthread_rwlock_timedwrlock=Module["_pthread_rwlock_timedwrlock"]=wasmExports["pthread_rwlock_timedwrlock"])(a0,a1);var _pthread_rwlock_unlock=Module["_pthread_rwlock_unlock"]=a0=>(_pthread_rwlock_unlock=Module["_pthread_rwlock_unlock"]=wasmExports["pthread_rwlock_unlock"])(a0);var _pthread_rwlockattr_init=Module["_pthread_rwlockattr_init"]=a0=>(_pthread_rwlockattr_init=Module["_pthread_rwlockattr_init"]=wasmExports["pthread_rwlockattr_init"])(a0);var _pthread_rwlockattr_destroy=Module["_pthread_rwlockattr_destroy"]=a0=>(_pthread_rwlockattr_destroy=Module["_pthread_rwlockattr_destroy"]=wasmExports["pthread_rwlockattr_destroy"])(a0);var _pthread_rwlockattr_setpshared=Module["_pthread_rwlockattr_setpshared"]=(a0,a1)=>(_pthread_rwlockattr_setpshared=Module["_pthread_rwlockattr_setpshared"]=wasmExports["pthread_rwlockattr_setpshared"])(a0,a1);var _pthread_spin_init=Module["_pthread_spin_init"]=(a0,a1)=>(_pthread_spin_init=Module["_pthread_spin_init"]=wasmExports["pthread_spin_init"])(a0,a1);var _pthread_spin_destroy=Module["_pthread_spin_destroy"]=a0=>(_pthread_spin_destroy=Module["_pthread_spin_destroy"]=wasmExports["pthread_spin_destroy"])(a0);var _pthread_spin_lock=Module["_pthread_spin_lock"]=a0=>(_pthread_spin_lock=Module["_pthread_spin_lock"]=wasmExports["pthread_spin_lock"])(a0);var _pthread_spin_trylock=Module["_pthread_spin_trylock"]=a0=>(_pthread_spin_trylock=Module["_pthread_spin_trylock"]=wasmExports["pthread_spin_trylock"])(a0);var _pthread_spin_unlock=Module["_pthread_spin_unlock"]=a0=>(_pthread_spin_unlock=Module["_pthread_spin_unlock"]=wasmExports["pthread_spin_unlock"])(a0);var _sem_init=Module["_sem_init"]=(a0,a1,a2)=>(_sem_init=Module["_sem_init"]=wasmExports["sem_init"])(a0,a1,a2);var _sem_post=Module["_sem_post"]=a0=>(_sem_post=Module["_sem_post"]=wasmExports["sem_post"])(a0);var _sem_wait=Module["_sem_wait"]=a0=>(_sem_wait=Module["_sem_wait"]=wasmExports["sem_wait"])(a0);var _sem_trywait=Module["_sem_trywait"]=a0=>(_sem_trywait=Module["_sem_trywait"]=wasmExports["sem_trywait"])(a0);var _sem_destroy=Module["_sem_destroy"]=a0=>(_sem_destroy=Module["_sem_destroy"]=wasmExports["sem_destroy"])(a0);var _pthread_mutex_timedlock=Module["_pthread_mutex_timedlock"]=(a0,a1)=>(_pthread_mutex_timedlock=Module["_pthread_mutex_timedlock"]=wasmExports["pthread_mutex_timedlock"])(a0,a1);var _emscripten_builtin_pthread_create=Module["_emscripten_builtin_pthread_create"]=(a0,a1,a2,a3)=>(_emscripten_builtin_pthread_create=Module["_emscripten_builtin_pthread_create"]=wasmExports["emscripten_builtin_pthread_create"])(a0,a1,a2,a3);var _emscripten_builtin_pthread_join=Module["_emscripten_builtin_pthread_join"]=(a0,a1)=>(_emscripten_builtin_pthread_join=Module["_emscripten_builtin_pthread_join"]=wasmExports["emscripten_builtin_pthread_join"])(a0,a1);var _pthread_join=Module["_pthread_join"]=(a0,a1)=>(_pthread_join=Module["_pthread_join"]=wasmExports["pthread_join"])(a0,a1);var _pthread_once=Module["_pthread_once"]=(a0,a1)=>(_pthread_once=Module["_pthread_once"]=wasmExports["pthread_once"])(a0,a1);var _emscripten_builtin_pthread_exit=Module["_emscripten_builtin_pthread_exit"]=a0=>(_emscripten_builtin_pthread_exit=Module["_emscripten_builtin_pthread_exit"]=wasmExports["emscripten_builtin_pthread_exit"])(a0);var _emscripten_builtin_pthread_detach=Module["_emscripten_builtin_pthread_detach"]=a0=>(_emscripten_builtin_pthread_detach=Module["_emscripten_builtin_pthread_detach"]=wasmExports["emscripten_builtin_pthread_detach"])(a0);var _thrd_detach=Module["_thrd_detach"]=a0=>(_thrd_detach=Module["_thrd_detach"]=wasmExports["thrd_detach"])(a0);var _link=Module["_link"]=(a0,a1)=>(_link=Module["_link"]=wasmExports["link"])(a0,a1);var _linkat=Module["_linkat"]=(a0,a1,a2,a3,a4)=>(_linkat=Module["_linkat"]=wasmExports["linkat"])(a0,a1,a2,a3,a4);var _llabs=Module["_llabs"]=a0=>(_llabs=Module["_llabs"]=wasmExports["llabs"])(a0);var _lldiv=Module["_lldiv"]=(a0,a1,a2)=>(_lldiv=Module["_lldiv"]=wasmExports["lldiv"])(a0,a1,a2);var _llrint=Module["_llrint"]=a0=>(_llrint=Module["_llrint"]=wasmExports["llrint"])(a0);var _rint=Module["_rint"]=a0=>(_rint=Module["_rint"]=wasmExports["rint"])(a0);var _llrintf=Module["_llrintf"]=a0=>(_llrintf=Module["_llrintf"]=wasmExports["llrintf"])(a0);var _rintf=Module["_rintf"]=a0=>(_rintf=Module["_rintf"]=wasmExports["rintf"])(a0);var _llrintl=Module["_llrintl"]=(a0,a1)=>(_llrintl=Module["_llrintl"]=wasmExports["llrintl"])(a0,a1);var _rintl=Module["_rintl"]=(a0,a1,a2)=>(_rintl=Module["_rintl"]=wasmExports["rintl"])(a0,a1,a2);var _llround=Module["_llround"]=a0=>(_llround=Module["_llround"]=wasmExports["llround"])(a0);var _llroundf=Module["_llroundf"]=a0=>(_llroundf=Module["_llroundf"]=wasmExports["llroundf"])(a0);var _roundf=Module["_roundf"]=a0=>(_roundf=Module["_roundf"]=wasmExports["roundf"])(a0);var _llroundl=Module["_llroundl"]=(a0,a1)=>(_llroundl=Module["_llroundl"]=wasmExports["llroundl"])(a0,a1);var _roundl=Module["_roundl"]=(a0,a1,a2)=>(_roundl=Module["_roundl"]=wasmExports["roundl"])(a0,a1,a2);var _log10f=Module["_log10f"]=a0=>(_log10f=Module["_log10f"]=wasmExports["log10f"])(a0);var _log10l=Module["_log10l"]=(a0,a1,a2)=>(_log10l=Module["_log10l"]=wasmExports["log10l"])(a0,a1,a2);var _log2f=Module["_log2f"]=a0=>(_log2f=Module["_log2f"]=wasmExports["log2f"])(a0);var _log2l=Module["_log2l"]=(a0,a1,a2)=>(_log2l=Module["_log2l"]=wasmExports["log2l"])(a0,a1,a2);var _logb=Module["_logb"]=a0=>(_logb=Module["_logb"]=wasmExports["logb"])(a0);var _logbf=Module["_logbf"]=a0=>(_logbf=Module["_logbf"]=wasmExports["logbf"])(a0);var _logbl=Module["_logbl"]=(a0,a1,a2)=>(_logbl=Module["_logbl"]=wasmExports["logbl"])(a0,a1,a2);var _strtoull=Module["_strtoull"]=(a0,a1,a2)=>(_strtoull=Module["_strtoull"]=wasmExports["strtoull"])(a0,a1,a2);var _nrand48=Module["_nrand48"]=a0=>(_nrand48=Module["_nrand48"]=wasmExports["nrand48"])(a0);var _lrand48=Module["_lrand48"]=()=>(_lrand48=Module["_lrand48"]=wasmExports["lrand48"])();var _lrint=Module["_lrint"]=a0=>(_lrint=Module["_lrint"]=wasmExports["lrint"])(a0);var _lrintf=Module["_lrintf"]=a0=>(_lrintf=Module["_lrintf"]=wasmExports["lrintf"])(a0);var _lrintl=Module["_lrintl"]=(a0,a1)=>(_lrintl=Module["_lrintl"]=wasmExports["lrintl"])(a0,a1);var _lround=Module["_lround"]=a0=>(_lround=Module["_lround"]=wasmExports["lround"])(a0);var _lroundf=Module["_lroundf"]=a0=>(_lroundf=Module["_lroundf"]=wasmExports["lroundf"])(a0);var _lroundl=Module["_lroundl"]=(a0,a1)=>(_lroundl=Module["_lroundl"]=wasmExports["lroundl"])(a0,a1);var _lsearch=Module["_lsearch"]=(a0,a1,a2,a3,a4)=>(_lsearch=Module["_lsearch"]=wasmExports["lsearch"])(a0,a1,a2,a3,a4);var _lfind=Module["_lfind"]=(a0,a1,a2,a3,a4)=>(_lfind=Module["_lfind"]=wasmExports["lfind"])(a0,a1,a2,a3,a4);var _mbrlen=Module["_mbrlen"]=(a0,a1,a2)=>(_mbrlen=Module["_mbrlen"]=wasmExports["mbrlen"])(a0,a1,a2);var _mbrtoc16=Module["_mbrtoc16"]=(a0,a1,a2,a3)=>(_mbrtoc16=Module["_mbrtoc16"]=wasmExports["mbrtoc16"])(a0,a1,a2,a3);var _mbrtoc32=Module["_mbrtoc32"]=(a0,a1,a2,a3)=>(_mbrtoc32=Module["_mbrtoc32"]=wasmExports["mbrtoc32"])(a0,a1,a2,a3);var _mbsinit=Module["_mbsinit"]=a0=>(_mbsinit=Module["_mbsinit"]=wasmExports["mbsinit"])(a0);var _mbsnrtowcs=Module["_mbsnrtowcs"]=(a0,a1,a2,a3,a4)=>(_mbsnrtowcs=Module["_mbsnrtowcs"]=wasmExports["mbsnrtowcs"])(a0,a1,a2,a3,a4);var _mbsrtowcs=Module["_mbsrtowcs"]=(a0,a1,a2,a3)=>(_mbsrtowcs=Module["_mbsrtowcs"]=wasmExports["mbsrtowcs"])(a0,a1,a2,a3);var _memccpy=Module["_memccpy"]=(a0,a1,a2,a3)=>(_memccpy=Module["_memccpy"]=wasmExports["memccpy"])(a0,a1,a2,a3);var _memmem=Module["_memmem"]=(a0,a1,a2,a3)=>(_memmem=Module["_memmem"]=wasmExports["memmem"])(a0,a1,a2,a3);var _mempcpy=Module["_mempcpy"]=(a0,a1,a2)=>(_mempcpy=Module["_mempcpy"]=wasmExports["mempcpy"])(a0,a1,a2);var _mincore=Module["_mincore"]=(a0,a1,a2)=>(_mincore=Module["_mincore"]=wasmExports["mincore"])(a0,a1,a2);var _mkdtemp=Module["_mkdtemp"]=a0=>(_mkdtemp=Module["_mkdtemp"]=wasmExports["mkdtemp"])(a0);var _mkfifo=Module["_mkfifo"]=(a0,a1)=>(_mkfifo=Module["_mkfifo"]=wasmExports["mkfifo"])(a0,a1);var _mkfifoat=Module["_mkfifoat"]=(a0,a1,a2)=>(_mkfifoat=Module["_mkfifoat"]=wasmExports["mkfifoat"])(a0,a1,a2);var _mkostemp=Module["_mkostemp"]=(a0,a1)=>(_mkostemp=Module["_mkostemp"]=wasmExports["mkostemp"])(a0,a1);var _mkostemps=Module["_mkostemps"]=(a0,a1,a2)=>(_mkostemps=Module["_mkostemps"]=wasmExports["mkostemps"])(a0,a1,a2);var _mkstemp=Module["_mkstemp"]=a0=>(_mkstemp=Module["_mkstemp"]=wasmExports["mkstemp"])(a0);var _mkstemps=Module["_mkstemps"]=(a0,a1)=>(_mkstemps=Module["_mkstemps"]=wasmExports["mkstemps"])(a0,a1);var _mktemp=Module["_mktemp"]=a0=>(_mktemp=Module["_mktemp"]=wasmExports["mktemp"])(a0);var _timegm=Module["_timegm"]=a0=>(_timegm=Module["_timegm"]=wasmExports["timegm"])(a0);var _tzset=Module["_tzset"]=()=>(_tzset=Module["_tzset"]=wasmExports["tzset"])();var _mlock=Module["_mlock"]=(a0,a1)=>(_mlock=Module["_mlock"]=wasmExports["mlock"])(a0,a1);var _mlockall=Module["_mlockall"]=a0=>(_mlockall=Module["_mlockall"]=wasmExports["mlockall"])(a0);var _emscripten_builtin_mmap=Module["_emscripten_builtin_mmap"]=(a0,a1,a2,a3,a4,a5)=>(_emscripten_builtin_mmap=Module["_emscripten_builtin_mmap"]=wasmExports["emscripten_builtin_mmap"])(a0,a1,a2,a3,a4,a5);var _setmntent=Module["_setmntent"]=(a0,a1)=>(_setmntent=Module["_setmntent"]=wasmExports["setmntent"])(a0,a1);var _endmntent=Module["_endmntent"]=a0=>(_endmntent=Module["_endmntent"]=wasmExports["endmntent"])(a0);var _getmntent_r=Module["_getmntent_r"]=(a0,a1,a2,a3)=>(_getmntent_r=Module["_getmntent_r"]=wasmExports["getmntent_r"])(a0,a1,a2,a3);var _sscanf=Module["_sscanf"]=(a0,a1,a2)=>(_sscanf=Module["_sscanf"]=wasmExports["sscanf"])(a0,a1,a2);var _getmntent=Module["_getmntent"]=a0=>(_getmntent=Module["_getmntent"]=wasmExports["getmntent"])(a0);var _addmntent=Module["_addmntent"]=(a0,a1)=>(_addmntent=Module["_addmntent"]=wasmExports["addmntent"])(a0,a1);var _hasmntopt=Module["_hasmntopt"]=(a0,a1)=>(_hasmntopt=Module["_hasmntopt"]=wasmExports["hasmntopt"])(a0,a1);var _mprotect=Module["_mprotect"]=(a0,a1,a2)=>(_mprotect=Module["_mprotect"]=wasmExports["mprotect"])(a0,a1,a2);var _jrand48=Module["_jrand48"]=a0=>(_jrand48=Module["_jrand48"]=wasmExports["jrand48"])(a0);var _mrand48=Module["_mrand48"]=()=>(_mrand48=Module["_mrand48"]=wasmExports["mrand48"])();var _mtx_destroy=Module["_mtx_destroy"]=a0=>(_mtx_destroy=Module["_mtx_destroy"]=wasmExports["mtx_destroy"])(a0);var _mtx_init=Module["_mtx_init"]=(a0,a1)=>(_mtx_init=Module["_mtx_init"]=wasmExports["mtx_init"])(a0,a1);var _mtx_lock=Module["_mtx_lock"]=a0=>(_mtx_lock=Module["_mtx_lock"]=wasmExports["mtx_lock"])(a0);var _mtx_timedlock=Module["_mtx_timedlock"]=(a0,a1)=>(_mtx_timedlock=Module["_mtx_timedlock"]=wasmExports["mtx_timedlock"])(a0,a1);var _mtx_trylock=Module["_mtx_trylock"]=a0=>(_mtx_trylock=Module["_mtx_trylock"]=wasmExports["mtx_trylock"])(a0);var _mtx_unlock=Module["_mtx_unlock"]=a0=>(_mtx_unlock=Module["_mtx_unlock"]=wasmExports["mtx_unlock"])(a0);var _munlock=Module["_munlock"]=(a0,a1)=>(_munlock=Module["_munlock"]=wasmExports["munlock"])(a0,a1);var _munlockall=Module["_munlockall"]=()=>(_munlockall=Module["_munlockall"]=wasmExports["munlockall"])();var _emscripten_builtin_munmap=Module["_emscripten_builtin_munmap"]=(a0,a1)=>(_emscripten_builtin_munmap=Module["_emscripten_builtin_munmap"]=wasmExports["emscripten_builtin_munmap"])(a0,a1);var _nan=Module["_nan"]=a0=>(_nan=Module["_nan"]=wasmExports["nan"])(a0);var _nanf=Module["_nanf"]=a0=>(_nanf=Module["_nanf"]=wasmExports["nanf"])(a0);var _nanl=Module["_nanl"]=(a0,a1)=>(_nanl=Module["_nanl"]=wasmExports["nanl"])(a0,a1);var _nanosleep=Module["_nanosleep"]=(a0,a1)=>(_nanosleep=Module["_nanosleep"]=wasmExports["nanosleep"])(a0,a1);var _nearbyint=Module["_nearbyint"]=a0=>(_nearbyint=Module["_nearbyint"]=wasmExports["nearbyint"])(a0);var _nearbyintf=Module["_nearbyintf"]=a0=>(_nearbyintf=Module["_nearbyintf"]=wasmExports["nearbyintf"])(a0);var _nearbyintl=Module["_nearbyintl"]=(a0,a1,a2)=>(_nearbyintl=Module["_nearbyintl"]=wasmExports["nearbyintl"])(a0,a1,a2);var _getnetbyaddr=Module["_getnetbyaddr"]=(a0,a1)=>(_getnetbyaddr=Module["_getnetbyaddr"]=wasmExports["getnetbyaddr"])(a0,a1);var _getnetbyname=Module["_getnetbyname"]=a0=>(_getnetbyname=Module["_getnetbyname"]=wasmExports["getnetbyname"])(a0);var ___newlocale=Module["___newlocale"]=(a0,a1,a2)=>(___newlocale=Module["___newlocale"]=wasmExports["__newlocale"])(a0,a1,a2);var _newlocale=Module["_newlocale"]=(a0,a1,a2)=>(_newlocale=Module["_newlocale"]=wasmExports["newlocale"])(a0,a1,a2);var _nextafterf=Module["_nextafterf"]=(a0,a1)=>(_nextafterf=Module["_nextafterf"]=wasmExports["nextafterf"])(a0,a1);var _nexttoward=Module["_nexttoward"]=(a0,a1,a2)=>(_nexttoward=Module["_nexttoward"]=wasmExports["nexttoward"])(a0,a1,a2);var _nexttowardf=Module["_nexttowardf"]=(a0,a1,a2)=>(_nexttowardf=Module["_nexttowardf"]=wasmExports["nexttowardf"])(a0,a1,a2);var _nexttowardl=Module["_nexttowardl"]=(a0,a1,a2,a3,a4)=>(_nexttowardl=Module["_nexttowardl"]=wasmExports["nexttowardl"])(a0,a1,a2,a3,a4);var _nftw=Module["_nftw"]=(a0,a1,a2,a3)=>(_nftw=Module["_nftw"]=wasmExports["nftw"])(a0,a1,a2,a3);var _nice=Module["_nice"]=a0=>(_nice=Module["_nice"]=wasmExports["nice"])(a0);var _setpriority=Module["_setpriority"]=(a0,a1,a2)=>(_setpriority=Module["_setpriority"]=wasmExports["setpriority"])(a0,a1,a2);var _ns_get16=Module["_ns_get16"]=a0=>(_ns_get16=Module["_ns_get16"]=wasmExports["ns_get16"])(a0);var _ns_get32=Module["_ns_get32"]=a0=>(_ns_get32=Module["_ns_get32"]=wasmExports["ns_get32"])(a0);var _ns_put16=Module["_ns_put16"]=(a0,a1)=>(_ns_put16=Module["_ns_put16"]=wasmExports["ns_put16"])(a0,a1);var _ns_put32=Module["_ns_put32"]=(a0,a1)=>(_ns_put32=Module["_ns_put32"]=wasmExports["ns_put32"])(a0,a1);var _ns_skiprr=Module["_ns_skiprr"]=(a0,a1,a2,a3)=>(_ns_skiprr=Module["_ns_skiprr"]=wasmExports["ns_skiprr"])(a0,a1,a2,a3);var _ns_initparse=Module["_ns_initparse"]=(a0,a1,a2)=>(_ns_initparse=Module["_ns_initparse"]=wasmExports["ns_initparse"])(a0,a1,a2);var _ns_name_uncompress=Module["_ns_name_uncompress"]=(a0,a1,a2,a3,a4)=>(_ns_name_uncompress=Module["_ns_name_uncompress"]=wasmExports["ns_name_uncompress"])(a0,a1,a2,a3,a4);var _ns_parserr=Module["_ns_parserr"]=(a0,a1,a2,a3)=>(_ns_parserr=Module["_ns_parserr"]=wasmExports["ns_parserr"])(a0,a1,a2,a3);var _open_memstream=Module["_open_memstream"]=(a0,a1)=>(_open_memstream=Module["_open_memstream"]=wasmExports["open_memstream"])(a0,a1);var _open_wmemstream=Module["_open_wmemstream"]=(a0,a1)=>(_open_wmemstream=Module["_open_wmemstream"]=wasmExports["open_wmemstream"])(a0,a1);var _tcsetattr=Module["_tcsetattr"]=(a0,a1,a2)=>(_tcsetattr=Module["_tcsetattr"]=wasmExports["tcsetattr"])(a0,a1,a2);var _posix_close=Module["_posix_close"]=(a0,a1)=>(_posix_close=Module["_posix_close"]=wasmExports["posix_close"])(a0,a1);var _posix_fallocate=Module["_posix_fallocate"]=(a0,a1,a2)=>(_posix_fallocate=Module["_posix_fallocate"]=wasmExports["posix_fallocate"])(a0,a1,a2);var _posix_madvise=Module["_posix_madvise"]=(a0,a1,a2)=>(_posix_madvise=Module["_posix_madvise"]=wasmExports["posix_madvise"])(a0,a1,a2);var _posix_spawn_file_actions_addchdir_np=Module["_posix_spawn_file_actions_addchdir_np"]=(a0,a1)=>(_posix_spawn_file_actions_addchdir_np=Module["_posix_spawn_file_actions_addchdir_np"]=wasmExports["posix_spawn_file_actions_addchdir_np"])(a0,a1);var _posix_spawn_file_actions_addclose=Module["_posix_spawn_file_actions_addclose"]=(a0,a1)=>(_posix_spawn_file_actions_addclose=Module["_posix_spawn_file_actions_addclose"]=wasmExports["posix_spawn_file_actions_addclose"])(a0,a1);var _posix_spawn_file_actions_adddup2=Module["_posix_spawn_file_actions_adddup2"]=(a0,a1,a2)=>(_posix_spawn_file_actions_adddup2=Module["_posix_spawn_file_actions_adddup2"]=wasmExports["posix_spawn_file_actions_adddup2"])(a0,a1,a2);var _posix_spawn_file_actions_addfchdir_np=Module["_posix_spawn_file_actions_addfchdir_np"]=(a0,a1)=>(_posix_spawn_file_actions_addfchdir_np=Module["_posix_spawn_file_actions_addfchdir_np"]=wasmExports["posix_spawn_file_actions_addfchdir_np"])(a0,a1);var _posix_spawn_file_actions_addopen=Module["_posix_spawn_file_actions_addopen"]=(a0,a1,a2,a3,a4)=>(_posix_spawn_file_actions_addopen=Module["_posix_spawn_file_actions_addopen"]=wasmExports["posix_spawn_file_actions_addopen"])(a0,a1,a2,a3,a4);var _posix_spawn_file_actions_destroy=Module["_posix_spawn_file_actions_destroy"]=a0=>(_posix_spawn_file_actions_destroy=Module["_posix_spawn_file_actions_destroy"]=wasmExports["posix_spawn_file_actions_destroy"])(a0);var _posix_spawn_file_actions_init=Module["_posix_spawn_file_actions_init"]=a0=>(_posix_spawn_file_actions_init=Module["_posix_spawn_file_actions_init"]=wasmExports["posix_spawn_file_actions_init"])(a0);var _posix_spawnattr_destroy=Module["_posix_spawnattr_destroy"]=a0=>(_posix_spawnattr_destroy=Module["_posix_spawnattr_destroy"]=wasmExports["posix_spawnattr_destroy"])(a0);var _posix_spawnattr_getflags=Module["_posix_spawnattr_getflags"]=(a0,a1)=>(_posix_spawnattr_getflags=Module["_posix_spawnattr_getflags"]=wasmExports["posix_spawnattr_getflags"])(a0,a1);var _posix_spawnattr_getpgroup=Module["_posix_spawnattr_getpgroup"]=(a0,a1)=>(_posix_spawnattr_getpgroup=Module["_posix_spawnattr_getpgroup"]=wasmExports["posix_spawnattr_getpgroup"])(a0,a1);var _posix_spawnattr_getsigdefault=Module["_posix_spawnattr_getsigdefault"]=(a0,a1)=>(_posix_spawnattr_getsigdefault=Module["_posix_spawnattr_getsigdefault"]=wasmExports["posix_spawnattr_getsigdefault"])(a0,a1);var _posix_spawnattr_getsigmask=Module["_posix_spawnattr_getsigmask"]=(a0,a1)=>(_posix_spawnattr_getsigmask=Module["_posix_spawnattr_getsigmask"]=wasmExports["posix_spawnattr_getsigmask"])(a0,a1);var _posix_spawnattr_init=Module["_posix_spawnattr_init"]=a0=>(_posix_spawnattr_init=Module["_posix_spawnattr_init"]=wasmExports["posix_spawnattr_init"])(a0);var _posix_spawnattr_getschedparam=Module["_posix_spawnattr_getschedparam"]=(a0,a1)=>(_posix_spawnattr_getschedparam=Module["_posix_spawnattr_getschedparam"]=wasmExports["posix_spawnattr_getschedparam"])(a0,a1);var _posix_spawnattr_setschedparam=Module["_posix_spawnattr_setschedparam"]=(a0,a1)=>(_posix_spawnattr_setschedparam=Module["_posix_spawnattr_setschedparam"]=wasmExports["posix_spawnattr_setschedparam"])(a0,a1);var _posix_spawnattr_getschedpolicy=Module["_posix_spawnattr_getschedpolicy"]=(a0,a1)=>(_posix_spawnattr_getschedpolicy=Module["_posix_spawnattr_getschedpolicy"]=wasmExports["posix_spawnattr_getschedpolicy"])(a0,a1);var _posix_spawnattr_setschedpolicy=Module["_posix_spawnattr_setschedpolicy"]=(a0,a1)=>(_posix_spawnattr_setschedpolicy=Module["_posix_spawnattr_setschedpolicy"]=wasmExports["posix_spawnattr_setschedpolicy"])(a0,a1);var _posix_spawnattr_setflags=Module["_posix_spawnattr_setflags"]=(a0,a1)=>(_posix_spawnattr_setflags=Module["_posix_spawnattr_setflags"]=wasmExports["posix_spawnattr_setflags"])(a0,a1);var _posix_spawnattr_setpgroup=Module["_posix_spawnattr_setpgroup"]=(a0,a1)=>(_posix_spawnattr_setpgroup=Module["_posix_spawnattr_setpgroup"]=wasmExports["posix_spawnattr_setpgroup"])(a0,a1);var _posix_spawnattr_setsigdefault=Module["_posix_spawnattr_setsigdefault"]=(a0,a1)=>(_posix_spawnattr_setsigdefault=Module["_posix_spawnattr_setsigdefault"]=wasmExports["posix_spawnattr_setsigdefault"])(a0,a1);var _posix_spawnattr_setsigmask=Module["_posix_spawnattr_setsigmask"]=(a0,a1)=>(_posix_spawnattr_setsigmask=Module["_posix_spawnattr_setsigmask"]=wasmExports["posix_spawnattr_setsigmask"])(a0,a1);var _powf=Module["_powf"]=(a0,a1)=>(_powf=Module["_powf"]=wasmExports["powf"])(a0,a1);var _preadv=Module["_preadv"]=(a0,a1,a2,a3)=>(_preadv=Module["_preadv"]=wasmExports["preadv"])(a0,a1,a2,a3);var _printf=Module["_printf"]=(a0,a1)=>(_printf=Module["_printf"]=wasmExports["printf"])(a0,a1);var ___small_printf=Module["___small_printf"]=(a0,a1)=>(___small_printf=Module["___small_printf"]=wasmExports["__small_printf"])(a0,a1);var _em_proxying_queue_create=Module["_em_proxying_queue_create"]=()=>(_em_proxying_queue_create=Module["_em_proxying_queue_create"]=wasmExports["em_proxying_queue_create"])();var _em_proxying_queue_destroy=Module["_em_proxying_queue_destroy"]=a0=>(_em_proxying_queue_destroy=Module["_em_proxying_queue_destroy"]=wasmExports["em_proxying_queue_destroy"])(a0);var _emscripten_proxy_get_system_queue=Module["_emscripten_proxy_get_system_queue"]=()=>(_emscripten_proxy_get_system_queue=Module["_emscripten_proxy_get_system_queue"]=wasmExports["emscripten_proxy_get_system_queue"])();var _emscripten_proxy_execute_queue=Module["_emscripten_proxy_execute_queue"]=a0=>(_emscripten_proxy_execute_queue=Module["_emscripten_proxy_execute_queue"]=wasmExports["emscripten_proxy_execute_queue"])(a0);var _emscripten_proxy_finish=Module["_emscripten_proxy_finish"]=a0=>(_emscripten_proxy_finish=Module["_emscripten_proxy_finish"]=wasmExports["emscripten_proxy_finish"])(a0);var _emscripten_proxy_async=Module["_emscripten_proxy_async"]=(a0,a1,a2,a3)=>(_emscripten_proxy_async=Module["_emscripten_proxy_async"]=wasmExports["emscripten_proxy_async"])(a0,a1,a2,a3);var _emscripten_proxy_sync=Module["_emscripten_proxy_sync"]=(a0,a1,a2,a3)=>(_emscripten_proxy_sync=Module["_emscripten_proxy_sync"]=wasmExports["emscripten_proxy_sync"])(a0,a1,a2,a3);var _emscripten_proxy_sync_with_ctx=Module["_emscripten_proxy_sync_with_ctx"]=(a0,a1,a2,a3)=>(_emscripten_proxy_sync_with_ctx=Module["_emscripten_proxy_sync_with_ctx"]=wasmExports["emscripten_proxy_sync_with_ctx"])(a0,a1,a2,a3);var _pselect=Module["_pselect"]=(a0,a1,a2,a3,a4,a5)=>(_pselect=Module["_pselect"]=wasmExports["pselect"])(a0,a1,a2,a3,a4,a5);var _pthread_attr_getdetachstate=Module["_pthread_attr_getdetachstate"]=(a0,a1)=>(_pthread_attr_getdetachstate=Module["_pthread_attr_getdetachstate"]=wasmExports["pthread_attr_getdetachstate"])(a0,a1);var _pthread_attr_getguardsize=Module["_pthread_attr_getguardsize"]=(a0,a1)=>(_pthread_attr_getguardsize=Module["_pthread_attr_getguardsize"]=wasmExports["pthread_attr_getguardsize"])(a0,a1);var _pthread_attr_getinheritsched=Module["_pthread_attr_getinheritsched"]=(a0,a1)=>(_pthread_attr_getinheritsched=Module["_pthread_attr_getinheritsched"]=wasmExports["pthread_attr_getinheritsched"])(a0,a1);var _pthread_attr_getschedparam=Module["_pthread_attr_getschedparam"]=(a0,a1)=>(_pthread_attr_getschedparam=Module["_pthread_attr_getschedparam"]=wasmExports["pthread_attr_getschedparam"])(a0,a1);var _pthread_attr_getschedpolicy=Module["_pthread_attr_getschedpolicy"]=(a0,a1)=>(_pthread_attr_getschedpolicy=Module["_pthread_attr_getschedpolicy"]=wasmExports["pthread_attr_getschedpolicy"])(a0,a1);var _pthread_attr_getscope=Module["_pthread_attr_getscope"]=(a0,a1)=>(_pthread_attr_getscope=Module["_pthread_attr_getscope"]=wasmExports["pthread_attr_getscope"])(a0,a1);var _pthread_attr_getstack=Module["_pthread_attr_getstack"]=(a0,a1,a2)=>(_pthread_attr_getstack=Module["_pthread_attr_getstack"]=wasmExports["pthread_attr_getstack"])(a0,a1,a2);var _pthread_attr_getstacksize=Module["_pthread_attr_getstacksize"]=(a0,a1)=>(_pthread_attr_getstacksize=Module["_pthread_attr_getstacksize"]=wasmExports["pthread_attr_getstacksize"])(a0,a1);var _pthread_barrierattr_getpshared=Module["_pthread_barrierattr_getpshared"]=(a0,a1)=>(_pthread_barrierattr_getpshared=Module["_pthread_barrierattr_getpshared"]=wasmExports["pthread_barrierattr_getpshared"])(a0,a1);var _pthread_condattr_getclock=Module["_pthread_condattr_getclock"]=(a0,a1)=>(_pthread_condattr_getclock=Module["_pthread_condattr_getclock"]=wasmExports["pthread_condattr_getclock"])(a0,a1);var _pthread_condattr_getpshared=Module["_pthread_condattr_getpshared"]=(a0,a1)=>(_pthread_condattr_getpshared=Module["_pthread_condattr_getpshared"]=wasmExports["pthread_condattr_getpshared"])(a0,a1);var _pthread_mutexattr_getprotocol=Module["_pthread_mutexattr_getprotocol"]=(a0,a1)=>(_pthread_mutexattr_getprotocol=Module["_pthread_mutexattr_getprotocol"]=wasmExports["pthread_mutexattr_getprotocol"])(a0,a1);var _pthread_mutexattr_getpshared=Module["_pthread_mutexattr_getpshared"]=(a0,a1)=>(_pthread_mutexattr_getpshared=Module["_pthread_mutexattr_getpshared"]=wasmExports["pthread_mutexattr_getpshared"])(a0,a1);var _pthread_mutexattr_getrobust=Module["_pthread_mutexattr_getrobust"]=(a0,a1)=>(_pthread_mutexattr_getrobust=Module["_pthread_mutexattr_getrobust"]=wasmExports["pthread_mutexattr_getrobust"])(a0,a1);var _pthread_mutexattr_gettype=Module["_pthread_mutexattr_gettype"]=(a0,a1)=>(_pthread_mutexattr_gettype=Module["_pthread_mutexattr_gettype"]=wasmExports["pthread_mutexattr_gettype"])(a0,a1);var _pthread_rwlockattr_getpshared=Module["_pthread_rwlockattr_getpshared"]=(a0,a1)=>(_pthread_rwlockattr_getpshared=Module["_pthread_rwlockattr_getpshared"]=wasmExports["pthread_rwlockattr_getpshared"])(a0,a1);var _pthread_attr_setdetachstate=Module["_pthread_attr_setdetachstate"]=(a0,a1)=>(_pthread_attr_setdetachstate=Module["_pthread_attr_setdetachstate"]=wasmExports["pthread_attr_setdetachstate"])(a0,a1);var _pthread_attr_setguardsize=Module["_pthread_attr_setguardsize"]=(a0,a1)=>(_pthread_attr_setguardsize=Module["_pthread_attr_setguardsize"]=wasmExports["pthread_attr_setguardsize"])(a0,a1);var _pthread_attr_setinheritsched=Module["_pthread_attr_setinheritsched"]=(a0,a1)=>(_pthread_attr_setinheritsched=Module["_pthread_attr_setinheritsched"]=wasmExports["pthread_attr_setinheritsched"])(a0,a1);var _pthread_attr_setschedparam=Module["_pthread_attr_setschedparam"]=(a0,a1)=>(_pthread_attr_setschedparam=Module["_pthread_attr_setschedparam"]=wasmExports["pthread_attr_setschedparam"])(a0,a1);var _pthread_attr_setschedpolicy=Module["_pthread_attr_setschedpolicy"]=(a0,a1)=>(_pthread_attr_setschedpolicy=Module["_pthread_attr_setschedpolicy"]=wasmExports["pthread_attr_setschedpolicy"])(a0,a1);var _pthread_attr_setscope=Module["_pthread_attr_setscope"]=(a0,a1)=>(_pthread_attr_setscope=Module["_pthread_attr_setscope"]=wasmExports["pthread_attr_setscope"])(a0,a1);var _pthread_attr_setstack=Module["_pthread_attr_setstack"]=(a0,a1,a2)=>(_pthread_attr_setstack=Module["_pthread_attr_setstack"]=wasmExports["pthread_attr_setstack"])(a0,a1,a2);var __pthread_cleanup_push=Module["__pthread_cleanup_push"]=(a0,a1,a2)=>(__pthread_cleanup_push=Module["__pthread_cleanup_push"]=wasmExports["_pthread_cleanup_push"])(a0,a1,a2);var __pthread_cleanup_pop=Module["__pthread_cleanup_pop"]=(a0,a1)=>(__pthread_cleanup_pop=Module["__pthread_cleanup_pop"]=wasmExports["_pthread_cleanup_pop"])(a0,a1);var _pthread_getconcurrency=Module["_pthread_getconcurrency"]=()=>(_pthread_getconcurrency=Module["_pthread_getconcurrency"]=wasmExports["pthread_getconcurrency"])();var _pthread_getschedparam=Module["_pthread_getschedparam"]=(a0,a1,a2)=>(_pthread_getschedparam=Module["_pthread_getschedparam"]=wasmExports["pthread_getschedparam"])(a0,a1,a2);var _thrd_current=Module["_thrd_current"]=()=>(_thrd_current=Module["_thrd_current"]=wasmExports["thrd_current"])();var _emscripten_main_runtime_thread_id=Module["_emscripten_main_runtime_thread_id"]=()=>(_emscripten_main_runtime_thread_id=Module["_emscripten_main_runtime_thread_id"]=wasmExports["emscripten_main_runtime_thread_id"])();var _pthread_setconcurrency=Module["_pthread_setconcurrency"]=a0=>(_pthread_setconcurrency=Module["_pthread_setconcurrency"]=wasmExports["pthread_setconcurrency"])(a0);var _pthread_setschedprio=Module["_pthread_setschedprio"]=(a0,a1)=>(_pthread_setschedprio=Module["_pthread_setschedprio"]=wasmExports["pthread_setschedprio"])(a0,a1);var ___sig_is_blocked=Module["___sig_is_blocked"]=a0=>(___sig_is_blocked=Module["___sig_is_blocked"]=wasmExports["__sig_is_blocked"])(a0);var _sigorset=Module["_sigorset"]=(a0,a1,a2)=>(_sigorset=Module["_sigorset"]=wasmExports["sigorset"])(a0,a1,a2);var _sigandset=Module["_sigandset"]=(a0,a1,a2)=>(_sigandset=Module["_sigandset"]=wasmExports["sigandset"])(a0,a1,a2);var _sigdelset=Module["_sigdelset"]=(a0,a1)=>(_sigdelset=Module["_sigdelset"]=wasmExports["sigdelset"])(a0,a1);var _ptsname=Module["_ptsname"]=a0=>(_ptsname=Module["_ptsname"]=wasmExports["ptsname"])(a0);var _posix_openpt=Module["_posix_openpt"]=a0=>(_posix_openpt=Module["_posix_openpt"]=wasmExports["posix_openpt"])(a0);var _grantpt=Module["_grantpt"]=a0=>(_grantpt=Module["_grantpt"]=wasmExports["grantpt"])(a0);var _unlockpt=Module["_unlockpt"]=a0=>(_unlockpt=Module["_unlockpt"]=wasmExports["unlockpt"])(a0);var _ptsname_r=Module["_ptsname_r"]=(a0,a1,a2)=>(_ptsname_r=Module["_ptsname_r"]=wasmExports["ptsname_r"])(a0,a1,a2);var __IO_putc=Module["__IO_putc"]=(a0,a1)=>(__IO_putc=Module["__IO_putc"]=wasmExports["_IO_putc"])(a0,a1);var _putc_unlocked=Module["_putc_unlocked"]=(a0,a1)=>(_putc_unlocked=Module["_putc_unlocked"]=wasmExports["putc_unlocked"])(a0,a1);var _fputc_unlocked=Module["_fputc_unlocked"]=(a0,a1)=>(_fputc_unlocked=Module["_fputc_unlocked"]=wasmExports["fputc_unlocked"])(a0,a1);var __IO_putc_unlocked=Module["__IO_putc_unlocked"]=(a0,a1)=>(__IO_putc_unlocked=Module["__IO_putc_unlocked"]=wasmExports["_IO_putc_unlocked"])(a0,a1);var _putchar=Module["_putchar"]=a0=>(_putchar=Module["_putchar"]=wasmExports["putchar"])(a0);var _putchar_unlocked=Module["_putchar_unlocked"]=a0=>(_putchar_unlocked=Module["_putchar_unlocked"]=wasmExports["putchar_unlocked"])(a0);var _putenv=Module["_putenv"]=a0=>(_putenv=Module["_putenv"]=wasmExports["putenv"])(a0);var _putw=Module["_putw"]=(a0,a1)=>(_putw=Module["_putw"]=wasmExports["putw"])(a0,a1);var _putwc=Module["_putwc"]=(a0,a1)=>(_putwc=Module["_putwc"]=wasmExports["putwc"])(a0,a1);var _putwchar=Module["_putwchar"]=a0=>(_putwchar=Module["_putwchar"]=wasmExports["putwchar"])(a0);var _putwchar_unlocked=Module["_putwchar_unlocked"]=a0=>(_putwchar_unlocked=Module["_putwchar_unlocked"]=wasmExports["putwchar_unlocked"])(a0);var _pwritev=Module["_pwritev"]=(a0,a1,a2,a3)=>(_pwritev=Module["_pwritev"]=wasmExports["pwritev"])(a0,a1,a2,a3);var _qsort_r=Module["_qsort_r"]=(a0,a1,a2,a3,a4)=>(_qsort_r=Module["_qsort_r"]=wasmExports["qsort_r"])(a0,a1,a2,a3,a4);var _quick_exit=Module["_quick_exit"]=a0=>(_quick_exit=Module["_quick_exit"]=wasmExports["quick_exit"])(a0);var _action_abort=Module["_action_abort"]=a0=>(_action_abort=Module["_action_abort"]=wasmExports["action_abort"])(a0);var _action_terminate=Module["_action_terminate"]=a0=>(_action_terminate=Module["_action_terminate"]=wasmExports["action_terminate"])(a0);var _srand=Module["_srand"]=a0=>(_srand=Module["_srand"]=wasmExports["srand"])(a0);var _rand=Module["_rand"]=()=>(_rand=Module["_rand"]=wasmExports["rand"])();var _rand_r=Module["_rand_r"]=a0=>(_rand_r=Module["_rand_r"]=wasmExports["rand_r"])(a0);var _srandom=Module["_srandom"]=a0=>(_srandom=Module["_srandom"]=wasmExports["srandom"])(a0);var _initstate=Module["_initstate"]=(a0,a1,a2)=>(_initstate=Module["_initstate"]=wasmExports["initstate"])(a0,a1,a2);var _setstate=Module["_setstate"]=a0=>(_setstate=Module["_setstate"]=wasmExports["setstate"])(a0);var _random=Module["_random"]=()=>(_random=Module["_random"]=wasmExports["random"])();var _readdir_r=Module["_readdir_r"]=(a0,a1,a2)=>(_readdir_r=Module["_readdir_r"]=wasmExports["readdir_r"])(a0,a1,a2);var _recvmmsg=Module["_recvmmsg"]=(a0,a1,a2,a3,a4)=>(_recvmmsg=Module["_recvmmsg"]=wasmExports["recvmmsg"])(a0,a1,a2,a3,a4);var _regcomp=Module["_regcomp"]=(a0,a1,a2)=>(_regcomp=Module["_regcomp"]=wasmExports["regcomp"])(a0,a1,a2);var _regfree=Module["_regfree"]=a0=>(_regfree=Module["_regfree"]=wasmExports["regfree"])(a0);var _regerror=Module["_regerror"]=(a0,a1,a2,a3)=>(_regerror=Module["_regerror"]=wasmExports["regerror"])(a0,a1,a2,a3);var _regexec=Module["_regexec"]=(a0,a1,a2,a3,a4)=>(_regexec=Module["_regexec"]=wasmExports["regexec"])(a0,a1,a2,a3,a4);var _remainder=Module["_remainder"]=(a0,a1)=>(_remainder=Module["_remainder"]=wasmExports["remainder"])(a0,a1);var _remquo=Module["_remquo"]=(a0,a1,a2)=>(_remquo=Module["_remquo"]=wasmExports["remquo"])(a0,a1,a2);var _drem=Module["_drem"]=(a0,a1)=>(_drem=Module["_drem"]=wasmExports["drem"])(a0,a1);var _remainderf=Module["_remainderf"]=(a0,a1)=>(_remainderf=Module["_remainderf"]=wasmExports["remainderf"])(a0,a1);var _remquof=Module["_remquof"]=(a0,a1,a2)=>(_remquof=Module["_remquof"]=wasmExports["remquof"])(a0,a1,a2);var _dremf=Module["_dremf"]=(a0,a1)=>(_dremf=Module["_dremf"]=wasmExports["dremf"])(a0,a1);var _remainderl=Module["_remainderl"]=(a0,a1,a2,a3,a4)=>(_remainderl=Module["_remainderl"]=wasmExports["remainderl"])(a0,a1,a2,a3,a4);var _remquol=Module["_remquol"]=(a0,a1,a2,a3,a4,a5)=>(_remquol=Module["_remquol"]=wasmExports["remquol"])(a0,a1,a2,a3,a4,a5);var _remove=Module["_remove"]=a0=>(_remove=Module["_remove"]=wasmExports["remove"])(a0);var _res_init=Module["_res_init"]=()=>(_res_init=Module["_res_init"]=wasmExports["res_init"])();var _res_mkquery=Module["_res_mkquery"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8)=>(_res_mkquery=Module["_res_mkquery"]=wasmExports["res_mkquery"])(a0,a1,a2,a3,a4,a5,a6,a7,a8);var ___res_msend=Module["___res_msend"]=(a0,a1,a2,a3,a4,a5)=>(___res_msend=Module["___res_msend"]=wasmExports["__res_msend"])(a0,a1,a2,a3,a4,a5);var _res_send=Module["_res_send"]=(a0,a1,a2,a3)=>(_res_send=Module["_res_send"]=wasmExports["res_send"])(a0,a1,a2,a3);var ___res_state=Module["___res_state"]=()=>(___res_state=Module["___res_state"]=wasmExports["__res_state"])();var _rindex=Module["_rindex"]=(a0,a1)=>(_rindex=Module["_rindex"]=wasmExports["rindex"])(a0,a1);var _emscripten_get_sbrk_ptr=Module["_emscripten_get_sbrk_ptr"]=()=>(_emscripten_get_sbrk_ptr=Module["_emscripten_get_sbrk_ptr"]=wasmExports["emscripten_get_sbrk_ptr"])();var _sbrk=Module["_sbrk"]=a0=>(_sbrk=Module["_sbrk"]=wasmExports["sbrk"])(a0);var _brk=Module["_brk"]=a0=>(_brk=Module["_brk"]=wasmExports["brk"])(a0);var _scalb=Module["_scalb"]=(a0,a1)=>(_scalb=Module["_scalb"]=wasmExports["scalb"])(a0,a1);var _scalbf=Module["_scalbf"]=(a0,a1)=>(_scalbf=Module["_scalbf"]=wasmExports["scalbf"])(a0,a1);var _scalbln=Module["_scalbln"]=(a0,a1)=>(_scalbln=Module["_scalbln"]=wasmExports["scalbln"])(a0,a1);var _scalblnf=Module["_scalblnf"]=(a0,a1)=>(_scalblnf=Module["_scalblnf"]=wasmExports["scalblnf"])(a0,a1);var _scalblnl=Module["_scalblnl"]=(a0,a1,a2,a3)=>(_scalblnl=Module["_scalblnl"]=wasmExports["scalblnl"])(a0,a1,a2,a3);var _scandir=Module["_scandir"]=(a0,a1,a2,a3)=>(_scandir=Module["_scandir"]=wasmExports["scandir"])(a0,a1,a2,a3);var _scanf=Module["_scanf"]=(a0,a1)=>(_scanf=Module["_scanf"]=wasmExports["scanf"])(a0,a1);var _vscanf=Module["_vscanf"]=(a0,a1)=>(_vscanf=Module["_vscanf"]=wasmExports["vscanf"])(a0,a1);var ___isoc99_scanf=Module["___isoc99_scanf"]=(a0,a1)=>(___isoc99_scanf=Module["___isoc99_scanf"]=wasmExports["__isoc99_scanf"])(a0,a1);var _secure_getenv=Module["_secure_getenv"]=a0=>(_secure_getenv=Module["_secure_getenv"]=wasmExports["secure_getenv"])(a0);var _seed48=Module["_seed48"]=a0=>(_seed48=Module["_seed48"]=wasmExports["seed48"])(a0);var _seekdir=Module["_seekdir"]=(a0,a1)=>(_seekdir=Module["_seekdir"]=wasmExports["seekdir"])(a0,a1);var _sendmmsg=Module["_sendmmsg"]=(a0,a1,a2,a3)=>(_sendmmsg=Module["_sendmmsg"]=wasmExports["sendmmsg"])(a0,a1,a2,a3);var _endservent=Module["_endservent"]=()=>(_endservent=Module["_endservent"]=wasmExports["endservent"])();var _setservent=Module["_setservent"]=a0=>(_setservent=Module["_setservent"]=wasmExports["setservent"])(a0);var _getservent=Module["_getservent"]=()=>(_getservent=Module["_getservent"]=wasmExports["getservent"])();var _setbuf=Module["_setbuf"]=(a0,a1)=>(_setbuf=Module["_setbuf"]=wasmExports["setbuf"])(a0,a1);var _setbuffer=Module["_setbuffer"]=(a0,a1,a2)=>(_setbuffer=Module["_setbuffer"]=wasmExports["setbuffer"])(a0,a1,a2);var _setdomainname=Module["_setdomainname"]=(a0,a1)=>(_setdomainname=Module["_setdomainname"]=wasmExports["setdomainname"])(a0,a1);var _setegid=Module["_setegid"]=a0=>(_setegid=Module["_setegid"]=wasmExports["setegid"])(a0);var _seteuid=Module["_seteuid"]=a0=>(_seteuid=Module["_seteuid"]=wasmExports["seteuid"])(a0);var __emscripten_timeout=(a0,a1)=>(__emscripten_timeout=wasmExports["_emscripten_timeout"])(a0,a1);var _setlinebuf=Module["_setlinebuf"]=a0=>(_setlinebuf=Module["_setlinebuf"]=wasmExports["setlinebuf"])(a0);var _setresgid=Module["_setresgid"]=(a0,a1,a2)=>(_setresgid=Module["_setresgid"]=wasmExports["setresgid"])(a0,a1,a2);var _setresuid=Module["_setresuid"]=(a0,a1,a2)=>(_setresuid=Module["_setresuid"]=wasmExports["setresuid"])(a0,a1,a2);var _shm_open=Module["_shm_open"]=(a0,a1,a2)=>(_shm_open=Module["_shm_open"]=wasmExports["shm_open"])(a0,a1,a2);var _shm_unlink=Module["_shm_unlink"]=a0=>(_shm_unlink=Module["_shm_unlink"]=wasmExports["shm_unlink"])(a0);var _sigaction=Module["_sigaction"]=(a0,a1,a2)=>(_sigaction=Module["_sigaction"]=wasmExports["sigaction"])(a0,a1,a2);var _sigisemptyset=Module["_sigisemptyset"]=a0=>(_sigisemptyset=Module["_sigisemptyset"]=wasmExports["sigisemptyset"])(a0);var _bsd_signal=Module["_bsd_signal"]=(a0,a1)=>(_bsd_signal=Module["_bsd_signal"]=wasmExports["bsd_signal"])(a0,a1);var ___sysv_signal=Module["___sysv_signal"]=(a0,a1)=>(___sysv_signal=Module["___sysv_signal"]=wasmExports["__sysv_signal"])(a0,a1);var _significand=Module["_significand"]=a0=>(_significand=Module["_significand"]=wasmExports["significand"])(a0);var _significandf=Module["_significandf"]=a0=>(_significandf=Module["_significandf"]=wasmExports["significandf"])(a0);var _sigprocmask=Module["_sigprocmask"]=(a0,a1,a2)=>(_sigprocmask=Module["_sigprocmask"]=wasmExports["sigprocmask"])(a0,a1,a2);var _sincos=Module["_sincos"]=(a0,a1,a2)=>(_sincos=Module["_sincos"]=wasmExports["sincos"])(a0,a1,a2);var _sincosf=Module["_sincosf"]=(a0,a1,a2)=>(_sincosf=Module["_sincosf"]=wasmExports["sincosf"])(a0,a1,a2);var _sincosl=Module["_sincosl"]=(a0,a1,a2,a3)=>(_sincosl=Module["_sincosl"]=wasmExports["sincosl"])(a0,a1,a2,a3);var _sinhl=Module["_sinhl"]=(a0,a1,a2)=>(_sinhl=Module["_sinhl"]=wasmExports["sinhl"])(a0,a1,a2);var _sinl=Module["_sinl"]=(a0,a1,a2)=>(_sinl=Module["_sinl"]=wasmExports["sinl"])(a0,a1,a2);var _sleep=Module["_sleep"]=a0=>(_sleep=Module["_sleep"]=wasmExports["sleep"])(a0);var _sockatmark=Module["_sockatmark"]=a0=>(_sockatmark=Module["_sockatmark"]=wasmExports["sockatmark"])(a0);var _vsprintf=Module["_vsprintf"]=(a0,a1,a2)=>(_vsprintf=Module["_vsprintf"]=wasmExports["vsprintf"])(a0,a1,a2);var _vsiprintf=Module["_vsiprintf"]=(a0,a1,a2)=>(_vsiprintf=Module["_vsiprintf"]=wasmExports["vsiprintf"])(a0,a1,a2);var ___small_sprintf=Module["___small_sprintf"]=(a0,a1,a2)=>(___small_sprintf=Module["___small_sprintf"]=wasmExports["__small_sprintf"])(a0,a1,a2);var ___small_vsprintf=Module["___small_vsprintf"]=(a0,a1,a2)=>(___small_vsprintf=Module["___small_vsprintf"]=wasmExports["__small_vsprintf"])(a0,a1,a2);var _srand48=Module["_srand48"]=a0=>(_srand48=Module["_srand48"]=wasmExports["srand48"])(a0);var _vsscanf=Module["_vsscanf"]=(a0,a1,a2)=>(_vsscanf=Module["_vsscanf"]=wasmExports["vsscanf"])(a0,a1,a2);var ___isoc99_sscanf=Module["___isoc99_sscanf"]=(a0,a1,a2)=>(___isoc99_sscanf=Module["___isoc99_sscanf"]=wasmExports["__isoc99_sscanf"])(a0,a1,a2);var _statfs=Module["_statfs"]=(a0,a1)=>(_statfs=Module["_statfs"]=wasmExports["statfs"])(a0,a1);var _fstatfs=Module["_fstatfs"]=(a0,a1)=>(_fstatfs=Module["_fstatfs"]=wasmExports["fstatfs"])(a0,a1);var _statx=Module["_statx"]=(a0,a1,a2,a3,a4)=>(_statx=Module["_statx"]=wasmExports["statx"])(a0,a1,a2,a3,a4);var _stpcpy=Module["_stpcpy"]=(a0,a1)=>(_stpcpy=Module["_stpcpy"]=wasmExports["stpcpy"])(a0,a1);var _stpncpy=Module["_stpncpy"]=(a0,a1,a2)=>(_stpncpy=Module["_stpncpy"]=wasmExports["stpncpy"])(a0,a1,a2);var ___strcasecmp_l=Module["___strcasecmp_l"]=(a0,a1,a2)=>(___strcasecmp_l=Module["___strcasecmp_l"]=wasmExports["__strcasecmp_l"])(a0,a1,a2);var _strcasecmp_l=Module["_strcasecmp_l"]=(a0,a1,a2)=>(_strcasecmp_l=Module["_strcasecmp_l"]=wasmExports["strcasecmp_l"])(a0,a1,a2);var _strcasestr=Module["_strcasestr"]=(a0,a1)=>(_strcasestr=Module["_strcasestr"]=wasmExports["strcasestr"])(a0,a1);var _strncasecmp=Module["_strncasecmp"]=(a0,a1,a2)=>(_strncasecmp=Module["_strncasecmp"]=wasmExports["strncasecmp"])(a0,a1,a2);var _strchrnul=Module["_strchrnul"]=(a0,a1)=>(_strchrnul=Module["_strchrnul"]=wasmExports["strchrnul"])(a0,a1);var ___strcoll_l=Module["___strcoll_l"]=(a0,a1,a2)=>(___strcoll_l=Module["___strcoll_l"]=wasmExports["__strcoll_l"])(a0,a1,a2);var _strcoll_l=Module["_strcoll_l"]=(a0,a1,a2)=>(_strcoll_l=Module["_strcoll_l"]=wasmExports["strcoll_l"])(a0,a1,a2);var ___strerror_l=Module["___strerror_l"]=(a0,a1)=>(___strerror_l=Module["___strerror_l"]=wasmExports["__strerror_l"])(a0,a1);var _strerror_l=Module["_strerror_l"]=(a0,a1)=>(_strerror_l=Module["_strerror_l"]=wasmExports["strerror_l"])(a0,a1);var _strerror_r=Module["_strerror_r"]=(a0,a1,a2)=>(_strerror_r=Module["_strerror_r"]=wasmExports["strerror_r"])(a0,a1,a2);var ___xpg_strerror_r=Module["___xpg_strerror_r"]=(a0,a1,a2)=>(___xpg_strerror_r=Module["___xpg_strerror_r"]=wasmExports["__xpg_strerror_r"])(a0,a1,a2);var _strfmon_l=Module["_strfmon_l"]=(a0,a1,a2,a3,a4)=>(_strfmon_l=Module["_strfmon_l"]=wasmExports["strfmon_l"])(a0,a1,a2,a3,a4);var _strfmon=Module["_strfmon"]=(a0,a1,a2,a3)=>(_strfmon=Module["_strfmon"]=wasmExports["strfmon"])(a0,a1,a2,a3);var _strlcat=Module["_strlcat"]=(a0,a1,a2)=>(_strlcat=Module["_strlcat"]=wasmExports["strlcat"])(a0,a1,a2);var _strlcpy=Module["_strlcpy"]=(a0,a1,a2)=>(_strlcpy=Module["_strlcpy"]=wasmExports["strlcpy"])(a0,a1,a2);var _strlwr=Module["_strlwr"]=a0=>(_strlwr=Module["_strlwr"]=wasmExports["strlwr"])(a0);var ___strncasecmp_l=Module["___strncasecmp_l"]=(a0,a1,a2,a3)=>(___strncasecmp_l=Module["___strncasecmp_l"]=wasmExports["__strncasecmp_l"])(a0,a1,a2,a3);var _strncasecmp_l=Module["_strncasecmp_l"]=(a0,a1,a2,a3)=>(_strncasecmp_l=Module["_strncasecmp_l"]=wasmExports["strncasecmp_l"])(a0,a1,a2,a3);var _strndup=Module["_strndup"]=(a0,a1)=>(_strndup=Module["_strndup"]=wasmExports["strndup"])(a0,a1);var _strsep=Module["_strsep"]=(a0,a1)=>(_strsep=Module["_strsep"]=wasmExports["strsep"])(a0,a1);var _strtof=Module["_strtof"]=(a0,a1)=>(_strtof=Module["_strtof"]=wasmExports["strtof"])(a0,a1);var _strtold=Module["_strtold"]=(a0,a1,a2)=>(_strtold=Module["_strtold"]=wasmExports["strtold"])(a0,a1,a2);var _strtof_l=Module["_strtof_l"]=(a0,a1,a2)=>(_strtof_l=Module["_strtof_l"]=wasmExports["strtof_l"])(a0,a1,a2);var _strtod_l=Module["_strtod_l"]=(a0,a1,a2)=>(_strtod_l=Module["_strtod_l"]=wasmExports["strtod_l"])(a0,a1,a2);var _strtold_l=Module["_strtold_l"]=(a0,a1,a2,a3)=>(_strtold_l=Module["_strtold_l"]=wasmExports["strtold_l"])(a0,a1,a2,a3);var ___strtof_l=Module["___strtof_l"]=(a0,a1,a2)=>(___strtof_l=Module["___strtof_l"]=wasmExports["__strtof_l"])(a0,a1,a2);var ___strtod_l=Module["___strtod_l"]=(a0,a1,a2)=>(___strtod_l=Module["___strtod_l"]=wasmExports["__strtod_l"])(a0,a1,a2);var ___strtold_l=Module["___strtold_l"]=(a0,a1,a2,a3)=>(___strtold_l=Module["___strtold_l"]=wasmExports["__strtold_l"])(a0,a1,a2,a3);var _strtok=Module["_strtok"]=(a0,a1)=>(_strtok=Module["_strtok"]=wasmExports["strtok"])(a0,a1);var _strtok_r=Module["_strtok_r"]=(a0,a1,a2)=>(_strtok_r=Module["_strtok_r"]=wasmExports["strtok_r"])(a0,a1,a2);var _strtoll=Module["_strtoll"]=(a0,a1,a2)=>(_strtoll=Module["_strtoll"]=wasmExports["strtoll"])(a0,a1,a2);var _strtoimax=Module["_strtoimax"]=(a0,a1,a2)=>(_strtoimax=Module["_strtoimax"]=wasmExports["strtoimax"])(a0,a1,a2);var _strtoumax=Module["_strtoumax"]=(a0,a1,a2)=>(_strtoumax=Module["_strtoumax"]=wasmExports["strtoumax"])(a0,a1,a2);var ___strtol_internal=Module["___strtol_internal"]=(a0,a1,a2)=>(___strtol_internal=Module["___strtol_internal"]=wasmExports["__strtol_internal"])(a0,a1,a2);var ___strtoul_internal=Module["___strtoul_internal"]=(a0,a1,a2)=>(___strtoul_internal=Module["___strtoul_internal"]=wasmExports["__strtoul_internal"])(a0,a1,a2);var ___strtoll_internal=Module["___strtoll_internal"]=(a0,a1,a2)=>(___strtoll_internal=Module["___strtoll_internal"]=wasmExports["__strtoll_internal"])(a0,a1,a2);var ___strtoull_internal=Module["___strtoull_internal"]=(a0,a1,a2)=>(___strtoull_internal=Module["___strtoull_internal"]=wasmExports["__strtoull_internal"])(a0,a1,a2);var ___strtoimax_internal=Module["___strtoimax_internal"]=(a0,a1,a2)=>(___strtoimax_internal=Module["___strtoimax_internal"]=wasmExports["__strtoimax_internal"])(a0,a1,a2);var ___strtoumax_internal=Module["___strtoumax_internal"]=(a0,a1,a2)=>(___strtoumax_internal=Module["___strtoumax_internal"]=wasmExports["__strtoumax_internal"])(a0,a1,a2);var _strtoull_l=Module["_strtoull_l"]=(a0,a1,a2,a3)=>(_strtoull_l=Module["_strtoull_l"]=wasmExports["strtoull_l"])(a0,a1,a2,a3);var _strtoll_l=Module["_strtoll_l"]=(a0,a1,a2,a3)=>(_strtoll_l=Module["_strtoll_l"]=wasmExports["strtoll_l"])(a0,a1,a2,a3);var _strtoul_l=Module["_strtoul_l"]=(a0,a1,a2,a3)=>(_strtoul_l=Module["_strtoul_l"]=wasmExports["strtoul_l"])(a0,a1,a2,a3);var _strtol_l=Module["_strtol_l"]=(a0,a1,a2,a3)=>(_strtol_l=Module["_strtol_l"]=wasmExports["strtol_l"])(a0,a1,a2,a3);var _strupr=Module["_strupr"]=a0=>(_strupr=Module["_strupr"]=wasmExports["strupr"])(a0);var _strverscmp=Module["_strverscmp"]=(a0,a1)=>(_strverscmp=Module["_strverscmp"]=wasmExports["strverscmp"])(a0,a1);var ___strxfrm_l=Module["___strxfrm_l"]=(a0,a1,a2,a3)=>(___strxfrm_l=Module["___strxfrm_l"]=wasmExports["__strxfrm_l"])(a0,a1,a2,a3);var _strxfrm=Module["_strxfrm"]=(a0,a1,a2)=>(_strxfrm=Module["_strxfrm"]=wasmExports["strxfrm"])(a0,a1,a2);var _strxfrm_l=Module["_strxfrm_l"]=(a0,a1,a2,a3)=>(_strxfrm_l=Module["_strxfrm_l"]=wasmExports["strxfrm_l"])(a0,a1,a2,a3);var _swab=Module["_swab"]=(a0,a1,a2)=>(_swab=Module["_swab"]=wasmExports["swab"])(a0,a1,a2);var _swprintf=Module["_swprintf"]=(a0,a1,a2,a3)=>(_swprintf=Module["_swprintf"]=wasmExports["swprintf"])(a0,a1,a2,a3);var _vswprintf=Module["_vswprintf"]=(a0,a1,a2,a3)=>(_vswprintf=Module["_vswprintf"]=wasmExports["vswprintf"])(a0,a1,a2,a3);var _swscanf=Module["_swscanf"]=(a0,a1,a2)=>(_swscanf=Module["_swscanf"]=wasmExports["swscanf"])(a0,a1,a2);var _vswscanf=Module["_vswscanf"]=(a0,a1,a2)=>(_vswscanf=Module["_vswscanf"]=wasmExports["vswscanf"])(a0,a1,a2);var ___isoc99_swscanf=Module["___isoc99_swscanf"]=(a0,a1,a2)=>(___isoc99_swscanf=Module["___isoc99_swscanf"]=wasmExports["__isoc99_swscanf"])(a0,a1,a2);var _symlinkat=Module["_symlinkat"]=(a0,a1,a2)=>(_symlinkat=Module["_symlinkat"]=wasmExports["symlinkat"])(a0,a1,a2);var _setlogmask=Module["_setlogmask"]=a0=>(_setlogmask=Module["_setlogmask"]=wasmExports["setlogmask"])(a0);var _closelog=Module["_closelog"]=()=>(_closelog=Module["_closelog"]=wasmExports["closelog"])();var _openlog=Module["_openlog"]=(a0,a1,a2)=>(_openlog=Module["_openlog"]=wasmExports["openlog"])(a0,a1,a2);var _syslog=Module["_syslog"]=(a0,a1,a2)=>(_syslog=Module["_syslog"]=wasmExports["syslog"])(a0,a1,a2);var _vsyslog=Module["_vsyslog"]=(a0,a1,a2)=>(_vsyslog=Module["_vsyslog"]=wasmExports["vsyslog"])(a0,a1,a2);var _tanhf=Module["_tanhf"]=a0=>(_tanhf=Module["_tanhf"]=wasmExports["tanhf"])(a0);var _tanhl=Module["_tanhl"]=(a0,a1,a2)=>(_tanhl=Module["_tanhl"]=wasmExports["tanhl"])(a0,a1,a2);var _tanl=Module["_tanl"]=(a0,a1,a2)=>(_tanl=Module["_tanl"]=wasmExports["tanl"])(a0,a1,a2);var _tcdrain=Module["_tcdrain"]=a0=>(_tcdrain=Module["_tcdrain"]=wasmExports["tcdrain"])(a0);var _tcflow=Module["_tcflow"]=(a0,a1)=>(_tcflow=Module["_tcflow"]=wasmExports["tcflow"])(a0,a1);var _tcflush=Module["_tcflush"]=(a0,a1)=>(_tcflush=Module["_tcflush"]=wasmExports["tcflush"])(a0,a1);var _tcgetattr=Module["_tcgetattr"]=(a0,a1)=>(_tcgetattr=Module["_tcgetattr"]=wasmExports["tcgetattr"])(a0,a1);var _tcgetsid=Module["_tcgetsid"]=a0=>(_tcgetsid=Module["_tcgetsid"]=wasmExports["tcgetsid"])(a0);var _tcgetwinsize=Module["_tcgetwinsize"]=(a0,a1)=>(_tcgetwinsize=Module["_tcgetwinsize"]=wasmExports["tcgetwinsize"])(a0,a1);var _tcsendbreak=Module["_tcsendbreak"]=(a0,a1)=>(_tcsendbreak=Module["_tcsendbreak"]=wasmExports["tcsendbreak"])(a0,a1);var _tcsetwinsize=Module["_tcsetwinsize"]=(a0,a1)=>(_tcsetwinsize=Module["_tcsetwinsize"]=wasmExports["tcsetwinsize"])(a0,a1);var _tdelete=Module["_tdelete"]=(a0,a1,a2)=>(_tdelete=Module["_tdelete"]=wasmExports["tdelete"])(a0,a1,a2);var _tdestroy=Module["_tdestroy"]=(a0,a1)=>(_tdestroy=Module["_tdestroy"]=wasmExports["tdestroy"])(a0,a1);var _telldir=Module["_telldir"]=a0=>(_telldir=Module["_telldir"]=wasmExports["telldir"])(a0);var _tempnam=Module["_tempnam"]=(a0,a1)=>(_tempnam=Module["_tempnam"]=wasmExports["tempnam"])(a0,a1);var _ngettext=Module["_ngettext"]=(a0,a1,a2)=>(_ngettext=Module["_ngettext"]=wasmExports["ngettext"])(a0,a1,a2);var _tfind=Module["_tfind"]=(a0,a1,a2)=>(_tfind=Module["_tfind"]=wasmExports["tfind"])(a0,a1,a2);var _tgamma=Module["_tgamma"]=a0=>(_tgamma=Module["_tgamma"]=wasmExports["tgamma"])(a0);var _tgammaf=Module["_tgammaf"]=a0=>(_tgammaf=Module["_tgammaf"]=wasmExports["tgammaf"])(a0);var _tgammal=Module["_tgammal"]=(a0,a1,a2)=>(_tgammal=Module["_tgammal"]=wasmExports["tgammal"])(a0,a1,a2);var _thrd_create=Module["_thrd_create"]=(a0,a1,a2)=>(_thrd_create=Module["_thrd_create"]=wasmExports["thrd_create"])(a0,a1,a2);var _thrd_exit=Module["_thrd_exit"]=a0=>(_thrd_exit=Module["_thrd_exit"]=wasmExports["thrd_exit"])(a0);var _thrd_join=Module["_thrd_join"]=(a0,a1)=>(_thrd_join=Module["_thrd_join"]=wasmExports["thrd_join"])(a0,a1);var _thrd_sleep=Module["_thrd_sleep"]=(a0,a1)=>(_thrd_sleep=Module["_thrd_sleep"]=wasmExports["thrd_sleep"])(a0,a1);var _thrd_yield=Module["_thrd_yield"]=()=>(_thrd_yield=Module["_thrd_yield"]=wasmExports["thrd_yield"])();var _emscripten_set_thread_name=Module["_emscripten_set_thread_name"]=(a0,a1)=>(_emscripten_set_thread_name=Module["_emscripten_set_thread_name"]=wasmExports["emscripten_set_thread_name"])(a0,a1);var _timespec_get=Module["_timespec_get"]=(a0,a1)=>(_timespec_get=Module["_timespec_get"]=wasmExports["timespec_get"])(a0,a1);var _tmpfile=Module["_tmpfile"]=()=>(_tmpfile=Module["_tmpfile"]=wasmExports["tmpfile"])();var _tmpnam=Module["_tmpnam"]=a0=>(_tmpnam=Module["_tmpnam"]=wasmExports["tmpnam"])(a0);var _toascii=Module["_toascii"]=a0=>(_toascii=Module["_toascii"]=wasmExports["toascii"])(a0);var ___tolower_l=Module["___tolower_l"]=(a0,a1)=>(___tolower_l=Module["___tolower_l"]=wasmExports["__tolower_l"])(a0,a1);var _tolower_l=Module["_tolower_l"]=(a0,a1)=>(_tolower_l=Module["_tolower_l"]=wasmExports["tolower_l"])(a0,a1);var ___toupper_l=Module["___toupper_l"]=(a0,a1)=>(___toupper_l=Module["___toupper_l"]=wasmExports["__toupper_l"])(a0,a1);var _toupper_l=Module["_toupper_l"]=(a0,a1)=>(_toupper_l=Module["_toupper_l"]=wasmExports["toupper_l"])(a0,a1);var ___towupper_l=Module["___towupper_l"]=(a0,a1)=>(___towupper_l=Module["___towupper_l"]=wasmExports["__towupper_l"])(a0,a1);var ___towlower_l=Module["___towlower_l"]=(a0,a1)=>(___towlower_l=Module["___towlower_l"]=wasmExports["__towlower_l"])(a0,a1);var _towupper_l=Module["_towupper_l"]=(a0,a1)=>(_towupper_l=Module["_towupper_l"]=wasmExports["towupper_l"])(a0,a1);var _towlower_l=Module["_towlower_l"]=(a0,a1)=>(_towlower_l=Module["_towlower_l"]=wasmExports["towlower_l"])(a0,a1);var _trunc=Module["_trunc"]=a0=>(_trunc=Module["_trunc"]=wasmExports["trunc"])(a0);var _truncf=Module["_truncf"]=a0=>(_truncf=Module["_truncf"]=wasmExports["truncf"])(a0);var _truncl=Module["_truncl"]=(a0,a1,a2)=>(_truncl=Module["_truncl"]=wasmExports["truncl"])(a0,a1,a2);var _tsearch=Module["_tsearch"]=(a0,a1,a2)=>(_tsearch=Module["_tsearch"]=wasmExports["tsearch"])(a0,a1,a2);var _tss_create=Module["_tss_create"]=(a0,a1)=>(_tss_create=Module["_tss_create"]=wasmExports["tss_create"])(a0,a1);var _tss_delete=Module["_tss_delete"]=a0=>(_tss_delete=Module["_tss_delete"]=wasmExports["tss_delete"])(a0);var _tss_set=Module["_tss_set"]=(a0,a1)=>(_tss_set=Module["_tss_set"]=wasmExports["tss_set"])(a0,a1);var _ttyname=Module["_ttyname"]=a0=>(_ttyname=Module["_ttyname"]=wasmExports["ttyname"])(a0);var _twalk=Module["_twalk"]=(a0,a1)=>(_twalk=Module["_twalk"]=wasmExports["twalk"])(a0,a1);var _ualarm=Module["_ualarm"]=(a0,a1)=>(_ualarm=Module["_ualarm"]=wasmExports["ualarm"])(a0,a1);var _ungetwc=Module["_ungetwc"]=(a0,a1)=>(_ungetwc=Module["_ungetwc"]=wasmExports["ungetwc"])(a0,a1);var ___uselocale=Module["___uselocale"]=a0=>(___uselocale=Module["___uselocale"]=wasmExports["__uselocale"])(a0);var _uselocale=Module["_uselocale"]=a0=>(_uselocale=Module["_uselocale"]=wasmExports["uselocale"])(a0);var _usleep=Module["_usleep"]=a0=>(_usleep=Module["_usleep"]=wasmExports["usleep"])(a0);var _utime=Module["_utime"]=(a0,a1)=>(_utime=Module["_utime"]=wasmExports["utime"])(a0,a1);var _versionsort=Module["_versionsort"]=(a0,a1)=>(_versionsort=Module["_versionsort"]=wasmExports["versionsort"])(a0,a1);var ___vfprintf_internal=Module["___vfprintf_internal"]=(a0,a1,a2,a3,a4)=>(___vfprintf_internal=Module["___vfprintf_internal"]=wasmExports["__vfprintf_internal"])(a0,a1,a2,a3,a4);var ___isoc99_vfscanf=Module["___isoc99_vfscanf"]=(a0,a1,a2)=>(___isoc99_vfscanf=Module["___isoc99_vfscanf"]=wasmExports["__isoc99_vfscanf"])(a0,a1,a2);var _wcsnlen=Module["_wcsnlen"]=(a0,a1)=>(_wcsnlen=Module["_wcsnlen"]=wasmExports["wcsnlen"])(a0,a1);var ___isoc99_vfwscanf=Module["___isoc99_vfwscanf"]=(a0,a1,a2)=>(___isoc99_vfwscanf=Module["___isoc99_vfwscanf"]=wasmExports["__isoc99_vfwscanf"])(a0,a1,a2);var _vprintf=Module["_vprintf"]=(a0,a1)=>(_vprintf=Module["_vprintf"]=wasmExports["vprintf"])(a0,a1);var ___isoc99_vscanf=Module["___isoc99_vscanf"]=(a0,a1)=>(___isoc99_vscanf=Module["___isoc99_vscanf"]=wasmExports["__isoc99_vscanf"])(a0,a1);var _vsniprintf=Module["_vsniprintf"]=(a0,a1,a2,a3)=>(_vsniprintf=Module["_vsniprintf"]=wasmExports["vsniprintf"])(a0,a1,a2,a3);var ___small_vsnprintf=Module["___small_vsnprintf"]=(a0,a1,a2,a3)=>(___small_vsnprintf=Module["___small_vsnprintf"]=wasmExports["__small_vsnprintf"])(a0,a1,a2,a3);var ___isoc99_vsscanf=Module["___isoc99_vsscanf"]=(a0,a1,a2)=>(___isoc99_vsscanf=Module["___isoc99_vsscanf"]=wasmExports["__isoc99_vsscanf"])(a0,a1,a2);var ___isoc99_vswscanf=Module["___isoc99_vswscanf"]=(a0,a1,a2)=>(___isoc99_vswscanf=Module["___isoc99_vswscanf"]=wasmExports["__isoc99_vswscanf"])(a0,a1,a2);var _vwprintf=Module["_vwprintf"]=(a0,a1)=>(_vwprintf=Module["_vwprintf"]=wasmExports["vwprintf"])(a0,a1);var _vwscanf=Module["_vwscanf"]=(a0,a1)=>(_vwscanf=Module["_vwscanf"]=wasmExports["vwscanf"])(a0,a1);var ___isoc99_vwscanf=Module["___isoc99_vwscanf"]=(a0,a1)=>(___isoc99_vwscanf=Module["___isoc99_vwscanf"]=wasmExports["__isoc99_vwscanf"])(a0,a1);var _wcpcpy=Module["_wcpcpy"]=(a0,a1)=>(_wcpcpy=Module["_wcpcpy"]=wasmExports["wcpcpy"])(a0,a1);var _wcpncpy=Module["_wcpncpy"]=(a0,a1,a2)=>(_wcpncpy=Module["_wcpncpy"]=wasmExports["wcpncpy"])(a0,a1,a2);var _wcscasecmp=Module["_wcscasecmp"]=(a0,a1)=>(_wcscasecmp=Module["_wcscasecmp"]=wasmExports["wcscasecmp"])(a0,a1);var _wcsncasecmp=Module["_wcsncasecmp"]=(a0,a1,a2)=>(_wcsncasecmp=Module["_wcsncasecmp"]=wasmExports["wcsncasecmp"])(a0,a1,a2);var _wcscasecmp_l=Module["_wcscasecmp_l"]=(a0,a1,a2)=>(_wcscasecmp_l=Module["_wcscasecmp_l"]=wasmExports["wcscasecmp_l"])(a0,a1,a2);var _wcscat=Module["_wcscat"]=(a0,a1)=>(_wcscat=Module["_wcscat"]=wasmExports["wcscat"])(a0,a1);var ___wcscoll_l=Module["___wcscoll_l"]=(a0,a1,a2)=>(___wcscoll_l=Module["___wcscoll_l"]=wasmExports["__wcscoll_l"])(a0,a1,a2);var _wcscoll_l=Module["_wcscoll_l"]=(a0,a1,a2)=>(_wcscoll_l=Module["_wcscoll_l"]=wasmExports["wcscoll_l"])(a0,a1,a2);var _wcscspn=Module["_wcscspn"]=(a0,a1)=>(_wcscspn=Module["_wcscspn"]=wasmExports["wcscspn"])(a0,a1);var _wcsdup=Module["_wcsdup"]=a0=>(_wcsdup=Module["_wcsdup"]=wasmExports["wcsdup"])(a0);var _wmemcpy=Module["_wmemcpy"]=(a0,a1,a2)=>(_wmemcpy=Module["_wmemcpy"]=wasmExports["wmemcpy"])(a0,a1,a2);var _wcsncasecmp_l=Module["_wcsncasecmp_l"]=(a0,a1,a2,a3)=>(_wcsncasecmp_l=Module["_wcsncasecmp_l"]=wasmExports["wcsncasecmp_l"])(a0,a1,a2,a3);var _wcsncat=Module["_wcsncat"]=(a0,a1,a2)=>(_wcsncat=Module["_wcsncat"]=wasmExports["wcsncat"])(a0,a1,a2);var _wmemset=Module["_wmemset"]=(a0,a1,a2)=>(_wmemset=Module["_wmemset"]=wasmExports["wmemset"])(a0,a1,a2);var _wcsnrtombs=Module["_wcsnrtombs"]=(a0,a1,a2,a3,a4)=>(_wcsnrtombs=Module["_wcsnrtombs"]=wasmExports["wcsnrtombs"])(a0,a1,a2,a3,a4);var _wcspbrk=Module["_wcspbrk"]=(a0,a1)=>(_wcspbrk=Module["_wcspbrk"]=wasmExports["wcspbrk"])(a0,a1);var _wcsspn=Module["_wcsspn"]=(a0,a1)=>(_wcsspn=Module["_wcsspn"]=wasmExports["wcsspn"])(a0,a1);var _wcsstr=Module["_wcsstr"]=(a0,a1)=>(_wcsstr=Module["_wcsstr"]=wasmExports["wcsstr"])(a0,a1);var _wcstof=Module["_wcstof"]=(a0,a1)=>(_wcstof=Module["_wcstof"]=wasmExports["wcstof"])(a0,a1);var _wcstod=Module["_wcstod"]=(a0,a1)=>(_wcstod=Module["_wcstod"]=wasmExports["wcstod"])(a0,a1);var _wcstold=Module["_wcstold"]=(a0,a1,a2)=>(_wcstold=Module["_wcstold"]=wasmExports["wcstold"])(a0,a1,a2);var _wcstoull=Module["_wcstoull"]=(a0,a1,a2)=>(_wcstoull=Module["_wcstoull"]=wasmExports["wcstoull"])(a0,a1,a2);var _wcstoll=Module["_wcstoll"]=(a0,a1,a2)=>(_wcstoll=Module["_wcstoll"]=wasmExports["wcstoll"])(a0,a1,a2);var _wcstoul=Module["_wcstoul"]=(a0,a1,a2)=>(_wcstoul=Module["_wcstoul"]=wasmExports["wcstoul"])(a0,a1,a2);var _wcstoimax=Module["_wcstoimax"]=(a0,a1,a2)=>(_wcstoimax=Module["_wcstoimax"]=wasmExports["wcstoimax"])(a0,a1,a2);var _wcstoumax=Module["_wcstoumax"]=(a0,a1,a2)=>(_wcstoumax=Module["_wcstoumax"]=wasmExports["wcstoumax"])(a0,a1,a2);var _wcswcs=Module["_wcswcs"]=(a0,a1)=>(_wcswcs=Module["_wcswcs"]=wasmExports["wcswcs"])(a0,a1);var _wcswidth=Module["_wcswidth"]=(a0,a1)=>(_wcswidth=Module["_wcswidth"]=wasmExports["wcswidth"])(a0,a1);var _wcwidth=Module["_wcwidth"]=a0=>(_wcwidth=Module["_wcwidth"]=wasmExports["wcwidth"])(a0);var ___wcsxfrm_l=Module["___wcsxfrm_l"]=(a0,a1,a2,a3)=>(___wcsxfrm_l=Module["___wcsxfrm_l"]=wasmExports["__wcsxfrm_l"])(a0,a1,a2,a3);var _wcsxfrm_l=Module["_wcsxfrm_l"]=(a0,a1,a2,a3)=>(_wcsxfrm_l=Module["_wcsxfrm_l"]=wasmExports["wcsxfrm_l"])(a0,a1,a2,a3);var _wctob=Module["_wctob"]=a0=>(_wctob=Module["_wctob"]=wasmExports["wctob"])(a0);var _wctrans=Module["_wctrans"]=a0=>(_wctrans=Module["_wctrans"]=wasmExports["wctrans"])(a0);var _towctrans=Module["_towctrans"]=(a0,a1)=>(_towctrans=Module["_towctrans"]=wasmExports["towctrans"])(a0,a1);var ___wctrans_l=Module["___wctrans_l"]=(a0,a1)=>(___wctrans_l=Module["___wctrans_l"]=wasmExports["__wctrans_l"])(a0,a1);var ___towctrans_l=Module["___towctrans_l"]=(a0,a1,a2)=>(___towctrans_l=Module["___towctrans_l"]=wasmExports["__towctrans_l"])(a0,a1,a2);var _wctrans_l=Module["_wctrans_l"]=(a0,a1)=>(_wctrans_l=Module["_wctrans_l"]=wasmExports["wctrans_l"])(a0,a1);var _towctrans_l=Module["_towctrans_l"]=(a0,a1,a2)=>(_towctrans_l=Module["_towctrans_l"]=wasmExports["towctrans_l"])(a0,a1,a2);var _wmemmove=Module["_wmemmove"]=(a0,a1,a2)=>(_wmemmove=Module["_wmemmove"]=wasmExports["wmemmove"])(a0,a1,a2);var _wprintf=Module["_wprintf"]=(a0,a1)=>(_wprintf=Module["_wprintf"]=wasmExports["wprintf"])(a0,a1);var _wscanf=Module["_wscanf"]=(a0,a1)=>(_wscanf=Module["_wscanf"]=wasmExports["wscanf"])(a0,a1);var ___isoc99_wscanf=Module["___isoc99_wscanf"]=(a0,a1)=>(___isoc99_wscanf=Module["___isoc99_wscanf"]=wasmExports["__isoc99_wscanf"])(a0,a1);var ___libc_realloc=Module["___libc_realloc"]=(a0,a1)=>(___libc_realloc=Module["___libc_realloc"]=wasmExports["__libc_realloc"])(a0,a1);var _realloc_in_place=Module["_realloc_in_place"]=(a0,a1)=>(_realloc_in_place=Module["_realloc_in_place"]=wasmExports["realloc_in_place"])(a0,a1);var _memalign=Module["_memalign"]=(a0,a1)=>(_memalign=Module["_memalign"]=wasmExports["memalign"])(a0,a1);var _valloc=Module["_valloc"]=a0=>(_valloc=Module["_valloc"]=wasmExports["valloc"])(a0);var _pvalloc=Module["_pvalloc"]=a0=>(_pvalloc=Module["_pvalloc"]=wasmExports["pvalloc"])(a0);var _mallinfo=Module["_mallinfo"]=a0=>(_mallinfo=Module["_mallinfo"]=wasmExports["mallinfo"])(a0);var _mallopt=Module["_mallopt"]=(a0,a1)=>(_mallopt=Module["_mallopt"]=wasmExports["mallopt"])(a0,a1);var _malloc_trim=Module["_malloc_trim"]=a0=>(_malloc_trim=Module["_malloc_trim"]=wasmExports["malloc_trim"])(a0);var _malloc_usable_size=Module["_malloc_usable_size"]=a0=>(_malloc_usable_size=Module["_malloc_usable_size"]=wasmExports["malloc_usable_size"])(a0);var _malloc_footprint=Module["_malloc_footprint"]=()=>(_malloc_footprint=Module["_malloc_footprint"]=wasmExports["malloc_footprint"])();var _malloc_max_footprint=Module["_malloc_max_footprint"]=()=>(_malloc_max_footprint=Module["_malloc_max_footprint"]=wasmExports["malloc_max_footprint"])();var _malloc_footprint_limit=Module["_malloc_footprint_limit"]=()=>(_malloc_footprint_limit=Module["_malloc_footprint_limit"]=wasmExports["malloc_footprint_limit"])();var _malloc_set_footprint_limit=Module["_malloc_set_footprint_limit"]=a0=>(_malloc_set_footprint_limit=Module["_malloc_set_footprint_limit"]=wasmExports["malloc_set_footprint_limit"])(a0);var _independent_calloc=Module["_independent_calloc"]=(a0,a1,a2)=>(_independent_calloc=Module["_independent_calloc"]=wasmExports["independent_calloc"])(a0,a1,a2);var _independent_comalloc=Module["_independent_comalloc"]=(a0,a1,a2)=>(_independent_comalloc=Module["_independent_comalloc"]=wasmExports["independent_comalloc"])(a0,a1,a2);var _bulk_free=Module["_bulk_free"]=(a0,a1)=>(_bulk_free=Module["_bulk_free"]=wasmExports["bulk_free"])(a0,a1);var ___trap=Module["___trap"]=()=>(___trap=Module["___trap"]=wasmExports["__trap"])();var ___absvdi2=Module["___absvdi2"]=a0=>(___absvdi2=Module["___absvdi2"]=wasmExports["__absvdi2"])(a0);var ___absvsi2=Module["___absvsi2"]=a0=>(___absvsi2=Module["___absvsi2"]=wasmExports["__absvsi2"])(a0);var ___absvti2=Module["___absvti2"]=(a0,a1,a2)=>(___absvti2=Module["___absvti2"]=wasmExports["__absvti2"])(a0,a1,a2);var ___adddf3=Module["___adddf3"]=(a0,a1)=>(___adddf3=Module["___adddf3"]=wasmExports["__adddf3"])(a0,a1);var ___fe_getround=Module["___fe_getround"]=()=>(___fe_getround=Module["___fe_getround"]=wasmExports["__fe_getround"])();var ___fe_raise_inexact=Module["___fe_raise_inexact"]=()=>(___fe_raise_inexact=Module["___fe_raise_inexact"]=wasmExports["__fe_raise_inexact"])();var ___addsf3=Module["___addsf3"]=(a0,a1)=>(___addsf3=Module["___addsf3"]=wasmExports["__addsf3"])(a0,a1);var ___ashlti3=Module["___ashlti3"]=(a0,a1,a2,a3)=>(___ashlti3=Module["___ashlti3"]=wasmExports["__ashlti3"])(a0,a1,a2,a3);var ___lshrti3=Module["___lshrti3"]=(a0,a1,a2,a3)=>(___lshrti3=Module["___lshrti3"]=wasmExports["__lshrti3"])(a0,a1,a2,a3);var ___addvdi3=Module["___addvdi3"]=(a0,a1)=>(___addvdi3=Module["___addvdi3"]=wasmExports["__addvdi3"])(a0,a1);var ___addvsi3=Module["___addvsi3"]=(a0,a1)=>(___addvsi3=Module["___addvsi3"]=wasmExports["__addvsi3"])(a0,a1);var ___addvti3=Module["___addvti3"]=(a0,a1,a2,a3,a4)=>(___addvti3=Module["___addvti3"]=wasmExports["__addvti3"])(a0,a1,a2,a3,a4);var ___ashldi3=Module["___ashldi3"]=(a0,a1)=>(___ashldi3=Module["___ashldi3"]=wasmExports["__ashldi3"])(a0,a1);var ___ashrdi3=Module["___ashrdi3"]=(a0,a1)=>(___ashrdi3=Module["___ashrdi3"]=wasmExports["__ashrdi3"])(a0,a1);var ___ashrti3=Module["___ashrti3"]=(a0,a1,a2,a3)=>(___ashrti3=Module["___ashrti3"]=wasmExports["__ashrti3"])(a0,a1,a2,a3);var ___atomic_is_lock_free=Module["___atomic_is_lock_free"]=(a0,a1)=>(___atomic_is_lock_free=Module["___atomic_is_lock_free"]=wasmExports["__atomic_is_lock_free"])(a0,a1);var ___atomic_load=Module["___atomic_load"]=(a0,a1,a2,a3)=>(___atomic_load=Module["___atomic_load"]=wasmExports["__atomic_load"])(a0,a1,a2,a3);var ___atomic_store=Module["___atomic_store"]=(a0,a1,a2,a3)=>(___atomic_store=Module["___atomic_store"]=wasmExports["__atomic_store"])(a0,a1,a2,a3);var ___atomic_compare_exchange=Module["___atomic_compare_exchange"]=(a0,a1,a2,a3,a4,a5)=>(___atomic_compare_exchange=Module["___atomic_compare_exchange"]=wasmExports["__atomic_compare_exchange"])(a0,a1,a2,a3,a4,a5);var ___atomic_exchange=Module["___atomic_exchange"]=(a0,a1,a2,a3,a4)=>(___atomic_exchange=Module["___atomic_exchange"]=wasmExports["__atomic_exchange"])(a0,a1,a2,a3,a4);var ___atomic_load_1=Module["___atomic_load_1"]=(a0,a1)=>(___atomic_load_1=Module["___atomic_load_1"]=wasmExports["__atomic_load_1"])(a0,a1);var ___atomic_load_2=Module["___atomic_load_2"]=(a0,a1)=>(___atomic_load_2=Module["___atomic_load_2"]=wasmExports["__atomic_load_2"])(a0,a1);var ___atomic_load_4=Module["___atomic_load_4"]=(a0,a1)=>(___atomic_load_4=Module["___atomic_load_4"]=wasmExports["__atomic_load_4"])(a0,a1);var ___atomic_load_8=Module["___atomic_load_8"]=(a0,a1)=>(___atomic_load_8=Module["___atomic_load_8"]=wasmExports["__atomic_load_8"])(a0,a1);var ___atomic_load_16=Module["___atomic_load_16"]=(a0,a1,a2)=>(___atomic_load_16=Module["___atomic_load_16"]=wasmExports["__atomic_load_16"])(a0,a1,a2);var ___atomic_store_1=Module["___atomic_store_1"]=(a0,a1,a2)=>(___atomic_store_1=Module["___atomic_store_1"]=wasmExports["__atomic_store_1"])(a0,a1,a2);var ___atomic_store_2=Module["___atomic_store_2"]=(a0,a1,a2)=>(___atomic_store_2=Module["___atomic_store_2"]=wasmExports["__atomic_store_2"])(a0,a1,a2);var ___atomic_store_4=Module["___atomic_store_4"]=(a0,a1,a2)=>(___atomic_store_4=Module["___atomic_store_4"]=wasmExports["__atomic_store_4"])(a0,a1,a2);var ___atomic_store_8=Module["___atomic_store_8"]=(a0,a1,a2)=>(___atomic_store_8=Module["___atomic_store_8"]=wasmExports["__atomic_store_8"])(a0,a1,a2);var ___atomic_store_16=Module["___atomic_store_16"]=(a0,a1,a2,a3)=>(___atomic_store_16=Module["___atomic_store_16"]=wasmExports["__atomic_store_16"])(a0,a1,a2,a3);var ___atomic_exchange_1=Module["___atomic_exchange_1"]=(a0,a1,a2)=>(___atomic_exchange_1=Module["___atomic_exchange_1"]=wasmExports["__atomic_exchange_1"])(a0,a1,a2);var ___atomic_exchange_2=Module["___atomic_exchange_2"]=(a0,a1,a2)=>(___atomic_exchange_2=Module["___atomic_exchange_2"]=wasmExports["__atomic_exchange_2"])(a0,a1,a2);var ___atomic_exchange_4=Module["___atomic_exchange_4"]=(a0,a1,a2)=>(___atomic_exchange_4=Module["___atomic_exchange_4"]=wasmExports["__atomic_exchange_4"])(a0,a1,a2);var ___atomic_exchange_8=Module["___atomic_exchange_8"]=(a0,a1,a2)=>(___atomic_exchange_8=Module["___atomic_exchange_8"]=wasmExports["__atomic_exchange_8"])(a0,a1,a2);var ___atomic_exchange_16=Module["___atomic_exchange_16"]=(a0,a1,a2,a3,a4)=>(___atomic_exchange_16=Module["___atomic_exchange_16"]=wasmExports["__atomic_exchange_16"])(a0,a1,a2,a3,a4);var ___atomic_compare_exchange_1=Module["___atomic_compare_exchange_1"]=(a0,a1,a2,a3,a4)=>(___atomic_compare_exchange_1=Module["___atomic_compare_exchange_1"]=wasmExports["__atomic_compare_exchange_1"])(a0,a1,a2,a3,a4);var ___atomic_compare_exchange_2=Module["___atomic_compare_exchange_2"]=(a0,a1,a2,a3,a4)=>(___atomic_compare_exchange_2=Module["___atomic_compare_exchange_2"]=wasmExports["__atomic_compare_exchange_2"])(a0,a1,a2,a3,a4);var ___atomic_compare_exchange_4=Module["___atomic_compare_exchange_4"]=(a0,a1,a2,a3,a4)=>(___atomic_compare_exchange_4=Module["___atomic_compare_exchange_4"]=wasmExports["__atomic_compare_exchange_4"])(a0,a1,a2,a3,a4);var ___atomic_compare_exchange_8=Module["___atomic_compare_exchange_8"]=(a0,a1,a2,a3,a4)=>(___atomic_compare_exchange_8=Module["___atomic_compare_exchange_8"]=wasmExports["__atomic_compare_exchange_8"])(a0,a1,a2,a3,a4);var ___atomic_compare_exchange_16=Module["___atomic_compare_exchange_16"]=(a0,a1,a2,a3,a4,a5)=>(___atomic_compare_exchange_16=Module["___atomic_compare_exchange_16"]=wasmExports["__atomic_compare_exchange_16"])(a0,a1,a2,a3,a4,a5);var ___atomic_fetch_add_1=Module["___atomic_fetch_add_1"]=(a0,a1,a2)=>(___atomic_fetch_add_1=Module["___atomic_fetch_add_1"]=wasmExports["__atomic_fetch_add_1"])(a0,a1,a2);var ___atomic_fetch_add_2=Module["___atomic_fetch_add_2"]=(a0,a1,a2)=>(___atomic_fetch_add_2=Module["___atomic_fetch_add_2"]=wasmExports["__atomic_fetch_add_2"])(a0,a1,a2);var ___atomic_fetch_add_4=Module["___atomic_fetch_add_4"]=(a0,a1,a2)=>(___atomic_fetch_add_4=Module["___atomic_fetch_add_4"]=wasmExports["__atomic_fetch_add_4"])(a0,a1,a2);var ___atomic_fetch_add_8=Module["___atomic_fetch_add_8"]=(a0,a1,a2)=>(___atomic_fetch_add_8=Module["___atomic_fetch_add_8"]=wasmExports["__atomic_fetch_add_8"])(a0,a1,a2);var ___atomic_fetch_add_16=Module["___atomic_fetch_add_16"]=(a0,a1,a2,a3,a4)=>(___atomic_fetch_add_16=Module["___atomic_fetch_add_16"]=wasmExports["__atomic_fetch_add_16"])(a0,a1,a2,a3,a4);var ___atomic_fetch_sub_1=Module["___atomic_fetch_sub_1"]=(a0,a1,a2)=>(___atomic_fetch_sub_1=Module["___atomic_fetch_sub_1"]=wasmExports["__atomic_fetch_sub_1"])(a0,a1,a2);var ___atomic_fetch_sub_2=Module["___atomic_fetch_sub_2"]=(a0,a1,a2)=>(___atomic_fetch_sub_2=Module["___atomic_fetch_sub_2"]=wasmExports["__atomic_fetch_sub_2"])(a0,a1,a2);var ___atomic_fetch_sub_4=Module["___atomic_fetch_sub_4"]=(a0,a1,a2)=>(___atomic_fetch_sub_4=Module["___atomic_fetch_sub_4"]=wasmExports["__atomic_fetch_sub_4"])(a0,a1,a2);var ___atomic_fetch_sub_8=Module["___atomic_fetch_sub_8"]=(a0,a1,a2)=>(___atomic_fetch_sub_8=Module["___atomic_fetch_sub_8"]=wasmExports["__atomic_fetch_sub_8"])(a0,a1,a2);var ___atomic_fetch_sub_16=Module["___atomic_fetch_sub_16"]=(a0,a1,a2,a3,a4)=>(___atomic_fetch_sub_16=Module["___atomic_fetch_sub_16"]=wasmExports["__atomic_fetch_sub_16"])(a0,a1,a2,a3,a4);var ___atomic_fetch_and_1=Module["___atomic_fetch_and_1"]=(a0,a1,a2)=>(___atomic_fetch_and_1=Module["___atomic_fetch_and_1"]=wasmExports["__atomic_fetch_and_1"])(a0,a1,a2);var ___atomic_fetch_and_2=Module["___atomic_fetch_and_2"]=(a0,a1,a2)=>(___atomic_fetch_and_2=Module["___atomic_fetch_and_2"]=wasmExports["__atomic_fetch_and_2"])(a0,a1,a2);var ___atomic_fetch_and_4=Module["___atomic_fetch_and_4"]=(a0,a1,a2)=>(___atomic_fetch_and_4=Module["___atomic_fetch_and_4"]=wasmExports["__atomic_fetch_and_4"])(a0,a1,a2);var ___atomic_fetch_and_8=Module["___atomic_fetch_and_8"]=(a0,a1,a2)=>(___atomic_fetch_and_8=Module["___atomic_fetch_and_8"]=wasmExports["__atomic_fetch_and_8"])(a0,a1,a2);var ___atomic_fetch_and_16=Module["___atomic_fetch_and_16"]=(a0,a1,a2,a3,a4)=>(___atomic_fetch_and_16=Module["___atomic_fetch_and_16"]=wasmExports["__atomic_fetch_and_16"])(a0,a1,a2,a3,a4);var ___atomic_fetch_or_1=Module["___atomic_fetch_or_1"]=(a0,a1,a2)=>(___atomic_fetch_or_1=Module["___atomic_fetch_or_1"]=wasmExports["__atomic_fetch_or_1"])(a0,a1,a2);var ___atomic_fetch_or_2=Module["___atomic_fetch_or_2"]=(a0,a1,a2)=>(___atomic_fetch_or_2=Module["___atomic_fetch_or_2"]=wasmExports["__atomic_fetch_or_2"])(a0,a1,a2);var ___atomic_fetch_or_4=Module["___atomic_fetch_or_4"]=(a0,a1,a2)=>(___atomic_fetch_or_4=Module["___atomic_fetch_or_4"]=wasmExports["__atomic_fetch_or_4"])(a0,a1,a2);var ___atomic_fetch_or_8=Module["___atomic_fetch_or_8"]=(a0,a1,a2)=>(___atomic_fetch_or_8=Module["___atomic_fetch_or_8"]=wasmExports["__atomic_fetch_or_8"])(a0,a1,a2);var ___atomic_fetch_or_16=Module["___atomic_fetch_or_16"]=(a0,a1,a2,a3,a4)=>(___atomic_fetch_or_16=Module["___atomic_fetch_or_16"]=wasmExports["__atomic_fetch_or_16"])(a0,a1,a2,a3,a4);var ___atomic_fetch_xor_1=Module["___atomic_fetch_xor_1"]=(a0,a1,a2)=>(___atomic_fetch_xor_1=Module["___atomic_fetch_xor_1"]=wasmExports["__atomic_fetch_xor_1"])(a0,a1,a2);var ___atomic_fetch_xor_2=Module["___atomic_fetch_xor_2"]=(a0,a1,a2)=>(___atomic_fetch_xor_2=Module["___atomic_fetch_xor_2"]=wasmExports["__atomic_fetch_xor_2"])(a0,a1,a2);var ___atomic_fetch_xor_4=Module["___atomic_fetch_xor_4"]=(a0,a1,a2)=>(___atomic_fetch_xor_4=Module["___atomic_fetch_xor_4"]=wasmExports["__atomic_fetch_xor_4"])(a0,a1,a2);var ___atomic_fetch_xor_8=Module["___atomic_fetch_xor_8"]=(a0,a1,a2)=>(___atomic_fetch_xor_8=Module["___atomic_fetch_xor_8"]=wasmExports["__atomic_fetch_xor_8"])(a0,a1,a2);var ___atomic_fetch_xor_16=Module["___atomic_fetch_xor_16"]=(a0,a1,a2,a3,a4)=>(___atomic_fetch_xor_16=Module["___atomic_fetch_xor_16"]=wasmExports["__atomic_fetch_xor_16"])(a0,a1,a2,a3,a4);var ___atomic_fetch_nand_1=Module["___atomic_fetch_nand_1"]=(a0,a1,a2)=>(___atomic_fetch_nand_1=Module["___atomic_fetch_nand_1"]=wasmExports["__atomic_fetch_nand_1"])(a0,a1,a2);var ___atomic_fetch_nand_2=Module["___atomic_fetch_nand_2"]=(a0,a1,a2)=>(___atomic_fetch_nand_2=Module["___atomic_fetch_nand_2"]=wasmExports["__atomic_fetch_nand_2"])(a0,a1,a2);var ___atomic_fetch_nand_4=Module["___atomic_fetch_nand_4"]=(a0,a1,a2)=>(___atomic_fetch_nand_4=Module["___atomic_fetch_nand_4"]=wasmExports["__atomic_fetch_nand_4"])(a0,a1,a2);var ___atomic_fetch_nand_8=Module["___atomic_fetch_nand_8"]=(a0,a1,a2)=>(___atomic_fetch_nand_8=Module["___atomic_fetch_nand_8"]=wasmExports["__atomic_fetch_nand_8"])(a0,a1,a2);var ___atomic_fetch_nand_16=Module["___atomic_fetch_nand_16"]=(a0,a1,a2,a3,a4)=>(___atomic_fetch_nand_16=Module["___atomic_fetch_nand_16"]=wasmExports["__atomic_fetch_nand_16"])(a0,a1,a2,a3,a4);var _atomic_flag_clear=Module["_atomic_flag_clear"]=a0=>(_atomic_flag_clear=Module["_atomic_flag_clear"]=wasmExports["atomic_flag_clear"])(a0);var _atomic_flag_clear_explicit=Module["_atomic_flag_clear_explicit"]=(a0,a1)=>(_atomic_flag_clear_explicit=Module["_atomic_flag_clear_explicit"]=wasmExports["atomic_flag_clear_explicit"])(a0,a1);var _atomic_flag_test_and_set=Module["_atomic_flag_test_and_set"]=a0=>(_atomic_flag_test_and_set=Module["_atomic_flag_test_and_set"]=wasmExports["atomic_flag_test_and_set"])(a0);var _atomic_flag_test_and_set_explicit=Module["_atomic_flag_test_and_set_explicit"]=(a0,a1)=>(_atomic_flag_test_and_set_explicit=Module["_atomic_flag_test_and_set_explicit"]=wasmExports["atomic_flag_test_and_set_explicit"])(a0,a1);var _atomic_signal_fence=Module["_atomic_signal_fence"]=a0=>(_atomic_signal_fence=Module["_atomic_signal_fence"]=wasmExports["atomic_signal_fence"])(a0);var _atomic_thread_fence=Module["_atomic_thread_fence"]=a0=>(_atomic_thread_fence=Module["_atomic_thread_fence"]=wasmExports["atomic_thread_fence"])(a0);var ___bswapdi2=Module["___bswapdi2"]=a0=>(___bswapdi2=Module["___bswapdi2"]=wasmExports["__bswapdi2"])(a0);var ___bswapsi2=Module["___bswapsi2"]=a0=>(___bswapsi2=Module["___bswapsi2"]=wasmExports["__bswapsi2"])(a0);var ___clear_cache=Module["___clear_cache"]=(a0,a1)=>(___clear_cache=Module["___clear_cache"]=wasmExports["__clear_cache"])(a0,a1);var ___clzdi2=Module["___clzdi2"]=a0=>(___clzdi2=Module["___clzdi2"]=wasmExports["__clzdi2"])(a0);var ___clzsi2=Module["___clzsi2"]=a0=>(___clzsi2=Module["___clzsi2"]=wasmExports["__clzsi2"])(a0);var ___clzti2=Module["___clzti2"]=(a0,a1)=>(___clzti2=Module["___clzti2"]=wasmExports["__clzti2"])(a0,a1);var ___cmpdi2=Module["___cmpdi2"]=(a0,a1)=>(___cmpdi2=Module["___cmpdi2"]=wasmExports["__cmpdi2"])(a0,a1);var ___cmpti2=Module["___cmpti2"]=(a0,a1,a2,a3)=>(___cmpti2=Module["___cmpti2"]=wasmExports["__cmpti2"])(a0,a1,a2,a3);var ___ledf2=Module["___ledf2"]=(a0,a1)=>(___ledf2=Module["___ledf2"]=wasmExports["__ledf2"])(a0,a1);var ___gedf2=Module["___gedf2"]=(a0,a1)=>(___gedf2=Module["___gedf2"]=wasmExports["__gedf2"])(a0,a1);var ___unorddf2=Module["___unorddf2"]=(a0,a1)=>(___unorddf2=Module["___unorddf2"]=wasmExports["__unorddf2"])(a0,a1);var ___eqdf2=Module["___eqdf2"]=(a0,a1)=>(___eqdf2=Module["___eqdf2"]=wasmExports["__eqdf2"])(a0,a1);var ___ltdf2=Module["___ltdf2"]=(a0,a1)=>(___ltdf2=Module["___ltdf2"]=wasmExports["__ltdf2"])(a0,a1);var ___nedf2=Module["___nedf2"]=(a0,a1)=>(___nedf2=Module["___nedf2"]=wasmExports["__nedf2"])(a0,a1);var ___gtdf2=Module["___gtdf2"]=(a0,a1)=>(___gtdf2=Module["___gtdf2"]=wasmExports["__gtdf2"])(a0,a1);var ___lesf2=Module["___lesf2"]=(a0,a1)=>(___lesf2=Module["___lesf2"]=wasmExports["__lesf2"])(a0,a1);var ___gesf2=Module["___gesf2"]=(a0,a1)=>(___gesf2=Module["___gesf2"]=wasmExports["__gesf2"])(a0,a1);var ___unordsf2=Module["___unordsf2"]=(a0,a1)=>(___unordsf2=Module["___unordsf2"]=wasmExports["__unordsf2"])(a0,a1);var ___eqsf2=Module["___eqsf2"]=(a0,a1)=>(___eqsf2=Module["___eqsf2"]=wasmExports["__eqsf2"])(a0,a1);var ___ltsf2=Module["___ltsf2"]=(a0,a1)=>(___ltsf2=Module["___ltsf2"]=wasmExports["__ltsf2"])(a0,a1);var ___nesf2=Module["___nesf2"]=(a0,a1)=>(___nesf2=Module["___nesf2"]=wasmExports["__nesf2"])(a0,a1);var ___gtsf2=Module["___gtsf2"]=(a0,a1)=>(___gtsf2=Module["___gtsf2"]=wasmExports["__gtsf2"])(a0,a1);var ___ctzdi2=Module["___ctzdi2"]=a0=>(___ctzdi2=Module["___ctzdi2"]=wasmExports["__ctzdi2"])(a0);var ___ctzsi2=Module["___ctzsi2"]=a0=>(___ctzsi2=Module["___ctzsi2"]=wasmExports["__ctzsi2"])(a0);var ___ctzti2=Module["___ctzti2"]=(a0,a1)=>(___ctzti2=Module["___ctzti2"]=wasmExports["__ctzti2"])(a0,a1);var ___divdc3=Module["___divdc3"]=(a0,a1,a2,a3,a4)=>(___divdc3=Module["___divdc3"]=wasmExports["__divdc3"])(a0,a1,a2,a3,a4);var ___divdf3=Module["___divdf3"]=(a0,a1)=>(___divdf3=Module["___divdf3"]=wasmExports["__divdf3"])(a0,a1);var ___divdi3=Module["___divdi3"]=(a0,a1)=>(___divdi3=Module["___divdi3"]=wasmExports["__divdi3"])(a0,a1);var ___udivmoddi4=Module["___udivmoddi4"]=(a0,a1,a2)=>(___udivmoddi4=Module["___udivmoddi4"]=wasmExports["__udivmoddi4"])(a0,a1,a2);var ___divmoddi4=Module["___divmoddi4"]=(a0,a1,a2)=>(___divmoddi4=Module["___divmoddi4"]=wasmExports["__divmoddi4"])(a0,a1,a2);var ___divmodsi4=Module["___divmodsi4"]=(a0,a1,a2)=>(___divmodsi4=Module["___divmodsi4"]=wasmExports["__divmodsi4"])(a0,a1,a2);var ___udivmodsi4=Module["___udivmodsi4"]=(a0,a1,a2)=>(___udivmodsi4=Module["___udivmodsi4"]=wasmExports["__udivmodsi4"])(a0,a1,a2);var ___divmodti4=Module["___divmodti4"]=(a0,a1,a2,a3,a4,a5)=>(___divmodti4=Module["___divmodti4"]=wasmExports["__divmodti4"])(a0,a1,a2,a3,a4,a5);var ___udivmodti4=Module["___udivmodti4"]=(a0,a1,a2,a3,a4,a5)=>(___udivmodti4=Module["___udivmodti4"]=wasmExports["__udivmodti4"])(a0,a1,a2,a3,a4,a5);var ___divsc3=Module["___divsc3"]=(a0,a1,a2,a3,a4)=>(___divsc3=Module["___divsc3"]=wasmExports["__divsc3"])(a0,a1,a2,a3,a4);var ___divsf3=Module["___divsf3"]=(a0,a1)=>(___divsf3=Module["___divsf3"]=wasmExports["__divsf3"])(a0,a1);var ___divsi3=Module["___divsi3"]=(a0,a1)=>(___divsi3=Module["___divsi3"]=wasmExports["__divsi3"])(a0,a1);var ___divtc3=Module["___divtc3"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8)=>(___divtc3=Module["___divtc3"]=wasmExports["__divtc3"])(a0,a1,a2,a3,a4,a5,a6,a7,a8);var ___divti3=Module["___divti3"]=(a0,a1,a2,a3,a4)=>(___divti3=Module["___divti3"]=wasmExports["__divti3"])(a0,a1,a2,a3,a4);var _setThrew=(a0,a1)=>(_setThrew=wasmExports["setThrew"])(a0,a1);var ___wasm_setjmp=Module["___wasm_setjmp"]=(a0,a1,a2)=>(___wasm_setjmp=Module["___wasm_setjmp"]=wasmExports["__wasm_setjmp"])(a0,a1,a2);var ___wasm_setjmp_test=Module["___wasm_setjmp_test"]=(a0,a1)=>(___wasm_setjmp_test=Module["___wasm_setjmp_test"]=wasmExports["__wasm_setjmp_test"])(a0,a1);var _emscripten_longjmp=Module["_emscripten_longjmp"]=(a0,a1)=>(_emscripten_longjmp=Module["_emscripten_longjmp"]=wasmExports["emscripten_longjmp"])(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=Module["___get_temp_ret"]=()=>(___get_temp_ret=Module["___get_temp_ret"]=wasmExports["__get_temp_ret"])();var ___set_temp_ret=Module["___set_temp_ret"]=a0=>(___set_temp_ret=Module["___set_temp_ret"]=wasmExports["__set_temp_ret"])(a0);var _getTempRet0=Module["_getTempRet0"]=()=>(_getTempRet0=Module["_getTempRet0"]=wasmExports["getTempRet0"])();var _setTempRet0=Module["_setTempRet0"]=a0=>(_setTempRet0=Module["_setTempRet0"]=wasmExports["setTempRet0"])(a0);var ___emutls_get_address=Module["___emutls_get_address"]=a0=>(___emutls_get_address=Module["___emutls_get_address"]=wasmExports["__emutls_get_address"])(a0);var ___enable_execute_stack=Module["___enable_execute_stack"]=a0=>(___enable_execute_stack=Module["___enable_execute_stack"]=wasmExports["__enable_execute_stack"])(a0);var ___extendhfsf2=Module["___extendhfsf2"]=a0=>(___extendhfsf2=Module["___extendhfsf2"]=wasmExports["__extendhfsf2"])(a0);var ___gnu_h2f_ieee=Module["___gnu_h2f_ieee"]=a0=>(___gnu_h2f_ieee=Module["___gnu_h2f_ieee"]=wasmExports["__gnu_h2f_ieee"])(a0);var ___extendsfdf2=Module["___extendsfdf2"]=a0=>(___extendsfdf2=Module["___extendsfdf2"]=wasmExports["__extendsfdf2"])(a0);var ___ffsdi2=Module["___ffsdi2"]=a0=>(___ffsdi2=Module["___ffsdi2"]=wasmExports["__ffsdi2"])(a0);var ___ffssi2=Module["___ffssi2"]=a0=>(___ffssi2=Module["___ffssi2"]=wasmExports["__ffssi2"])(a0);var ___ffsti2=Module["___ffsti2"]=(a0,a1)=>(___ffsti2=Module["___ffsti2"]=wasmExports["__ffsti2"])(a0,a1);var ___fixdfdi=Module["___fixdfdi"]=a0=>(___fixdfdi=Module["___fixdfdi"]=wasmExports["__fixdfdi"])(a0);var ___fixunsdfdi=Module["___fixunsdfdi"]=a0=>(___fixunsdfdi=Module["___fixunsdfdi"]=wasmExports["__fixunsdfdi"])(a0);var ___fixdfsi=Module["___fixdfsi"]=a0=>(___fixdfsi=Module["___fixdfsi"]=wasmExports["__fixdfsi"])(a0);var ___fixdfti=Module["___fixdfti"]=(a0,a1)=>(___fixdfti=Module["___fixdfti"]=wasmExports["__fixdfti"])(a0,a1);var ___fixsfdi=Module["___fixsfdi"]=a0=>(___fixsfdi=Module["___fixsfdi"]=wasmExports["__fixsfdi"])(a0);var ___fixunssfdi=Module["___fixunssfdi"]=a0=>(___fixunssfdi=Module["___fixunssfdi"]=wasmExports["__fixunssfdi"])(a0);var ___fixsfsi=Module["___fixsfsi"]=a0=>(___fixsfsi=Module["___fixsfsi"]=wasmExports["__fixsfsi"])(a0);var ___fixsfti=Module["___fixsfti"]=(a0,a1)=>(___fixsfti=Module["___fixsfti"]=wasmExports["__fixsfti"])(a0,a1);var ___fixtfti=Module["___fixtfti"]=(a0,a1,a2)=>(___fixtfti=Module["___fixtfti"]=wasmExports["__fixtfti"])(a0,a1,a2);var ___fixunsdfsi=Module["___fixunsdfsi"]=a0=>(___fixunsdfsi=Module["___fixunsdfsi"]=wasmExports["__fixunsdfsi"])(a0);var ___fixunsdfti=Module["___fixunsdfti"]=(a0,a1)=>(___fixunsdfti=Module["___fixunsdfti"]=wasmExports["__fixunsdfti"])(a0,a1);var ___fixunssfsi=Module["___fixunssfsi"]=a0=>(___fixunssfsi=Module["___fixunssfsi"]=wasmExports["__fixunssfsi"])(a0);var ___fixunssfti=Module["___fixunssfti"]=(a0,a1)=>(___fixunssfti=Module["___fixunssfti"]=wasmExports["__fixunssfti"])(a0,a1);var ___fixunstfdi=Module["___fixunstfdi"]=(a0,a1)=>(___fixunstfdi=Module["___fixunstfdi"]=wasmExports["__fixunstfdi"])(a0,a1);var ___fixunstfsi=Module["___fixunstfsi"]=(a0,a1)=>(___fixunstfsi=Module["___fixunstfsi"]=wasmExports["__fixunstfsi"])(a0,a1);var ___fixunstfti=Module["___fixunstfti"]=(a0,a1,a2)=>(___fixunstfti=Module["___fixunstfti"]=wasmExports["__fixunstfti"])(a0,a1,a2);var ___floatdidf=Module["___floatdidf"]=a0=>(___floatdidf=Module["___floatdidf"]=wasmExports["__floatdidf"])(a0);var ___floatdisf=Module["___floatdisf"]=a0=>(___floatdisf=Module["___floatdisf"]=wasmExports["__floatdisf"])(a0);var ___floatditf=Module["___floatditf"]=(a0,a1)=>(___floatditf=Module["___floatditf"]=wasmExports["__floatditf"])(a0,a1);var ___floatsidf=Module["___floatsidf"]=a0=>(___floatsidf=Module["___floatsidf"]=wasmExports["__floatsidf"])(a0);var ___floatsisf=Module["___floatsisf"]=a0=>(___floatsisf=Module["___floatsisf"]=wasmExports["__floatsisf"])(a0);var ___floattidf=Module["___floattidf"]=(a0,a1)=>(___floattidf=Module["___floattidf"]=wasmExports["__floattidf"])(a0,a1);var ___floattisf=Module["___floattisf"]=(a0,a1)=>(___floattisf=Module["___floattisf"]=wasmExports["__floattisf"])(a0,a1);var ___floattitf=Module["___floattitf"]=(a0,a1,a2)=>(___floattitf=Module["___floattitf"]=wasmExports["__floattitf"])(a0,a1,a2);var ___floatundidf=Module["___floatundidf"]=a0=>(___floatundidf=Module["___floatundidf"]=wasmExports["__floatundidf"])(a0);var ___floatundisf=Module["___floatundisf"]=a0=>(___floatundisf=Module["___floatundisf"]=wasmExports["__floatundisf"])(a0);var ___floatunditf=Module["___floatunditf"]=(a0,a1)=>(___floatunditf=Module["___floatunditf"]=wasmExports["__floatunditf"])(a0,a1);var ___floatunsidf=Module["___floatunsidf"]=a0=>(___floatunsidf=Module["___floatunsidf"]=wasmExports["__floatunsidf"])(a0);var ___floatunsisf=Module["___floatunsisf"]=a0=>(___floatunsisf=Module["___floatunsisf"]=wasmExports["__floatunsisf"])(a0);var ___floatuntidf=Module["___floatuntidf"]=(a0,a1)=>(___floatuntidf=Module["___floatuntidf"]=wasmExports["__floatuntidf"])(a0,a1);var ___floatuntisf=Module["___floatuntisf"]=(a0,a1)=>(___floatuntisf=Module["___floatuntisf"]=wasmExports["__floatuntisf"])(a0,a1);var ___floatuntitf=Module["___floatuntitf"]=(a0,a1,a2)=>(___floatuntitf=Module["___floatuntitf"]=wasmExports["__floatuntitf"])(a0,a1,a2);var ___lshrdi3=Module["___lshrdi3"]=(a0,a1)=>(___lshrdi3=Module["___lshrdi3"]=wasmExports["__lshrdi3"])(a0,a1);var ___moddi3=Module["___moddi3"]=(a0,a1)=>(___moddi3=Module["___moddi3"]=wasmExports["__moddi3"])(a0,a1);var ___modsi3=Module["___modsi3"]=(a0,a1)=>(___modsi3=Module["___modsi3"]=wasmExports["__modsi3"])(a0,a1);var ___modti3=Module["___modti3"]=(a0,a1,a2,a3,a4)=>(___modti3=Module["___modti3"]=wasmExports["__modti3"])(a0,a1,a2,a3,a4);var ___muldf3=Module["___muldf3"]=(a0,a1)=>(___muldf3=Module["___muldf3"]=wasmExports["__muldf3"])(a0,a1);var ___muldi3=Module["___muldi3"]=(a0,a1)=>(___muldi3=Module["___muldi3"]=wasmExports["__muldi3"])(a0,a1);var ___mulodi4=Module["___mulodi4"]=(a0,a1,a2)=>(___mulodi4=Module["___mulodi4"]=wasmExports["__mulodi4"])(a0,a1,a2);var ___mulosi4=Module["___mulosi4"]=(a0,a1,a2)=>(___mulosi4=Module["___mulosi4"]=wasmExports["__mulosi4"])(a0,a1,a2);var ___muloti4=Module["___muloti4"]=(a0,a1,a2,a3,a4,a5)=>(___muloti4=Module["___muloti4"]=wasmExports["__muloti4"])(a0,a1,a2,a3,a4,a5);var ___udivti3=Module["___udivti3"]=(a0,a1,a2,a3,a4)=>(___udivti3=Module["___udivti3"]=wasmExports["__udivti3"])(a0,a1,a2,a3,a4);var ___mulsf3=Module["___mulsf3"]=(a0,a1)=>(___mulsf3=Module["___mulsf3"]=wasmExports["__mulsf3"])(a0,a1);var ___mulvdi3=Module["___mulvdi3"]=(a0,a1)=>(___mulvdi3=Module["___mulvdi3"]=wasmExports["__mulvdi3"])(a0,a1);var ___mulvsi3=Module["___mulvsi3"]=(a0,a1)=>(___mulvsi3=Module["___mulvsi3"]=wasmExports["__mulvsi3"])(a0,a1);var ___mulvti3=Module["___mulvti3"]=(a0,a1,a2,a3,a4)=>(___mulvti3=Module["___mulvti3"]=wasmExports["__mulvti3"])(a0,a1,a2,a3,a4);var ___negdf2=Module["___negdf2"]=a0=>(___negdf2=Module["___negdf2"]=wasmExports["__negdf2"])(a0);var ___negdi2=Module["___negdi2"]=a0=>(___negdi2=Module["___negdi2"]=wasmExports["__negdi2"])(a0);var ___negsf2=Module["___negsf2"]=a0=>(___negsf2=Module["___negsf2"]=wasmExports["__negsf2"])(a0);var ___negti2=Module["___negti2"]=(a0,a1,a2)=>(___negti2=Module["___negti2"]=wasmExports["__negti2"])(a0,a1,a2);var ___negvdi2=Module["___negvdi2"]=a0=>(___negvdi2=Module["___negvdi2"]=wasmExports["__negvdi2"])(a0);var ___negvsi2=Module["___negvsi2"]=a0=>(___negvsi2=Module["___negvsi2"]=wasmExports["__negvsi2"])(a0);var ___negvti2=Module["___negvti2"]=(a0,a1,a2)=>(___negvti2=Module["___negvti2"]=wasmExports["__negvti2"])(a0,a1,a2);var ___paritydi2=Module["___paritydi2"]=a0=>(___paritydi2=Module["___paritydi2"]=wasmExports["__paritydi2"])(a0);var ___paritysi2=Module["___paritysi2"]=a0=>(___paritysi2=Module["___paritysi2"]=wasmExports["__paritysi2"])(a0);var ___parityti2=Module["___parityti2"]=(a0,a1)=>(___parityti2=Module["___parityti2"]=wasmExports["__parityti2"])(a0,a1);var ___popcountdi2=Module["___popcountdi2"]=a0=>(___popcountdi2=Module["___popcountdi2"]=wasmExports["__popcountdi2"])(a0);var ___popcountsi2=Module["___popcountsi2"]=a0=>(___popcountsi2=Module["___popcountsi2"]=wasmExports["__popcountsi2"])(a0);var ___popcountti2=Module["___popcountti2"]=(a0,a1)=>(___popcountti2=Module["___popcountti2"]=wasmExports["__popcountti2"])(a0,a1);var ___powidf2=Module["___powidf2"]=(a0,a1)=>(___powidf2=Module["___powidf2"]=wasmExports["__powidf2"])(a0,a1);var ___powisf2=Module["___powisf2"]=(a0,a1)=>(___powisf2=Module["___powisf2"]=wasmExports["__powisf2"])(a0,a1);var ___powitf2=Module["___powitf2"]=(a0,a1,a2,a3)=>(___powitf2=Module["___powitf2"]=wasmExports["__powitf2"])(a0,a1,a2,a3);var _emscripten_stack_init=Module["_emscripten_stack_init"]=()=>(_emscripten_stack_init=Module["_emscripten_stack_init"]=wasmExports["emscripten_stack_init"])();var _emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=(a0,a1)=>(_emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=wasmExports["emscripten_stack_set_limits"])(a0,a1);var _emscripten_stack_get_free=Module["_emscripten_stack_get_free"]=()=>(_emscripten_stack_get_free=Module["_emscripten_stack_get_free"]=wasmExports["emscripten_stack_get_free"])();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 ___subdf3=Module["___subdf3"]=(a0,a1)=>(___subdf3=Module["___subdf3"]=wasmExports["__subdf3"])(a0,a1);var ___subsf3=Module["___subsf3"]=(a0,a1)=>(___subsf3=Module["___subsf3"]=wasmExports["__subsf3"])(a0,a1);var ___subvdi3=Module["___subvdi3"]=(a0,a1)=>(___subvdi3=Module["___subvdi3"]=wasmExports["__subvdi3"])(a0,a1);var ___subvsi3=Module["___subvsi3"]=(a0,a1)=>(___subvsi3=Module["___subvsi3"]=wasmExports["__subvsi3"])(a0,a1);var ___subvti3=Module["___subvti3"]=(a0,a1,a2,a3,a4)=>(___subvti3=Module["___subvti3"]=wasmExports["__subvti3"])(a0,a1,a2,a3,a4);var ___truncdfhf2=Module["___truncdfhf2"]=a0=>(___truncdfhf2=Module["___truncdfhf2"]=wasmExports["__truncdfhf2"])(a0);var ___truncdfsf2=Module["___truncdfsf2"]=a0=>(___truncdfsf2=Module["___truncdfsf2"]=wasmExports["__truncdfsf2"])(a0);var ___truncsfhf2=Module["___truncsfhf2"]=a0=>(___truncsfhf2=Module["___truncsfhf2"]=wasmExports["__truncsfhf2"])(a0);var ___gnu_f2h_ieee=Module["___gnu_f2h_ieee"]=a0=>(___gnu_f2h_ieee=Module["___gnu_f2h_ieee"]=wasmExports["__gnu_f2h_ieee"])(a0);var ___ucmpdi2=Module["___ucmpdi2"]=(a0,a1)=>(___ucmpdi2=Module["___ucmpdi2"]=wasmExports["__ucmpdi2"])(a0,a1);var ___ucmpti2=Module["___ucmpti2"]=(a0,a1,a2,a3)=>(___ucmpti2=Module["___ucmpti2"]=wasmExports["__ucmpti2"])(a0,a1,a2,a3);var ___udivdi3=Module["___udivdi3"]=(a0,a1)=>(___udivdi3=Module["___udivdi3"]=wasmExports["__udivdi3"])(a0,a1);var ___udivsi3=Module["___udivsi3"]=(a0,a1)=>(___udivsi3=Module["___udivsi3"]=wasmExports["__udivsi3"])(a0,a1);var ___umoddi3=Module["___umoddi3"]=(a0,a1)=>(___umoddi3=Module["___umoddi3"]=wasmExports["__umoddi3"])(a0,a1);var ___umodsi3=Module["___umodsi3"]=(a0,a1)=>(___umodsi3=Module["___umodsi3"]=wasmExports["__umodsi3"])(a0,a1);var ___umodti3=Module["___umodti3"]=(a0,a1,a2,a3,a4)=>(___umodti3=Module["___umodti3"]=wasmExports["__umodti3"])(a0,a1,a2,a3,a4);var ___cxa_allocate_exception=Module["___cxa_allocate_exception"]=a0=>(___cxa_allocate_exception=Module["___cxa_allocate_exception"]=wasmExports["__cxa_allocate_exception"])(a0);var ___cxa_free_exception=a0=>(___cxa_free_exception=wasmExports["__cxa_free_exception"])(a0);var ___cxa_pure_virtual=Module["___cxa_pure_virtual"]=()=>(___cxa_pure_virtual=Module["___cxa_pure_virtual"]=wasmExports["__cxa_pure_virtual"])();var ___cxa_decrement_exception_refcount=a0=>(___cxa_decrement_exception_refcount=wasmExports["__cxa_decrement_exception_refcount"])(a0);var ___cxa_increment_exception_refcount=a0=>(___cxa_increment_exception_refcount=wasmExports["__cxa_increment_exception_refcount"])(a0);var ___cxa_init_primary_exception=Module["___cxa_init_primary_exception"]=(a0,a1,a2)=>(___cxa_init_primary_exception=Module["___cxa_init_primary_exception"]=wasmExports["__cxa_init_primary_exception"])(a0,a1,a2);var ___dynamic_cast=Module["___dynamic_cast"]=(a0,a1,a2,a3)=>(___dynamic_cast=Module["___dynamic_cast"]=wasmExports["__dynamic_cast"])(a0,a1,a2,a3);var ___cxa_bad_cast=Module["___cxa_bad_cast"]=()=>(___cxa_bad_cast=Module["___cxa_bad_cast"]=wasmExports["__cxa_bad_cast"])();var ___cxa_bad_typeid=Module["___cxa_bad_typeid"]=()=>(___cxa_bad_typeid=Module["___cxa_bad_typeid"]=wasmExports["__cxa_bad_typeid"])();var ___cxa_throw_bad_array_new_length=Module["___cxa_throw_bad_array_new_length"]=()=>(___cxa_throw_bad_array_new_length=Module["___cxa_throw_bad_array_new_length"]=wasmExports["__cxa_throw_bad_array_new_length"])();var ___cxa_demangle=(a0,a1,a2,a3)=>(___cxa_demangle=wasmExports["__cxa_demangle"])(a0,a1,a2,a3);var ___gxx_personality_v0=Module["___gxx_personality_v0"]=(a0,a1,a2,a3,a4)=>(___gxx_personality_v0=Module["___gxx_personality_v0"]=wasmExports["__gxx_personality_v0"])(a0,a1,a2,a3,a4);var ___thrown_object_from_unwind_exception=Module["___thrown_object_from_unwind_exception"]=a0=>(___thrown_object_from_unwind_exception=Module["___thrown_object_from_unwind_exception"]=wasmExports["__thrown_object_from_unwind_exception"])(a0);var ___get_exception_message=(a0,a1,a2)=>(___get_exception_message=wasmExports["__get_exception_message"])(a0,a1,a2);var ___get_exception_terminate_message=Module["___get_exception_terminate_message"]=a0=>(___get_exception_terminate_message=Module["___get_exception_terminate_message"]=wasmExports["__get_exception_terminate_message"])(a0);var ___cxa_guard_acquire=Module["___cxa_guard_acquire"]=a0=>(___cxa_guard_acquire=Module["___cxa_guard_acquire"]=wasmExports["__cxa_guard_acquire"])(a0);var ___cxa_guard_release=Module["___cxa_guard_release"]=a0=>(___cxa_guard_release=Module["___cxa_guard_release"]=wasmExports["__cxa_guard_release"])(a0);var ___cxa_guard_abort=Module["___cxa_guard_abort"]=a0=>(___cxa_guard_abort=Module["___cxa_guard_abort"]=wasmExports["__cxa_guard_abort"])(a0);var ___cxa_thread_atexit=Module["___cxa_thread_atexit"]=(a0,a1,a2)=>(___cxa_thread_atexit=Module["___cxa_thread_atexit"]=wasmExports["__cxa_thread_atexit"])(a0,a1,a2);var ___cxa_deleted_virtual=Module["___cxa_deleted_virtual"]=()=>(___cxa_deleted_virtual=Module["___cxa_deleted_virtual"]=wasmExports["__cxa_deleted_virtual"])();var ___cxa_can_catch=(a0,a1,a2)=>(___cxa_can_catch=wasmExports["__cxa_can_catch"])(a0,a1,a2);var ___cxa_is_pointer_type=a0=>(___cxa_is_pointer_type=wasmExports["__cxa_is_pointer_type"])(a0);var _gethostbyaddr_r=Module["_gethostbyaddr_r"]=(a0,a1,a2,a3,a4,a5,a6,a7)=>(_gethostbyaddr_r=Module["_gethostbyaddr_r"]=wasmExports["gethostbyaddr_r"])(a0,a1,a2,a3,a4,a5,a6,a7);var _gethostbyname2=Module["_gethostbyname2"]=(a0,a1)=>(_gethostbyname2=Module["_gethostbyname2"]=wasmExports["gethostbyname2"])(a0,a1);var _gethostbyname2_r=Module["_gethostbyname2_r"]=(a0,a1,a2,a3,a4,a5,a6)=>(_gethostbyname2_r=Module["_gethostbyname2_r"]=wasmExports["gethostbyname2_r"])(a0,a1,a2,a3,a4,a5,a6);var _gethostbyname_r=Module["_gethostbyname_r"]=(a0,a1,a2,a3,a4,a5)=>(_gethostbyname_r=Module["_gethostbyname_r"]=wasmExports["gethostbyname_r"])(a0,a1,a2,a3,a4,a5);var _shutdown=Module["_shutdown"]=(a0,a1)=>(_shutdown=Module["_shutdown"]=wasmExports["shutdown"])(a0,a1);var _socketpair=Module["_socketpair"]=(a0,a1,a2,a3)=>(_socketpair=Module["_socketpair"]=wasmExports["socketpair"])(a0,a1,a2,a3);var _py_docstring_mod=Module["_py_docstring_mod"]=4575168;var _PyExc_AttributeError=Module["_PyExc_AttributeError"]=3193416;var _stdout=Module["_stdout"]=4426128;var _PyExc_ModuleNotFoundError=Module["_PyExc_ModuleNotFoundError"]=3188540;var __Py_NoneStruct=Module["__Py_NoneStruct"]=3220248;var _internal_error=Module["_internal_error"]=4575176;var _conversion_error=Module["_conversion_error"]=4575180;var _PyExc_ImportError=Module["_PyExc_ImportError"]=3188328;var _pyodide_export_=Module["_pyodide_export_"]=3170448;var _py_version_major_=Module["_py_version_major_"]=3170452;var _set_new_cframe_=Module["_set_new_cframe_"]=3170456;var __Py_TrueStruct=Module["__Py_TrueStruct"]=3174804;var __Py_FalseStruct=Module["__Py_FalseStruct"]=3174820;var _PyExc_TypeError=Module["_PyExc_TypeError"]=3186840;var _Jsr_undefined=Module["_Jsr_undefined"]=254408;var _PyExc_StopIteration=Module["_PyExc_StopIteration"]=3187264;var _PyTraceBack_Type=Module["_PyTraceBack_Type"]=3722268;var _PyExc_GeneratorExit=Module["_PyExc_GeneratorExit"]=3187476;var _PyExc_StopAsyncIteration=Module["_PyExc_StopAsyncIteration"]=3187052;var _PyExc_RuntimeError=Module["_PyExc_RuntimeError"]=3192356;var _PyExc_Exception=Module["_PyExc_Exception"]=3186628;var _PyExc_BaseException=Module["_PyExc_BaseException"]=3186416;var _methods=Module["_methods"]=3171680;var _PyExc_KeyError=Module["_PyExc_KeyError"]=3194688;var _PyExc_IndexError=Module["_PyExc_IndexError"]=3194476;var _PySlice_Type=Module["_PySlice_Type"]=3225152;var _PyLong_Type=Module["_PyLong_Type"]=3210816;var _PyBool_Type=Module["_PyBool_Type"]=3174980;var _PyExc_ValueError=Module["_PyExc_ValueError"]=3187696;var _PyExc_NotImplementedError=Module["_PyExc_NotImplementedError"]=3192780;var _PyBaseObject_Type=Module["_PyBaseObject_Type"]=3227176;var _PyExc_OverflowError=Module["_PyExc_OverflowError"]=3196592;var _PyList_Type=Module["_PyList_Type"]=3209664;var _PyTuple_Type=Module["_PyTuple_Type"]=3225504;var _jsbind=Module["_jsbind"]=4575232;var __Py_NotImplementedStruct=Module["__Py_NotImplementedStruct"]=3221024;var _default_signature=Module["_default_signature"]=4575240;var _no_default=Module["_no_default"]=4575236;var _PyExc_SystemError=Module["_PyExc_SystemError"]=3197016;var _PyCoro_Type=Module["_PyCoro_Type"]=3203648;var _PyGen_Type=Module["_PyGen_Type"]=3203440;var _PyDict_Type=Module["_PyDict_Type"]=3212104;var _compat_to_string_repr=Module["_compat_to_string_repr"]=4575256;var _PyMethod_Type=Module["_PyMethod_Type"]=3179912;var _PyFunction_Type=Module["_PyFunction_Type"]=3207164;var _py_buffer_len_offset=Module["_py_buffer_len_offset"]=3173544;var _py_buffer_shape_offset=Module["_py_buffer_shape_offset"]=3173548;var _syncifyHandler=Module["_syncifyHandler"]=4575284;var _Jsr_true=Module["_Jsr_true"]=254412;var _Jsr_false=Module["_Jsr_false"]=254416;var _Jsr_novalue=Module["_Jsr_novalue"]=254420;var _PySet_Type=Module["_PySet_Type"]=3223776;var _PyFloat_Type=Module["_PyFloat_Type"]=3205904;var _threadstate_freelist_len=Module["_threadstate_freelist_len"]=4575336;var _threadstate_freelist=Module["_threadstate_freelist"]=4575296;var _size_of_cframe=Module["_size_of_cframe"]=3174108;var __PyParser_TokenNames=Module["__PyParser_TokenNames"]=3174112;var _PyExc_SyntaxError=Module["_PyExc_SyntaxError"]=3193628;var _PyExc_LookupError=Module["_PyExc_LookupError"]=3194264;var _PyExc_UnicodeDecodeError=Module["_PyExc_UnicodeDecodeError"]=3195532;var _PyExc_IndentationError=Module["_PyExc_IndentationError"]=3193840;var _PyExc_KeyboardInterrupt=Module["_PyExc_KeyboardInterrupt"]=3188116;var _PyExc_TabError=Module["_PyExc_TabError"]=3194052;var _PyExc_UnicodeError=Module["_PyExc_UnicodeError"]=3195108;var _stdin=Module["_stdin"]=4425976;var _PyExc_MemoryError=Module["_PyExc_MemoryError"]=3197232;var __PyRuntime=Module["__PyRuntime"]=3247224;var _PyComplex_Type=Module["_PyComplex_Type"]=3182028;var __Py_EllipsisObject=Module["__Py_EllipsisObject"]=3225008;var _PyUnicode_Type=Module["_PyUnicode_Type"]=3233744;var _PyBytes_Type=Module["_PyBytes_Type"]=3177384;var __Py_ctype_table=Module["__Py_ctype_table"]=457184;var _PyExc_DeprecationWarning=Module["_PyExc_DeprecationWarning"]=3198288;var _PyExc_SyntaxWarning=Module["_PyExc_SyntaxWarning"]=3198712;var __PyOS_ReadlineTState=Module["__PyOS_ReadlineTState"]=4575396;var _stderr=Module["_stderr"]=4425824;var _PyOS_InputHook=Module["_PyOS_InputHook"]=4575400;var _PyOS_ReadlineFunctionPointer=Module["_PyOS_ReadlineFunctionPointer"]=4575404;var _PyExc_OSError=Module["_PyExc_OSError"]=3188752;var _PyType_Type=Module["_PyType_Type"]=3226128;var _PyExc_BufferError=Module["_PyExc_BufferError"]=3197652;var _PyCFunction_Type=Module["_PyCFunction_Type"]=3218916;var _PyByteArray_Type=Module["_PyByteArray_Type"]=3175188;var __PyByteArray_empty_string=Module["__PyByteArray_empty_string"]=4575412;var __Py_ctype_tolower=Module["__Py_ctype_tolower"]=458208;var __Py_ctype_toupper=Module["__Py_ctype_toupper"]=458464;var _Py_hexdigits=Module["_Py_hexdigits"]=3242744;var _PyExc_BytesWarning=Module["_PyExc_BytesWarning"]=3199772;var _PyByteArrayIter_Type=Module["_PyByteArrayIter_Type"]=3176544;var __PyLong_DigitValue=Module["__PyLong_DigitValue"]=3211024;var _PyBytesIter_Type=Module["_PyBytesIter_Type"]=3178592;var _PyModule_Type=Module["_PyModule_Type"]=3219544;var _PyCapsule_Type=Module["_PyCapsule_Type"]=3179456;var _PyCell_Type=Module["_PyCell_Type"]=3179664;var _PyInstanceMethod_Type=Module["_PyInstanceMethod_Type"]=3180264;var _PyCode_Type=Module["_PyCode_Type"]=3180568;var _PyFrozenSet_Type=Module["_PyFrozenSet_Type"]=3224336;var _PyExc_ZeroDivisionError=Module["_PyExc_ZeroDivisionError"]=3196804;var __PyMethodWrapper_Type=Module["__PyMethodWrapper_Type"]=3184440;var _PyMethodDescr_Type=Module["_PyMethodDescr_Type"]=3182784;var _PyClassMethodDescr_Type=Module["_PyClassMethodDescr_Type"]=3182992;var _PyMemberDescr_Type=Module["_PyMemberDescr_Type"]=3183260;var _PyGetSetDescr_Type=Module["_PyGetSetDescr_Type"]=3183532;var _PyWrapperDescr_Type=Module["_PyWrapperDescr_Type"]=3183824;var _PyDictProxy_Type=Module["_PyDictProxy_Type"]=3184032;var _PyProperty_Type=Module["_PyProperty_Type"]=3185208;var _PyReversed_Type=Module["_PyReversed_Type"]=3185920;var _PyEnum_Type=Module["_PyEnum_Type"]=3185648;var _PyExc_BaseExceptionGroup=Module["_PyExc_BaseExceptionGroup"]=3187692;var _PyExc_UnicodeTranslateError=Module["_PyExc_UnicodeTranslateError"]=3195744;var _PyExc_BlockingIOError=Module["_PyExc_BlockingIOError"]=3188964;var _PyExc_BrokenPipeError=Module["_PyExc_BrokenPipeError"]=3189600;var _PyExc_ChildProcessError=Module["_PyExc_ChildProcessError"]=3189388;var _PyExc_ConnectionAbortedError=Module["_PyExc_ConnectionAbortedError"]=3189812;var _PyExc_ConnectionRefusedError=Module["_PyExc_ConnectionRefusedError"]=3190024;var _PyExc_ConnectionResetError=Module["_PyExc_ConnectionResetError"]=3190236;var _PyExc_FileExistsError=Module["_PyExc_FileExistsError"]=3190448;var _PyExc_FileNotFoundError=Module["_PyExc_FileNotFoundError"]=3190660;var _PyExc_IsADirectoryError=Module["_PyExc_IsADirectoryError"]=3190872;var _PyExc_NotADirectoryError=Module["_PyExc_NotADirectoryError"]=3191084;var _PyExc_InterruptedError=Module["_PyExc_InterruptedError"]=3191296;var _PyExc_PermissionError=Module["_PyExc_PermissionError"]=3191508;var _PyExc_ProcessLookupError=Module["_PyExc_ProcessLookupError"]=3191720;var _PyExc_TimeoutError=Module["_PyExc_TimeoutError"]=3191932;var _PyExc_EnvironmentError=Module["_PyExc_EnvironmentError"]=4575416;var _PyExc_IOError=Module["_PyExc_IOError"]=4575420;var _PyExc_SystemExit=Module["_PyExc_SystemExit"]=3187688;var _PyExc_ConnectionError=Module["_PyExc_ConnectionError"]=3189176;var _PyExc_EOFError=Module["_PyExc_EOFError"]=3192144;var _PyExc_RecursionError=Module["_PyExc_RecursionError"]=3192568;var _PyExc_NameError=Module["_PyExc_NameError"]=3192992;var _PyExc_UnboundLocalError=Module["_PyExc_UnboundLocalError"]=3193204;var _PyExc_UnicodeEncodeError=Module["_PyExc_UnicodeEncodeError"]=3195320;var _PyExc_AssertionError=Module["_PyExc_AssertionError"]=3195956;var _PyExc_ArithmeticError=Module["_PyExc_ArithmeticError"]=3196168;var _PyExc_FloatingPointError=Module["_PyExc_FloatingPointError"]=3196380;var _PyExc_ReferenceError=Module["_PyExc_ReferenceError"]=3197228;var _PyExc_Warning=Module["_PyExc_Warning"]=3197864;var _PyExc_UserWarning=Module["_PyExc_UserWarning"]=3198076;var _PyExc_PendingDeprecationWarning=Module["_PyExc_PendingDeprecationWarning"]=3198500;var _PyExc_RuntimeWarning=Module["_PyExc_RuntimeWarning"]=3198924;var _PyExc_FutureWarning=Module["_PyExc_FutureWarning"]=3199136;var _PyExc_ImportWarning=Module["_PyExc_ImportWarning"]=3199348;var _PyExc_UnicodeWarning=Module["_PyExc_UnicodeWarning"]=3199560;var _PyExc_EncodingWarning=Module["_PyExc_EncodingWarning"]=3199984;var _PyExc_ResourceWarning=Module["_PyExc_ResourceWarning"]=3200196;var _Py_GenericAliasType=Module["_Py_GenericAliasType"]=3202716;var _PyAsyncGen_Type=Module["_PyAsyncGen_Type"]=3202976;var __PyAsyncGenWrappedValue_Type=Module["__PyAsyncGenWrappedValue_Type"]=3205024;var __PyCoroWrapper_Type=Module["__PyCoroWrapper_Type"]=3204224;var __PyAsyncGenASend_Type=Module["__PyAsyncGenASend_Type"]=3204816;var __PyAsyncGenAThrow_Type=Module["__PyAsyncGenAThrow_Type"]=3205312;var _PyStdPrinter_Type=Module["_PyStdPrinter_Type"]=3205520;var __Py_SwappedOp=Module["__Py_SwappedOp"]=3220256;var _PyFrame_Type=Module["_PyFrame_Type"]=3206936;var _PyClassMethod_Type=Module["_PyClassMethod_Type"]=3207820;var _PyStaticMethod_Type=Module["_PyStaticMethod_Type"]=3208156;var __PyInterpreterID_Type=Module["__PyInterpreterID_Type"]=3208644;var _PySeqIter_Type=Module["_PySeqIter_Type"]=3208864;var _PyCallIter_Type=Module["_PyCallIter_Type"]=3209136;var _PyListIter_Type=Module["_PyListIter_Type"]=3210256;var _PyListRevIter_Type=Module["_PyListRevIter_Type"]=3210528;var _PyDictIterKey_Type=Module["_PyDictIterKey_Type"]=3212832;var _PyDictRevIterKey_Type=Module["_PyDictRevIterKey_Type"]=3213456;var _PyDictRevIterValue_Type=Module["_PyDictRevIterValue_Type"]=3213872;var _PyDictKeys_Type=Module["_PyDictKeys_Type"]=3214080;var _PyDictItems_Type=Module["_PyDictItems_Type"]=3214288;var _PyDictIterItem_Type=Module["_PyDictIterItem_Type"]=3213248;var _PyDictIterValue_Type=Module["_PyDictIterValue_Type"]=3213040;var _PyDictRevIterItem_Type=Module["_PyDictRevIterItem_Type"]=3213664;var _PyDictValues_Type=Module["_PyDictValues_Type"]=3214944;var _PyODict_Type=Module["_PyODict_Type"]=3215640;var _PyODictIter_Type=Module["_PyODictIter_Type"]=3215888;var _PyODictKeys_Type=Module["_PyODictKeys_Type"]=3216128;var _PyODictValues_Type=Module["_PyODictValues_Type"]=3216608;var _PyODictItems_Type=Module["_PyODictItems_Type"]=3216368;var __PyManagedBuffer_Type=Module["__PyManagedBuffer_Type"]=3217208;var _PyMemoryView_Type=Module["_PyMemoryView_Type"]=3218116;var _PyCMethod_Type=Module["_PyCMethod_Type"]=3218708;var _PyModuleDef_Type=Module["_PyModuleDef_Type"]=3219336;var __PyNamespace_Type=Module["__PyNamespace_Type"]=3220040;var __PyNone_Type=Module["__PyNone_Type"]=3220424;var __PyNotImplemented_Type=Module["__PyNotImplemented_Type"]=3220816;var _PyContextToken_Type=Module["_PyContextToken_Type"]=3243328;var _PyContextVar_Type=Module["_PyContextVar_Type"]=3243120;var _PyContext_Type=Module["_PyContext_Type"]=3242912;var _PyEllipsis_Type=Module["_PyEllipsis_Type"]=3224800;var _PyFilter_Type=Module["_PyFilter_Type"]=3240464;var _PyLongRangeIter_Type=Module["_PyLongRangeIter_Type"]=3222768;var _PyMap_Type=Module["_PyMap_Type"]=3240704;var _PyPickleBuffer_Type=Module["_PyPickleBuffer_Type"]=3221592;var _PyRangeIter_Type=Module["_PyRangeIter_Type"]=3222496;var _PyRange_Type=Module["_PyRange_Type"]=3222224;var _PySetIter_Type=Module["_PySetIter_Type"]=3223024;var _PySuper_Type=Module["_PySuper_Type"]=3227680;var _PyTupleIter_Type=Module["_PyTupleIter_Type"]=3225920;var _PyUnicodeIter_Type=Module["_PyUnicodeIter_Type"]=3235664;var _PyZip_Type=Module["_PyZip_Type"]=3240960;var __PyBufferWrapper_Type=Module["__PyBufferWrapper_Type"]=3227392;var __PyWeakref_CallableProxyType=Module["__PyWeakref_CallableProxyType"]=3238128;var __PyWeakref_ProxyType=Module["__PyWeakref_ProxyType"]=3237920;var __PyWeakref_RefType=Module["__PyWeakref_RefType"]=3237464;var __PySet_Dummy=Module["__PySet_Dummy"]=3224552;var _PyStructSequence_UnnamedField=Module["_PyStructSequence_UnnamedField"]=3225380;var __Py_ascii_whitespace=Module["__Py_ascii_whitespace"]=307776;var _Py_Version=Module["_Py_Version"]=440420;var _PyImport_Inittab=Module["_PyImport_Inittab"]=3245856;var __PyImport_FrozenBootstrap=Module["__PyImport_FrozenBootstrap"]=4420816;var _PyImport_FrozenModules=Module["_PyImport_FrozenModules"]=4587416;var __PyImport_FrozenStdlib=Module["__PyImport_FrozenStdlib"]=4421152;var __PyImport_FrozenTest=Module["__PyImport_FrozenTest"]=4421408;var _Py_IgnoreEnvironmentFlag=Module["_Py_IgnoreEnvironmentFlag"]=4577228;var _Py_IsolatedFlag=Module["_Py_IsolatedFlag"]=4577248;var _Py_BytesWarningFlag=Module["_Py_BytesWarningFlag"]=4577220;var _Py_InspectFlag=Module["_Py_InspectFlag"]=4577208;var _Py_InteractiveFlag=Module["_Py_InteractiveFlag"]=4577204;var _Py_OptimizeFlag=Module["_Py_OptimizeFlag"]=4577212;var _Py_DebugFlag=Module["_Py_DebugFlag"]=4577192;var _Py_VerboseFlag=Module["_Py_VerboseFlag"]=4577196;var _Py_QuietFlag=Module["_Py_QuietFlag"]=4577200;var _Py_FrozenFlag=Module["_Py_FrozenFlag"]=4577224;var _Py_UnbufferedStdioFlag=Module["_Py_UnbufferedStdioFlag"]=4577240;var _Py_NoSiteFlag=Module["_Py_NoSiteFlag"]=4577216;var _Py_DontWriteBytecodeFlag=Module["_Py_DontWriteBytecodeFlag"]=4577232;var _Py_NoUserSiteDirectory=Module["_Py_NoUserSiteDirectory"]=4577236;var _Py_HashRandomizationFlag=Module["_Py_HashRandomizationFlag"]=4577244;var _Py_FileSystemDefaultEncoding=Module["_Py_FileSystemDefaultEncoding"]=4577296;var _Py_HasFileSystemDefaultEncoding=Module["_Py_HasFileSystemDefaultEncoding"]=4577300;var _Py_FileSystemDefaultEncodeErrors=Module["_Py_FileSystemDefaultEncodeErrors"]=4577304;var __Py_HasFileSystemDefaultEncodeErrors=Module["__Py_HasFileSystemDefaultEncodeErrors"]=4577308;var _Py_UTF8Mode=Module["_Py_UTF8Mode"]=4577188;var __Py_HashSecret=Module["__Py_HashSecret"]=4577312;var _Py_EMSCRIPTEN_SIGNAL_HANDLING=Module["_Py_EMSCRIPTEN_SIGNAL_HANDLING"]=4578428;var _ffi_type_pointer=Module["_ffi_type_pointer"]=2817812;var _ffi_type_void=Module["_ffi_type_void"]=2817704;var _ffi_type_sint32=Module["_ffi_type_sint32"]=2817776;var _ffi_type_uint8=Module["_ffi_type_uint8"]=2817716;var _ffi_type_double=Module["_ffi_type_double"]=2817836;var _ffi_type_longdouble=Module["_ffi_type_longdouble"]=2817848;var _ffi_type_float=Module["_ffi_type_float"]=2817824;var _ffi_type_sint16=Module["_ffi_type_sint16"]=2817752;var _ffi_type_uint16=Module["_ffi_type_uint16"]=2817740;var _ffi_type_uint32=Module["_ffi_type_uint32"]=2817764;var _ffi_type_sint64=Module["_ffi_type_sint64"]=2817800;var _ffi_type_uint64=Module["_ffi_type_uint64"]=2817788;var _ffi_type_sint8=Module["_ffi_type_sint8"]=2817728;var _environ=Module["_environ"]=4587440;var __deduplicate_map=Module["__deduplicate_map"]=4587420;var _BZ2_crc32Table=Module["_BZ2_crc32Table"]=4421584;var _BZ2_rNums=Module["_BZ2_rNums"]=4422608;var _z_errmsg=Module["_z_errmsg"]=4424848;var __length_code=Module["__length_code"]=2828528;var __dist_code=Module["__dist_code"]=2828016;var _deflate_copyright=Module["_deflate_copyright"]=2823184;var _inflate_copyright=Module["_inflate_copyright"]=2827712;var ___environ=Module["___environ"]=4587440;var ____environ=Module["____environ"]=4587440;var __environ=Module["__environ"]=4587440;var _timezone=Module["_timezone"]=4588104;var _daylight=Module["_daylight"]=4588108;var _tzname=Module["_tzname"]=4588112;var ___progname=Module["___progname"]=4589328;var ___optreset=Module["___optreset"]=4588292;var _optind=Module["_optind"]=4425096;var ___optpos=Module["___optpos"]=4588296;var _optarg=Module["_optarg"]=4588300;var _optopt=Module["_optopt"]=4588304;var _opterr=Module["_opterr"]=4425100;var _optreset=Module["_optreset"]=4588292;var _h_errno=Module["_h_errno"]=4588428;var ___signgam=Module["___signgam"]=4603724;var __ns_flagdata=Module["__ns_flagdata"]=3015840;var ___progname_full=Module["___progname_full"]=4589332;var _program_invocation_short_name=Module["_program_invocation_short_name"]=4589328;var _program_invocation_name=Module["_program_invocation_name"]=4589332;var ___sig_pending=Module["___sig_pending"]=4593704;var ___sig_actions=Module["___sig_actions"]=4594624;var _signgam=Module["_signgam"]=4603724;var ___THREW__=Module["___THREW__"]=4610624;var ___threwValue=Module["___threwValue"]=4610628;var ___cxa_unexpected_handler=Module["___cxa_unexpected_handler"]=4436388;var ___cxa_terminate_handler=Module["___cxa_terminate_handler"]=4436384;var ___cxa_new_handler=Module["___cxa_new_handler"]=4633408;var _in6addr_any=Module["_in6addr_any"]=3170336;var _in6addr_loopback=Module["_in6addr_loopback"]=3170352;var ___start_em_js=Module["___start_em_js"]=4443880;var ___stop_em_js=Module["___stop_em_js"]=4574887;function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_i(index){var sp=stackSave();try{return getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiifi(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiidi(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}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{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_j(index){var sp=stackSave();try{return getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0);return 0n}}function invoke_ji(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0);return 0n}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_jii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0);return 0n}}function invoke_v(index){var sp=stackSave();try{getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}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 getWasmTableEntry(index)(a1,a2,a3,a4)}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 getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}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 getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viijii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiij(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiid(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiijj(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}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 getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_jiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0);return 0n}}function invoke_iiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_diii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15)}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{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiji(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_jiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0);return 0n}}function invoke_viif(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viid(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viijj(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createPath"]=FS.createPath;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["ERRNO_CODES"]=ERRNO_CODES;Module["wasmTable"]=wasmTable;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_unlink"]=FS.unlink;Module["LZ4"]=LZ4;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]=stringToUTF8OnStack(arg);argv_ptr+=4});HEAPU32[argv_ptr>>2]=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);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){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=true;if(Module["noInitialRun"])shouldRunNow=false;run();moduleRtn=readyPromise; + + + return moduleRtn; +} +); +})(); +globalThis._createPyodideModule = _createPyodideModule; diff --git a/dingus/pyodide/pyodide.asm.wasm b/dingus/pyodide/pyodide.asm.wasm new file mode 100755 index 0000000..eb0e195 Binary files /dev/null and b/dingus/pyodide/pyodide.asm.wasm differ diff --git a/dingus/pyodide/pyodide.d.ts b/dingus/pyodide/pyodide.d.ts new file mode 100644 index 0000000..c309ddc --- /dev/null +++ b/dingus/pyodide/pyodide.d.ts @@ -0,0 +1,1561 @@ +// Generated by dts-bundle-generator v8.1.2 + +/** + * + * The Pyodide version. + * + * The version here is a Python version, following :pep:`440`. This is different + * from the version in ``package.json`` which follows the node package manager + * version convention. + */ +export declare const version: string; +interface CanvasInterface { + setCanvas2D(canvas: HTMLCanvasElement): void; + getCanvas2D(): HTMLCanvasElement | undefined; + setCanvas3D(canvas: HTMLCanvasElement): void; + getCanvas3D(): HTMLCanvasElement | undefined; +} +type InFuncType = () => null | undefined | string | ArrayBuffer | Uint8Array | number; +declare function setStdin(options?: { + stdin?: InFuncType; + read?: (buffer: Uint8Array) => number; + error?: boolean; + isatty?: boolean; + autoEOF?: boolean; +}): void; +declare function setStdout(options?: { + batched?: (output: string) => void; + raw?: (charCode: number) => void; + write?: (buffer: Uint8Array) => number; + isatty?: boolean; +}): void; +declare function setStderr(options?: { + batched?: (output: string) => void; + raw?: (charCode: number) => void; + write?: (buffer: Uint8Array) => number; + isatty?: boolean; +}): void; +/** @deprecated Use `import type { TypedArray } from "pyodide/ffi"` instead */ +export type TypedArray = Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array; +/** @deprecated Use `import type { PyProxy } from "pyodide/ffi"` instead */ +interface PyProxy { + [x: string]: any; +} +declare class PyProxy { + /** @private */ + $$flags: number; + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; + /** + * @hideconstructor + */ + constructor(); + /** @hidden */ + get [Symbol.toStringTag](): string; + /** + * The name of the type of the object. + * + * Usually the value is ``"module.name"`` but for builtins or + * interpreter-defined types it is just ``"name"``. As pseudocode this is: + * + * .. code-block:: python + * + * ty = type(x) + * if ty.__module__ == 'builtins' or ty.__module__ == "__main__": + * return ty.__name__ + * else: + * ty.__module__ + "." + ty.__name__ + * + */ + get type(): string; + /** + * Returns `str(o)` (unless `pyproxyToStringRepr: true` was passed to + * :js:func:`~globalThis.loadPyodide` in which case it will return `repr(o)`) + */ + toString(): string; + /** + * Destroy the :js:class:`~pyodide.ffi.PyProxy`. This will release the memory. Any further attempt + * to use the object will raise an error. + * + * In a browser supporting :js:data:`FinalizationRegistry`, Pyodide will + * automatically destroy the :js:class:`~pyodide.ffi.PyProxy` when it is garbage collected, however + * there is no guarantee that the finalizer will be run in a timely manner so + * it is better to destroy the proxy explicitly. + * + * @param options + * @param options.message The error message to print if use is attempted after + * destroying. Defaults to "Object has already been destroyed". + * + */ + destroy(options?: { + message?: string; + destroyRoundtrip?: boolean; + }): void; + /** + * Make a new :js:class:`~pyodide.ffi.PyProxy` pointing to the same Python object. + * Useful if the :js:class:`~pyodide.ffi.PyProxy` is destroyed somewhere else. + */ + copy(): PyProxy; + /** + * Converts the :js:class:`~pyodide.ffi.PyProxy` into a JavaScript object as best as possible. By + * default does a deep conversion, if a shallow conversion is desired, you can + * use ``proxy.toJs({depth : 1})``. See :ref:`Explicit Conversion of PyProxy + * ` for more info. + * @param options + * @return The JavaScript object resulting from the conversion. + */ + toJs({ depth, pyproxies, create_pyproxies, dict_converter, default_converter, }?: { + /** How many layers deep to perform the conversion. Defaults to infinite */ + depth?: number; + /** + * If provided, :js:meth:`toJs` will store all PyProxies created in this + * list. This allows you to easily destroy all the PyProxies by iterating + * the list without having to recurse over the generated structure. The most + * common use case is to create a new empty list, pass the list as + * ``pyproxies``, and then later iterate over ``pyproxies`` to destroy all of + * created proxies. + */ + pyproxies?: PyProxy[]; + /** + * If false, :js:meth:`toJs` will throw a + * :py:exc:`~pyodide.ffi.ConversionError` rather than producing a + * :js:class:`~pyodide.ffi.PyProxy`. + */ + create_pyproxies?: boolean; + /** + * A function to be called on an iterable of pairs ``[key, value]``. Convert + * this iterable of pairs to the desired output. For instance, + * :js:func:`Object.fromEntries` would convert the dict to an object, + * :js:func:`Array.from` converts it to an :js:class:`Array` of pairs, and + * ``(it) => new Map(it)`` converts it to a :js:class:`Map` (which is the + * default behavior). + */ + dict_converter?: (array: Iterable<[ + key: string, + value: any + ]>) => any; + /** + * Optional argument to convert objects with no default conversion. See the + * documentation of :meth:`~pyodide.ffi.to_js`. + */ + default_converter?: (obj: PyProxy, convert: (obj: PyProxy) => any, cacheConversion: (obj: PyProxy, result: any) => void) => any; + }): any; +} +declare class PyProxyWithLength extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +/** @deprecated Use `import type { PyProxyWithLength } from "pyodide/ffi"` instead */ +interface PyProxyWithLength extends PyLengthMethods { +} +declare class PyLengthMethods { + /** + * The length of the object. + */ + get length(): number; +} +declare class PyProxyWithGet extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +/** @deprecated Use `import type { PyProxyWithGet } from "pyodide/ffi"` instead */ +interface PyProxyWithGet extends PyGetItemMethods { +} +declare class PyGetItemMethods { + /** + * This translates to the Python code ``obj[key]``. + * + * @param key The key to look up. + * @returns The corresponding value. + */ + get(key: any): any; + /** + * Returns the object treated as a json adaptor. + * + * With a JsonAdaptor: + * 1. property access / modification / deletion is implemented with + * :meth:`~object.__getitem__`, :meth:`~object.__setitem__`, and + * :meth:`~object.__delitem__` respectively. + * 2. If an attribute is accessed and the result implements + * :meth:`~object.__getitem__` then the result will also be a json + * adaptor. + * + * For instance, ``JSON.stringify(proxy.asJsJson())`` acts like an + * inverse to Python's :py:func:`json.loads`. + */ + asJsJson(): PyProxy & {}; +} +declare class PyProxyWithSet extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +/** @deprecated Use `import type { PyProxyWithSet } from "pyodide/ffi"` instead */ +interface PyProxyWithSet extends PySetItemMethods { +} +declare class PySetItemMethods { + /** + * This translates to the Python code ``obj[key] = value``. + * + * @param key The key to set. + * @param value The value to set it to. + */ + set(key: any, value: any): void; + /** + * This translates to the Python code ``del obj[key]``. + * + * @param key The key to delete. + */ + delete(key: any): void; +} +declare class PyProxyWithHas extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +/** @deprecated Use `import type { PyProxyWithHas } from "pyodide/ffi"` instead */ +interface PyProxyWithHas extends PyContainsMethods { +} +declare class PyContainsMethods { + /** + * This translates to the Python code ``key in obj``. + * + * @param key The key to check for. + * @returns Is ``key`` present? + */ + has(key: any): boolean; +} +declare class PyIterable extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +/** @deprecated Use `import type { PyIterable } from "pyodide/ffi"` instead */ +interface PyIterable extends PyIterableMethods { +} +declare class PyIterableMethods { + /** + * This translates to the Python code ``iter(obj)``. Return an iterator + * associated to the proxy. See the documentation for + * :js:data:`Symbol.iterator`. + * + * This will be used implicitly by ``for(let x of proxy){}``. + */ + [Symbol.iterator](): Iterator; +} +declare class PyAsyncIterable extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +/** @deprecated Use `import type { PyAsyncIterable } from "pyodide/ffi"` instead */ +interface PyAsyncIterable extends PyAsyncIterableMethods { +} +declare class PyAsyncIterableMethods { + /** + * This translates to the Python code ``aiter(obj)``. Return an async iterator + * associated to the proxy. See the documentation for :js:data:`Symbol.asyncIterator`. + * + * This will be used implicitly by ``for(await let x of proxy){}``. + */ + [Symbol.asyncIterator](): AsyncIterator; +} +declare class PyIterator extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +/** @deprecated Use `import type { PyIterator } from "pyodide/ffi"` instead */ +interface PyIterator extends PyIteratorMethods { +} +declare class PyIteratorMethods { + /** @private */ + [Symbol.iterator](): this; + /** + * This translates to the Python code ``next(obj)``. Returns the next value of + * the generator. See the documentation for :js:meth:`Generator.next` The + * argument will be sent to the Python generator. + * + * This will be used implicitly by ``for(let x of proxy){}``. + * + * @param arg The value to send to the generator. The value will be assigned + * as a result of a yield expression. + * @returns An Object with two properties: ``done`` and ``value``. When the + * generator yields ``some_value``, ``next`` returns ``{done : false, value : + * some_value}``. When the generator raises a :py:exc:`StopIteration` + * exception, ``next`` returns ``{done : true, value : result_value}``. + */ + next(arg?: any): IteratorResult; +} +declare class PyGenerator extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +/** @deprecated Use `import type { PyGenerator } from "pyodide/ffi"` instead */ +interface PyGenerator extends PyGeneratorMethods { +} +declare class PyGeneratorMethods { + /** + * Throws an exception into the Generator. + * + * See the documentation for :js:meth:`Generator.throw`. + * + * @param exc Error The error to throw into the generator. Must be an + * instanceof ``Error``. + * @returns An Object with two properties: ``done`` and ``value``. When the + * generator yields ``some_value``, ``return`` returns ``{done : false, value + * : some_value}``. When the generator raises a + * ``StopIteration(result_value)`` exception, ``return`` returns ``{done : + * true, value : result_value}``. + */ + throw(exc: any): IteratorResult; + /** + * Throws a :py:exc:`GeneratorExit` into the generator and if the + * :py:exc:`GeneratorExit` is not caught returns the argument value ``{done: + * true, value: v}``. If the generator catches the :py:exc:`GeneratorExit` and + * returns or yields another value the next value of the generator this is + * returned in the normal way. If it throws some error other than + * :py:exc:`GeneratorExit` or :py:exc:`StopIteration`, that error is propagated. See + * the documentation for :js:meth:`Generator.return`. + * + * @param v The value to return from the generator. + * @returns An Object with two properties: ``done`` and ``value``. When the + * generator yields ``some_value``, ``return`` returns ``{done : false, value + * : some_value}``. When the generator raises a + * ``StopIteration(result_value)`` exception, ``return`` returns ``{done : + * true, value : result_value}``. + */ + return(v: any): IteratorResult; +} +declare class PyAsyncIterator extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +/** @deprecated Use `import type { PyAsyncIterator } from "pyodide/ffi"` instead */ +interface PyAsyncIterator extends PyAsyncIteratorMethods { +} +declare class PyAsyncIteratorMethods { + /** @private */ + [Symbol.asyncIterator](): this; + /** + * This translates to the Python code ``anext(obj)``. Returns the next value + * of the asynchronous iterator. The argument will be sent to the Python + * iterator (if it's a generator for instance). + * + * This will be used implicitly by ``for(let x of proxy){}``. + * + * @param arg The value to send to a generator. The value will be assigned as + * a result of a yield expression. + * @returns An Object with two properties: ``done`` and ``value``. When the + * iterator yields ``some_value``, ``next`` returns ``{done : false, value : + * some_value}``. When the giterator is done, ``next`` returns + * ``{done : true }``. + */ + next(arg?: any): Promise>; +} +declare class PyAsyncGenerator extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +/** @deprecated Use `import type { PyAsyncGenerator } from "pyodide/ffi"` instead */ +interface PyAsyncGenerator extends PyAsyncGeneratorMethods { +} +declare class PyAsyncGeneratorMethods { + /** + * Throws an exception into the Generator. + * + * See the documentation for :js:meth:`AsyncGenerator.throw`. + * + * @param exc Error The error to throw into the generator. Must be an + * instanceof ``Error``. + * @returns An Object with two properties: ``done`` and ``value``. When the + * generator yields ``some_value``, ``return`` returns ``{done : false, value + * : some_value}``. When the generator raises a + * ``StopIteration(result_value)`` exception, ``return`` returns ``{done : + * true, value : result_value}``. + */ + throw(exc: any): Promise>; + /** + * Throws a :py:exc:`GeneratorExit` into the generator and if the + * :py:exc:`GeneratorExit` is not caught returns the argument value ``{done: + * true, value: v}``. If the generator catches the :py:exc:`GeneratorExit` and + * returns or yields another value the next value of the generator this is + * returned in the normal way. If it throws some error other than + * :py:exc:`GeneratorExit` or :py:exc:`StopAsyncIteration`, that error is + * propagated. See the documentation for :js:meth:`AsyncGenerator.throw` + * + * @param v The value to return from the generator. + * @returns An Object with two properties: ``done`` and ``value``. When the + * generator yields ``some_value``, ``return`` returns ``{done : false, value + * : some_value}``. When the generator raises a :py:exc:`StopAsyncIteration` + * exception, ``return`` returns ``{done : true, value : result_value}``. + */ + return(v: any): Promise>; +} +declare class PySequence extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +/** @deprecated Use `import type { PySequence } from "pyodide/ffi"` instead */ +interface PySequence extends PySequenceMethods { +} +declare class PySequenceMethods { + /** @hidden */ + get [Symbol.isConcatSpreadable](): boolean; + /** + * See :js:meth:`Array.join`. The :js:meth:`Array.join` method creates and + * returns a new string by concatenating all of the elements in the + * :py:class:`~collections.abc.Sequence`. + * + * @param separator A string to separate each pair of adjacent elements of the + * Sequence. + * + * @returns A string with all Sequence elements joined. + */ + join(separator?: string): string; + /** + * See :js:meth:`Array.slice`. The :js:meth:`Array.slice` method returns a + * shallow copy of a portion of a :py:class:`~collections.abc.Sequence` into a + * new array object selected from ``start`` to ``stop`` (`stop` not included) + * @param start Zero-based index at which to start extraction. Negative index + * counts back from the end of the Sequence. + * @param stop Zero-based index at which to end extraction. Negative index + * counts back from the end of the Sequence. + * @returns A new array containing the extracted elements. + */ + slice(start?: number, stop?: number): any; + /** + * See :js:meth:`Array.lastIndexOf`. Returns the last index at which a given + * element can be found in the Sequence, or -1 if it is not present. + * @param elt Element to locate in the Sequence. + * @param fromIndex Zero-based index at which to start searching backwards, + * converted to an integer. Negative index counts back from the end of the + * Sequence. + * @returns The last index of the element in the Sequence; -1 if not found. + */ + lastIndexOf(elt: any, fromIndex?: number): number; + /** + * See :js:meth:`Array.indexOf`. Returns the first index at which a given + * element can be found in the Sequence, or -1 if it is not present. + * @param elt Element to locate in the Sequence. + * @param fromIndex Zero-based index at which to start searching, converted to + * an integer. Negative index counts back from the end of the Sequence. + * @returns The first index of the element in the Sequence; -1 if not found. + */ + indexOf(elt: any, fromIndex?: number): number; + /** + * See :js:meth:`Array.forEach`. Executes a provided function once for each + * ``Sequence`` element. + * @param callbackfn A function to execute for each element in the ``Sequence``. Its + * return value is discarded. + * @param thisArg A value to use as ``this`` when executing ``callbackFn``. + */ + forEach(callbackfn: (elt: any) => void, thisArg?: any): void; + /** + * See :js:meth:`Array.map`. Creates a new array populated with the results of + * calling a provided function on every element in the calling ``Sequence``. + * @param callbackfn A function to execute for each element in the ``Sequence``. Its + * return value is added as a single element in the new array. + * @param thisArg A value to use as ``this`` when executing ``callbackFn``. + */ + map(callbackfn: (elt: any, index: number, array: any) => U, thisArg?: any): U[]; + /** + * See :js:meth:`Array.filter`. Creates a shallow copy of a portion of a given + * ``Sequence``, filtered down to just the elements from the given array that pass + * the test implemented by the provided function. + * @param predicate A function to execute for each element in the array. It + * should return a truthy value to keep the element in the resulting array, + * and a falsy value otherwise. + * @param thisArg A value to use as ``this`` when executing ``predicate``. + */ + filter(predicate: (elt: any, index: number, array: any) => boolean, thisArg?: any): any[]; + /** + * See :js:meth:`Array.some`. Tests whether at least one element in the + * ``Sequence`` passes the test implemented by the provided function. + * @param predicate A function to execute for each element in the + * ``Sequence``. It should return a truthy value to indicate the element + * passes the test, and a falsy value otherwise. + * @param thisArg A value to use as ``this`` when executing ``predicate``. + */ + some(predicate: (value: any, index: number, array: any[]) => unknown, thisArg?: any): boolean; + /** + * See :js:meth:`Array.every`. Tests whether every element in the ``Sequence`` + * passes the test implemented by the provided function. + * @param predicate A function to execute for each element in the + * ``Sequence``. It should return a truthy value to indicate the element + * passes the test, and a falsy value otherwise. + * @param thisArg A value to use as ``this`` when executing ``predicate``. + */ + every(predicate: (value: any, index: number, array: any[]) => unknown, thisArg?: any): boolean; + /** + * See :js:meth:`Array.reduce`. Executes a user-supplied "reducer" callback + * function on each element of the Sequence, in order, passing in the return + * value from the calculation on the preceding element. The final result of + * running the reducer across all elements of the Sequence is a single value. + * @param callbackfn A function to execute for each element in the ``Sequence``. Its + * return value is discarded. + */ + reduce(callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any) => any, initialValue?: any): any; + /** + * See :js:meth:`Array.reduceRight`. Applies a function against an accumulator + * and each value of the Sequence (from right to left) to reduce it to a + * single value. + * @param callbackfn A function to execute for each element in the Sequence. + * Its return value is discarded. + */ + reduceRight(callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any) => any, initialValue: any): any; + /** + * See :js:meth:`Array.at`. Takes an integer value and returns the item at + * that index. + * @param index Zero-based index of the Sequence element to be returned, + * converted to an integer. Negative index counts back from the end of the + * Sequence. + * @returns The element in the Sequence matching the given index. + */ + at(index: number): any; + /** + * The :js:meth:`Array.concat` method is used to merge two or more arrays. + * This method does not change the existing arrays, but instead returns a new + * array. + * @param rest Arrays and/or values to concatenate into a new array. + * @returns A new Array instance. + */ + concat(...rest: ConcatArray[]): any[]; + /** + * The :js:meth:`Array.includes` method determines whether a Sequence + * includes a certain value among its entries, returning true or false as + * appropriate. + * @param elt + * @returns + */ + includes(elt: any): any; + /** + * The :js:meth:`Array.entries` method returns a new iterator object that + * contains the key/value pairs for each index in the ``Sequence``. + * @returns A new iterator object. + */ + entries(): IterableIterator<[ + number, + any + ]>; + /** + * The :js:meth:`Array.keys` method returns a new iterator object that + * contains the keys for each index in the ``Sequence``. + * @returns A new iterator object. + */ + keys(): IterableIterator; + /** + * The :js:meth:`Array.values` method returns a new iterator object that + * contains the values for each index in the ``Sequence``. + * @returns A new iterator object. + */ + values(): IterableIterator; + /** + * The :js:meth:`Array.find` method returns the first element in the provided + * array that satisfies the provided testing function. + * @param predicate A function to execute for each element in the + * ``Sequence``. It should return a truthy value to indicate a matching + * element has been found, and a falsy value otherwise. + * @param thisArg A value to use as ``this`` when executing ``predicate``. + * @returns The first element in the ``Sequence`` that satisfies the provided + * testing function. + */ + find(predicate: (value: any, index: number, obj: any[]) => any, thisArg?: any): any; + /** + * The :js:meth:`Array.findIndex` method returns the index of the first + * element in the provided array that satisfies the provided testing function. + * @param predicate A function to execute for each element in the + * ``Sequence``. It should return a truthy value to indicate a matching + * element has been found, and a falsy value otherwise. + * @param thisArg A value to use as ``this`` when executing ``predicate``. + * @returns The index of the first element in the ``Sequence`` that satisfies + * the provided testing function. + */ + findIndex(predicate: (value: any, index: number, obj: any[]) => any, thisArg?: any): number; + toJSON(this: any): unknown[]; + /** + * Returns the object treated as a json adaptor. + * + * With a JsonAdaptor: + * 1. property access / modification / deletion is implemented with + * :meth:`~object.__getitem__`, :meth:`~object.__setitem__`, and + * :meth:`~object.__delitem__` respectively. + * 2. If an attribute is accessed and the result implements + * :meth:`~object.__getitem__` then the result will also be a json + * adaptor. + * + * For instance, ``JSON.stringify(proxy.asJsJson())`` acts like an + * inverse to Python's :py:func:`json.loads`. + */ + asJsJson(): PyProxy & {}; +} +declare class PyMutableSequence extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +/** @deprecated Use `import type { PyMutableSequence } from "pyodide/ffi"` instead */ +interface PyMutableSequence extends PyMutableSequenceMethods { +} +declare class PyMutableSequenceMethods { + /** + * The :js:meth:`Array.reverse` method reverses a :js:class:`PyMutableSequence` in + * place. + * @returns A reference to the same :js:class:`PyMutableSequence` + */ + reverse(): PyMutableSequence; + /** + * The :js:meth:`Array.sort` method sorts the elements of a + * :js:class:`PyMutableSequence` in place. + * @param compareFn A function that defines the sort order. + * @returns A reference to the same :js:class:`PyMutableSequence` + */ + sort(compareFn?: (a: any, b: any) => number): PyMutableSequence; + /** + * The :js:meth:`Array.splice` method changes the contents of a + * :js:class:`PyMutableSequence` by removing or replacing existing elements and/or + * adding new elements in place. + * @param start Zero-based index at which to start changing the + * :js:class:`PyMutableSequence`. + * @param deleteCount An integer indicating the number of elements in the + * :js:class:`PyMutableSequence` to remove from ``start``. + * @param items The elements to add to the :js:class:`PyMutableSequence`, beginning from + * ``start``. + * @returns An array containing the deleted elements. + */ + splice(start: number, deleteCount?: number, ...items: any[]): any[]; + /** + * The :js:meth:`Array.push` method adds the specified elements to the end of + * a :js:class:`PyMutableSequence`. + * @param elts The element(s) to add to the end of the :js:class:`PyMutableSequence`. + * @returns The new length property of the object upon which the method was + * called. + */ + push(...elts: any[]): any; + /** + * The :js:meth:`Array.pop` method removes the last element from a + * :js:class:`PyMutableSequence`. + * @returns The removed element from the :js:class:`PyMutableSequence`; undefined if the + * :js:class:`PyMutableSequence` is empty. + */ + pop(): any; + /** + * The :js:meth:`Array.shift` method removes the first element from a + * :js:class:`PyMutableSequence`. + * @returns The removed element from the :js:class:`PyMutableSequence`; undefined if the + * :js:class:`PyMutableSequence` is empty. + */ + shift(): any; + /** + * The :js:meth:`Array.unshift` method adds the specified elements to the + * beginning of a :js:class:`PyMutableSequence`. + * @param elts The elements to add to the front of the :js:class:`PyMutableSequence`. + * @returns The new length of the :js:class:`PyMutableSequence`. + */ + unshift(...elts: any[]): any; + /** + * The :js:meth:`Array.copyWithin` method shallow copies part of a + * :js:class:`PyMutableSequence` to another location in the same :js:class:`PyMutableSequence` + * without modifying its length. + * @param target Zero-based index at which to copy the sequence to. + * @param start Zero-based index at which to start copying elements from. + * @param end Zero-based index at which to end copying elements from. + * @returns The modified :js:class:`PyMutableSequence`. + */ + copyWithin(target: number, start?: number, end?: number): any; + /** + * The :js:meth:`Array.fill` method changes all elements in an array to a + * static value, from a start index to an end index. + * @param value Value to fill the array with. + * @param start Zero-based index at which to start filling. Default 0. + * @param end Zero-based index at which to end filling. Default + * ``list.length``. + * @returns + */ + fill(value: any, start?: number, end?: number): any; +} +declare class PyAwaitable extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +/** @deprecated Use `import type { PyAwaitable } from "pyodide/ffi"` instead */ +interface PyAwaitable extends Promise { +} +declare class PyCallable extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyCallable; +} +/** @deprecated Use `import type { PyCallable } from "pyodide/ffi"` instead */ +interface PyCallable extends PyCallableMethods { + (...args: any[]): any; +} +declare class PyCallableMethods { + /** + * The ``apply()`` method calls the specified function with a given this + * value, and arguments provided as an array (or an array-like object). Like + * :js:meth:`Function.apply`. + * + * @param thisArg The ``this`` argument. Has no effect unless the + * :js:class:`~pyodide.ffi.PyCallable` has :js:meth:`captureThis` set. If + * :js:meth:`captureThis` is set, it will be passed as the first argument to + * the Python function. + * @param jsargs The array of arguments + * @returns The result from the function call. + */ + apply(thisArg: any, jsargs: any): any; + /** + * Calls the function with a given this value and arguments provided + * individually. See :js:meth:`Function.call`. + * + * @param thisArg The ``this`` argument. Has no effect unless the + * :js:class:`~pyodide.ffi.PyCallable` has :js:meth:`captureThis` set. If + * :js:meth:`captureThis` is set, it will be passed as the first argument to + * the Python function. + * @param jsargs The arguments + * @returns The result from the function call. + */ + call(thisArg: any, ...jsargs: any): any; + /** + * Call the Python function. The first parameter controls various parameters + * that change the way the call is performed. + * + * @param options + * @param options.kwargs If true, the last argument is treated as a collection + * of keyword arguments. + * @param options.promising If true, the call is made with stack switching + * enabled. Not needed if the callee is an async + * Python function. + * @param options.relaxed If true, extra arguments are ignored instead of + * raising a :py:exc:`TypeError`. + * @param jsargs Arguments to the Python function. + * @returns + */ + callWithOptions({ relaxed, kwargs, promising, }: { + relaxed?: boolean; + kwargs?: boolean; + promising?: boolean; + }, ...jsargs: any): any; + /** + * Call the function with keyword arguments. The last argument must be an + * object with the keyword arguments. + */ + callKwargs(...jsargs: any): any; + /** + * Call the function in a "relaxed" manner. Any extra arguments will be + * ignored. This matches the behavior of JavaScript functions more accurately. + * + * Any extra arguments will be ignored. This matches the behavior of + * JavaScript functions more accurately. Missing arguments are **NOT** filled + * with `None`. If too few arguments are passed, this will still raise a + * TypeError. + * + * This uses :py:func:`pyodide.code.relaxed_call`. + */ + callRelaxed(...jsargs: any): any; + /** + * Call the function with keyword arguments in a "relaxed" manner. The last + * argument must be an object with the keyword arguments. Any extra arguments + * will be ignored. This matches the behavior of JavaScript functions more + * accurately. + * + * Missing arguments are **NOT** filled with ``None``. If too few arguments are + * passed, this will still raise a :py:exc:`TypeError`. Also, if the same argument is + * passed as both a keyword argument and a positional argument, it will raise + * an error. + * + * This uses :py:func:`pyodide.code.relaxed_call`. + */ + callKwargsRelaxed(...jsargs: any): any; + /** + * Call the function with stack switching enabled. The last argument must be + * an object with the keyword arguments. Functions called this way can use + * :py:meth:`~pyodide.ffi.run_sync` to block until an + * :py:class:`~collections.abc.Awaitable` is resolved. Only works in runtimes + * with JS Promise integration. + * + * .. admonition:: Experimental + * :class: warning + * + * This feature is not yet stable. + * + * @experimental + */ + callPromising(...jsargs: any): Promise; + /** + * Call the function with stack switching enabled. The last argument must be + * an object with the keyword arguments. Functions called this way can use + * :py:meth:`~pyodide.ffi.run_sync` to block until an + * :py:class:`~collections.abc.Awaitable` is resolved. Only works in runtimes + * with JS Promise integration. + * + * .. admonition:: Experimental + * :class: warning + * + * This feature is not yet stable. + * + * @experimental + */ + callPromisingKwargs(...jsargs: any): Promise; + /** + * The ``bind()`` method creates a new function that, when called, has its + * ``this`` keyword set to the provided value, with a given sequence of + * arguments preceding any provided when the new function is called. See + * :js:meth:`Function.bind`. + * + * If the :js:class:`~pyodide.ffi.PyCallable` does not have + * :js:meth:`captureThis` set, the ``this`` parameter will be discarded. If it + * does have :js:meth:`captureThis` set, ``thisArg`` will be set to the first + * argument of the Python function. The returned proxy and the original proxy + * have the same lifetime so destroying either destroys both. + * + * @param thisArg The value to be passed as the ``this`` parameter to the + * target function ``func`` when the bound function is called. + * @param jsargs Extra arguments to prepend to arguments provided to the bound + * function when invoking ``func``. + * @returns + */ + bind(thisArg: any, ...jsargs: any): PyProxy; + /** + * Returns a :js:class:`~pyodide.ffi.PyProxy` that passes ``this`` as the first argument to the + * Python function. The returned :js:class:`~pyodide.ffi.PyProxy` has the internal ``captureThis`` + * property set. + * + * It can then be used as a method on a JavaScript object. The returned proxy + * and the original proxy have the same lifetime so destroying either destroys + * both. + * + * For example: + * + * .. code-block:: pyodide + * + * let obj = { a : 7 }; + * pyodide.runPython(` + * def f(self): + * return self.a + * `); + * // Without captureThis, it doesn't work to use f as a method for obj: + * obj.f = pyodide.globals.get("f"); + * obj.f(); // raises "TypeError: f() missing 1 required positional argument: 'self'" + * // With captureThis, it works fine: + * obj.f = pyodide.globals.get("f").captureThis(); + * obj.f(); // returns 7 + * + * @returns The resulting :js:class:`~pyodide.ffi.PyProxy`. It has the same lifetime as the + * original :js:class:`~pyodide.ffi.PyProxy` but passes ``this`` to the wrapped function. + * + */ + captureThis(): PyProxy; +} +declare class PyBuffer extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyBuffer; +} +/** @deprecated Use `import type { PyBuffer } from "pyodide/ffi"` instead */ +interface PyBuffer extends PyBufferMethods { +} +declare class PyBufferMethods { + /** + * Get a view of the buffer data which is usable from JavaScript. No copy is + * ever performed. + * + * We do not support suboffsets, if the buffer requires suboffsets we will + * throw an error. JavaScript nd array libraries can't handle suboffsets + * anyways. In this case, you should use the :js:meth:`~PyProxy.toJs` api or + * copy the buffer to one that doesn't use suboffsets (using e.g., + * :py:func:`numpy.ascontiguousarray`). + * + * If the buffer stores big endian data or half floats, this function will + * fail without an explicit type argument. For big endian data you can use + * :js:meth:`~PyProxy.toJs`. :js:class:`DataView` has support for big endian + * data, so you might want to pass ``'dataview'`` as the type argument in that + * case. + * + * @param type The type of the :js:attr:`~pyodide.ffi.PyBufferView.data` field + * in the output. Should be one of: ``"i8"``, ``"u8"``, ``"u8clamped"``, + * ``"i16"``, ``"u16"``, ``"i32"``, ``"u32"``, ``"i32"``, ``"u32"``, + * ``"i64"``, ``"u64"``, ``"f32"``, ``"f64"``, or ``"dataview"``. This argument + * is optional, if absent :js:meth:`~pyodide.ffi.PyBuffer.getBuffer` will try + * to determine the appropriate output type based on the buffer format string + * (see :std:ref:`struct-format-strings`). + */ + getBuffer(type?: string): PyBufferView; +} +declare class PyDict extends PyProxy { + /** @private */ + static [Symbol.hasInstance](obj: any): obj is PyProxy; +} +/** @deprecated Use `import type { PyDict } from "pyodide/ffi"` instead */ +interface PyDict extends PyProxyWithGet, PyProxyWithSet, PyProxyWithHas, PyProxyWithLength, PyIterable { +} +/** @deprecated Use `import type { PyBufferView } from "pyodide/ffi"` instead */ +declare class PyBufferView { + /** + * The offset of the first entry of the array. For instance if our array + * is 3d, then you will find ``array[0,0,0]`` at + * ``pybuf.data[pybuf.offset]`` + */ + offset: number; + /** + * If the data is read only, you should not modify it. There is no way for us + * to enforce this, but it may cause very weird behavior. See + * :py:attr:`memoryview.readonly`. + */ + readonly: boolean; + /** + * The format string for the buffer. See :ref:`struct-format-strings` + * and :py:attr:`memoryview.format`. + */ + format: string; + /** + * How large is each entry in bytes? See :py:attr:`memoryview.itemsize`. + */ + itemsize: number; + /** + * The number of dimensions of the buffer. If ``ndim`` is 0, the buffer + * represents a single scalar or struct. Otherwise, it represents an + * array. See :py:attr:`memoryview.ndim`. + */ + ndim: number; + /** + * The total number of bytes the buffer takes up. This is equal to + * :js:attr:`buff.data.byteLength `. See + * :py:attr:`memoryview.nbytes`. + */ + nbytes: number; + /** + * The shape of the buffer, that is how long it is in each dimension. + * The length will be equal to ``ndim``. For instance, a 2x3x4 array + * would have shape ``[2, 3, 4]``. See :py:attr:`memoryview.shape`. + */ + shape: number[]; + /** + * An array of of length ``ndim`` giving the number of elements to skip + * to get to a new element in each dimension. See the example definition + * of a ``multiIndexToIndex`` function above. See :py:attr:`memoryview.strides`. + */ + strides: number[]; + /** + * The actual data. A typed array of an appropriate size backed by a segment + * of the WASM memory. + * + * The ``type`` argument of :js:meth:`~pyodide.ffi.PyBuffer.getBuffer` determines + * which sort of :js:class:`TypedArray` or :js:class:`DataView` to return. By + * default :js:meth:`~pyodide.ffi.PyBuffer.getBuffer` will look at the format string + * to determine the most appropriate option. Most often the result is a + * :js:class:`Uint8Array`. + * + * .. admonition:: Contiguity + * :class: warning + * + * If the buffer is not contiguous, the :js:attr:`~PyBufferView.readonly` + * TypedArray will contain data that is not part of the buffer. Modifying + * this data leads to undefined behavior. + * + * .. admonition:: Read only buffers + * :class: warning + * + * If :js:attr:`buffer.readonly ` is ``true``, you + * should not modify the buffer. Modifying a read only buffer leads to + * undefined behavior. + * + */ + data: TypedArray; + /** + * Is it C contiguous? See :py:attr:`memoryview.c_contiguous`. + */ + c_contiguous: boolean; + /** + * Is it Fortran contiguous? See :py:attr:`memoryview.f_contiguous`. + */ + f_contiguous: boolean; + /** + * @private + */ + _released: boolean; + /** + * @private + */ + _view_ptr: number; + /** @private */ + constructor(); + /** + * Release the buffer. This allows the memory to be reclaimed. + */ + release(): void; +} +type PackageType = "package" | "cpython_module" | "shared_library" | "static_library"; +interface PackageData { + name: string; + version: string; + fileName: string; + /** @experimental */ + packageType: PackageType; +} +declare function loadPackage(names: string | PyProxy | Array, options?: { + messageCallback?: (message: string) => void; + errorCallback?: (message: string) => void; + checkIntegrity?: boolean; +}): Promise>; +declare class PythonError extends Error { + /** + * The address of the error we are wrapping. We may later compare this + * against sys.last_exc. + * WARNING: we don't own a reference to this pointer, dereferencing it + * may be a use-after-free error! + * @private + */ + __error_address: number; + /** + * The name of the Python error class, e.g, :py:exc:`RuntimeError` or + * :py:exc:`KeyError`. + */ + type: string; + constructor(type: string, message: string, error_address: number); +} +type NativeFS = { + syncfs: () => Promise; +}; +declare class PyodideAPI { + /** @hidden */ + static version: string; + /** @hidden */ + static loadPackage: typeof loadPackage; + /** @hidden */ + static loadedPackages: { + [key: string]: string; + }; + /** @hidden */ + static ffi: { + PyProxy: typeof PyProxy; + PyProxyWithLength: typeof PyProxyWithLength; + PyProxyWithGet: typeof PyProxyWithGet; + PyProxyWithSet: typeof PyProxyWithSet; + PyProxyWithHas: typeof PyProxyWithHas; + PyDict: typeof PyDict; + PyIterable: typeof PyIterable; + PyAsyncIterable: typeof PyAsyncIterable; + PyIterator: typeof PyIterator; + PyAsyncIterator: typeof PyAsyncIterator; + PyGenerator: typeof PyGenerator; + PyAsyncGenerator: typeof PyAsyncGenerator; + PyAwaitable: typeof PyAwaitable; + PyCallable: typeof PyCallable; + PyBuffer: typeof PyBuffer; + PyBufferView: typeof PyBufferView; + PythonError: typeof PythonError; + PySequence: typeof PySequence; + PyMutableSequence: typeof PyMutableSequence; + }; + /** @hidden */ + static setStdin: typeof setStdin; + /** @hidden */ + static setStdout: typeof setStdout; + /** @hidden */ + static setStderr: typeof setStderr; + /** + * + * An alias to the global Python namespace. + * + * For example, to access a variable called ``foo`` in the Python global + * scope, use ``pyodide.globals.get("foo")`` + */ + static globals: PyProxy; + /** + * An alias to the `Emscripten File System API + * `_. + * + * This provides a wide range of POSIX-`like` file/device operations, including + * `mount + * `_ + * which can be used to extend the in-memory filesystem with features like `persistence + * `_. + * + * While all the file systems implementations are enabled, only the default + * ``MEMFS`` is guaranteed to work in all runtime settings. The implementations + * are available as members of ``FS.filesystems``: + * ``IDBFS``, ``NODEFS``, ``PROXYFS``, ``WORKERFS``. + */ + static FS: any; + /** + * An alias to the `Emscripten Path API + * `_. + * + * This provides a variety of operations for working with file system paths, such as + * ``dirname``, ``normalize``, and ``splitPath``. + */ + static PATH: any; + /** + * See :ref:`js-api-pyodide-canvas`. + * @hidetype + */ + static canvas: CanvasInterface; + /** + * A map from posix error names to error codes. + */ + static ERRNO_CODES: { + [code: string]: number; + }; + /** + * An alias to the Python :ref:`pyodide ` package. + * + * You can use this to call functions defined in the Pyodide Python package + * from JavaScript. + */ + static pyodide_py: PyProxy; + /** + * Inspect a Python code chunk and use :js:func:`pyodide.loadPackage` to install + * any known packages that the code chunk imports. Uses the Python API + * :func:`pyodide.code.find\_imports` to inspect the code. + * + * For example, given the following code as input + * + * .. code-block:: python + * + * import numpy as np + * x = np.array([1, 2, 3]) + * + * :js:func:`loadPackagesFromImports` will call + * ``pyodide.loadPackage(['numpy'])``. + * + * @param code The code to inspect. + * @param options Options passed to :js:func:`pyodide.loadPackage`. + * @param options.messageCallback A callback, called with progress messages + * (optional) + * @param options.errorCallback A callback, called with error/warning messages + * (optional) + * @param options.checkIntegrity If true, check the integrity of the downloaded + * packages (default: true) + * @async + */ + static loadPackagesFromImports(code: string, options?: { + messageCallback?: (message: string) => void; + errorCallback?: (message: string) => void; + checkIntegrity?: boolean; + }): Promise>; + /** + * Runs a string of Python code from JavaScript, using :py:func:`~pyodide.code.eval_code` + * to evaluate the code. If the last statement in the Python code is an + * expression (and the code doesn't end with a semicolon), the value of the + * expression is returned. + * + * @param code The Python code to run + * @param options + * @param options.globals An optional Python dictionary to use as the globals. + * Defaults to :js:attr:`pyodide.globals`. + * @param options.locals An optional Python dictionary to use as the locals. + * Defaults to the same as ``globals``. + * @param options.filename An optional string to use as the file name. + * Defaults to ``""``. If a custom file name is given, the + * traceback for any exception that is thrown will show source lines + * (unless the given file name starts with ``<`` and ends with ``>``). + * @returns The result of the Python code translated to JavaScript. See the + * documentation for :py:func:`~pyodide.code.eval_code` for more info. + * @example + * async function main(){ + * const pyodide = await loadPyodide(); + * console.log(pyodide.runPython("1 + 2")); + * // 3 + * + * const globals = pyodide.toPy({ x: 3 }); + * console.log(pyodide.runPython("x + 1", { globals })); + * // 4 + * + * const locals = pyodide.toPy({ arr: [1, 2, 3] }); + * console.log(pyodide.runPython("sum(arr)", { locals })); + * // 6 + * } + * main(); + */ + static runPython(code: string, options?: { + globals?: PyProxy; + locals?: PyProxy; + filename?: string; + }): any; + /** + * Run a Python code string with top level await using + * :py:func:`~pyodide.code.eval_code_async` to evaluate the code. Returns a promise which + * resolves when execution completes. If the last statement in the Python code + * is an expression (and the code doesn't end with a semicolon), the returned + * promise will resolve to the value of this expression. + * + * For example: + * + * .. code-block:: pyodide + * + * let result = await pyodide.runPythonAsync(` + * from js import fetch + * response = await fetch("./pyodide-lock.json") + * packages = await response.json() + * # If final statement is an expression, its value is returned to JavaScript + * len(packages.packages.object_keys()) + * `); + * console.log(result); // 79 + * + * .. admonition:: Python imports + * :class: warning + * + * Since pyodide 0.18.0, you must call :js:func:`loadPackagesFromImports` to + * import any python packages referenced via ``import`` statements in your + * code. This function will no longer do it for you. + * + * @param code The Python code to run + * @param options + * @param options.globals An optional Python dictionary to use as the globals. + * Defaults to :js:attr:`pyodide.globals`. + * @param options.locals An optional Python dictionary to use as the locals. + * Defaults to the same as ``globals``. + * @param options.filename An optional string to use as the file name. + * Defaults to ``""``. If a custom file name is given, the + * traceback for any exception that is thrown will show source lines + * (unless the given file name starts with ``<`` and ends with ``>``). + * @returns The result of the Python code translated to JavaScript. + * @async + */ + static runPythonAsync(code: string, options?: { + globals?: PyProxy; + locals?: PyProxy; + filename?: string; + }): Promise; + /** + * Registers the JavaScript object ``module`` as a JavaScript module named + * ``name``. This module can then be imported from Python using the standard + * Python import system. If another module by the same name has already been + * imported, this won't have much effect unless you also delete the imported + * module from :py:data:`sys.modules`. This calls + * :func:`~pyodide.ffi.register_js_module`. + * + * Any attributes of the JavaScript objects which are themselves objects will + * be treated as submodules: + * ```pyodide + * pyodide.registerJsModule("mymodule", { submodule: { value: 7 } }); + * pyodide.runPython(` + * from mymodule.submodule import value + * assert value == 7 + * `); + * ``` + * If you wish to prevent this, try the following instead: + * ```pyodide + * const sys = pyodide.pyimport("sys"); + * sys.modules.set("mymodule", { obj: { value: 7 } }); + * pyodide.runPython(` + * from mymodule import obj + * assert obj.value == 7 + * # attempting to treat obj as a submodule raises ModuleNotFoundError: + * # "No module named 'mymodule.obj'; 'mymodule' is not a package" + * from mymodule.obj import value + * `); + * ``` + * + * @param name Name of the JavaScript module to add + * @param module JavaScript object backing the module + */ + static registerJsModule(name: string, module: object): void; + /** + * Unregisters a JavaScript module with given name that has been previously + * registered with :js:func:`pyodide.registerJsModule` or + * :func:`~pyodide.ffi.register_js_module`. If a JavaScript module with that + * name does not already exist, will throw an error. Note that if the module has + * already been imported, this won't have much effect unless you also delete the + * imported module from :py:data:`sys.modules`. This calls + * :func:`~pyodide.ffi.unregister_js_module`. + * + * @param name Name of the JavaScript module to remove + */ + static unregisterJsModule(name: string): void; + /** + * Convert a JavaScript object to a Python object as best as possible. + * + * This is similar to :py:meth:`~pyodide.ffi.JsProxy.to_py` but for use from + * JavaScript. If the object is immutable or a :js:class:`~pyodide.ffi.PyProxy`, + * it will be returned unchanged. If the object cannot be converted into Python, + * it will be returned unchanged. + * + * See :ref:`type-translations-jsproxy-to-py` for more information. + * + * @param obj The object to convert. + * @param options + * @returns The object converted to Python. + */ + static toPy(obj: any, { depth, defaultConverter, }?: { + /** + * Optional argument to limit the depth of the conversion. + */ + depth: number; + /** + * Optional argument to convert objects with no default conversion. See the + * documentation of :py:meth:`~pyodide.ffi.JsProxy.to_py`. + */ + defaultConverter?: (value: any, converter: (value: any) => any, cacheConversion: (input: any, output: any) => void) => any; + }): any; + /** + * Imports a module and returns it. + * + * If `name` has no dot in it, then `pyimport(name)` is approximately + * equivalent to: + * ```js + * pyodide.runPython(`import ${name}; ${name}`) + * ``` + * except that `name` is not introduced into the Python global namespace. If + * the name has one or more dots in it, say it is of the form `path.name` + * where `name` has no dots but path may have zero or more dots. Then it is + * approximately the same as: + * ```js + * pyodide.runPython(`from ${path} import ${name}; ${name}`); + * ``` + * + * @param mod_name The name of the module to import + * + * @example + * pyodide.pyimport("math.comb")(4, 2) // returns 4 choose 2 = 6 + */ + static pyimport(mod_name: string): any; + /** + * Unpack an archive into a target directory. + * + * @param buffer The archive as an :js:class:`ArrayBuffer` or :js:class:`TypedArray`. + * @param format The format of the archive. Should be one of the formats + * recognized by :py:func:`shutil.unpack_archive`. By default the options are + * ``'bztar'``, ``'gztar'``, ``'tar'``, ``'zip'``, and ``'wheel'``. Several + * synonyms are accepted for each format, e.g., for ``'gztar'`` any of + * ``'.gztar'``, ``'.tar.gz'``, ``'.tgz'``, ``'tar.gz'`` or ``'tgz'`` are + * considered to be + * synonyms. + * + * @param options + * @param options.extractDir The directory to unpack the archive into. Defaults + * to the working directory. + */ + static unpackArchive(buffer: TypedArray | ArrayBuffer, format: string, options?: { + extractDir?: string; + }): void; + /** + * Mounts a :js:class:`FileSystemDirectoryHandle` into the target directory. + * Currently it's only possible to acquire a + * :js:class:`FileSystemDirectoryHandle` in Chrome. + * + * @param path The absolute path in the Emscripten file system to mount the + * native directory. If the directory does not exist, it will be created. If + * it does exist, it must be empty. + * @param fileSystemHandle A handle returned by + * :js:func:`navigator.storage.getDirectory() ` or + * :js:func:`window.showDirectoryPicker() `. + */ + static mountNativeFS(path: string, fileSystemHandle: FileSystemDirectoryHandle): Promise; + /** + * Mounts a host directory into Pyodide file system. Only works in node. + * + * @param emscriptenPath The absolute path in the Emscripten file system to + * mount the native directory. If the directory does not exist, it will be + * created. If it does exist, it must be empty. + * @param hostPath The host path to mount. It must be a directory that exists. + */ + static mountNodeFS(emscriptenPath: string, hostPath: string): void; + /** + * Tell Pyodide about Comlink. + * Necessary to enable importing Comlink proxies into Python. + */ + static registerComlink(Comlink: any): void; + /** + * Sets the interrupt buffer to be ``interrupt_buffer``. This is only useful + * when Pyodide is used in a webworker. The buffer should be a + * :js:class:`SharedArrayBuffer` shared with the main browser thread (or another + * worker). In that case, signal ``signum`` may be sent by writing ``signum`` + * into the interrupt buffer. If ``signum`` does not satisfy 0 < ``signum`` < 65 + * it will be silently ignored. + * + * You can disable interrupts by calling ``setInterruptBuffer(undefined)``. + * + * If you wish to trigger a :py:exc:`KeyboardInterrupt`, write ``SIGINT`` (a 2) + * into the interrupt buffer. + * + * By default ``SIGINT`` raises a :py:exc:`KeyboardInterrupt` and all other signals + * are ignored. You can install custom signal handlers with the signal module. + * Even signals that normally have special meaning and can't be overridden like + * ``SIGKILL`` and ``SIGSEGV`` are ignored by default and can be used for any + * purpose you like. + */ + static setInterruptBuffer(interrupt_buffer: TypedArray): void; + /** + * Throws a :py:exc:`KeyboardInterrupt` error if a :py:exc:`KeyboardInterrupt` has + * been requested via the interrupt buffer. + * + * This can be used to enable keyboard interrupts during execution of JavaScript + * code, just as :c:func:`PyErr_CheckSignals` is used to enable keyboard interrupts + * during execution of C code. + */ + static checkInterrupt(): void; + /** + * Turn on or off debug mode. In debug mode, some error messages are improved + * at a performance cost. + * @param debug If true, turn debug mode on. If false, turn debug mode off. + * @returns The old value of the debug flag. + */ + static setDebug(debug: boolean): boolean; + static makeMemorySnapshot(): Uint8Array; +} +/** @hidden */ +export type PyodideInterface = typeof PyodideAPI; +/** + * See documentation for loadPyodide. + * @hidden + */ +type ConfigType = { + indexURL: string; + packageCacheDir: string; + lockFileURL: string; + fullStdLib?: boolean; + stdLibURL?: string; + stdin?: () => string; + stdout?: (msg: string) => void; + stderr?: (msg: string) => void; + jsglobals?: object; + args: string[]; + _node_mounts: string[]; + env: { + [key: string]: string; + }; + packages: string[]; + _makeSnapshot: boolean; + enableRunUntilComplete: boolean; + checkAPIVersion: boolean; +}; +/** + * Load the main Pyodide wasm module and initialize it. + * + * @returns The :ref:`js-api-pyodide` module. + * @memberof globalThis + * @async + * @example + * async function main() { + * const pyodide = await loadPyodide({ + * fullStdLib: true, + * stdout: (msg) => console.log(`Pyodide: ${msg}`), + * }); + * console.log("Loaded Pyodide"); + * } + * main(); + */ +export declare function loadPyodide(options?: { + /** + * The URL from which Pyodide will load the main Pyodide runtime and + * packages. It is recommended that you leave this unchanged, providing an + * incorrect value can cause broken behavior. + * + * Default: The url that Pyodide is loaded from with the file name + * (``pyodide.js`` or ``pyodide.mjs``) removed. + */ + indexURL?: string; + /** + * The file path where packages will be cached in node. If a package + * exists in ``packageCacheDir`` it is loaded from there, otherwise it is + * downloaded from the JsDelivr CDN and then cached into ``packageCacheDir``. + * Only applies when running in node; ignored in browsers. + * + * Default: same as indexURL + */ + packageCacheDir?: string; + /** + * The URL from which Pyodide will load the Pyodide ``pyodide-lock.json`` lock + * file. You can produce custom lock files with :py:func:`micropip.freeze`. + * Default: ```${indexURL}/pyodide-lock.json``` + */ + lockFileURL?: string; + /** + * Load the full Python standard library. Setting this to false excludes + * unvendored modules from the standard library. + * Default: ``false`` + */ + fullStdLib?: boolean; + /** + * The URL from which to load the standard library ``python_stdlib.zip`` + * file. This URL includes the most of the Python standard library. Some + * stdlib modules were unvendored, and can be loaded separately + * with ``fullStdLib: true`` option or by their package name. + * Default: ```${indexURL}/python_stdlib.zip``` + */ + stdLibURL?: string; + /** + * Override the standard input callback. Should ask the user for one line of + * input. The :js:func:`pyodide.setStdin` function is more flexible and + * should be preferred. + */ + stdin?: () => string; + /** + * Override the standard output callback. The :js:func:`pyodide.setStdout` + * function is more flexible and should be preferred in most cases, but + * depending on the ``args`` passed to ``loadPyodide``, Pyodide may write to + * stdout on startup, which can only be controlled by passing a custom + * ``stdout`` function. + */ + stdout?: (msg: string) => void; + /** + * Override the standard error output callback. The + * :js:func:`pyodide.setStderr` function is more flexible and should be + * preferred in most cases, but depending on the ``args`` passed to + * ``loadPyodide``, Pyodide may write to stdout on startup, which can only + * be controlled by passing a custom ``stdout`` function. + */ + stderr?: (msg: string) => void; + /** + * The object that Pyodide will use for the ``js`` module. + * Default: ``globalThis`` + */ + jsglobals?: object; + /** + * Command line arguments to pass to Python on startup. See `Python command + * line interface options + * `_ for + * more details. Default: ``[]`` + */ + args?: string[]; + /** + * Environment variables to pass to Python. This can be accessed inside of + * Python at runtime via :py:data:`os.environ`. Certain environment variables change + * the way that Python loads: + * https://docs.python.org/3.10/using/cmdline.html#environment-variables + * Default: ``{}``. + * If ``env.HOME`` is undefined, it will be set to a default value of + * ``"/home/pyodide"`` + */ + env?: { + [key: string]: string; + }; + /** + * A list of packages to load as Pyodide is initializing. + * + * This is the same as loading the packages with + * :js:func:`pyodide.loadPackage` after Pyodide is loaded except using the + * ``packages`` option is more efficient because the packages are downloaded + * while Pyodide bootstraps itself. + */ + packages?: string[]; + /** + * Opt into the old behavior where :js:func:`PyProxy.toString() ` + * calls :py:func:`repr` and not :py:class:`str() `. + * @deprecated + */ + pyproxyToStringRepr?: boolean; + /** + * Make loop.run_until_complete() function correctly using stack switching + */ + enableRunUntilComplete?: boolean; + /** + * If true (default), throw an error if the version of Pyodide core does not + * match the version of the Pyodide js package. + */ + checkAPIVersion?: boolean; + /** + * Used by the cli runner. If we want to detect a virtual environment from + * the host file system, it needs to be visible from when `main()` is + * called. The directories in this list will be mounted at the same address + * into the Emscripten file system so that virtual environments work in the + * cli runner. + * @ignore + */ + _node_mounts?: string[]; + /** + * @ignore + */ + _makeSnapshot?: boolean; + /** + * @ignore + */ + _loadSnapshot?: Uint8Array | ArrayBuffer | PromiseLike; +}): Promise; + +export type {}; +export type {PackageData}; diff --git a/dingus/pyodide/pyodide.js b/dingus/pyodide/pyodide.js new file mode 100644 index 0000000..c4560bf --- /dev/null +++ b/dingus/pyodide/pyodide.js @@ -0,0 +1,6 @@ +"use strict";var loadPyodide=(()=>{var ne=Object.create;var O=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var oe=Object.getOwnPropertyNames;var ie=Object.getPrototypeOf,ae=Object.prototype.hasOwnProperty;var c=(e,t)=>O(e,"name",{value:t,configurable:!0}),p=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,o)=>(typeof require<"u"?require:t)[o]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var se=(e,t)=>{for(var o in t)O(e,o,{get:t[o],enumerable:!0})},$=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of oe(t))!ae.call(e,a)&&a!==o&&O(e,a,{get:()=>t[a],enumerable:!(r=re(t,a))||r.enumerable});return e};var b=(e,t,o)=>(o=e!=null?ne(ie(e)):{},$(t||!e||!e.__esModule?O(o,"default",{value:e,enumerable:!0}):o,e)),ce=e=>$(O({},"__esModule",{value:!0}),e);var Oe={};se(Oe,{loadPyodide:()=>B,version:()=>k});function le(e){return!isNaN(parseFloat(e))&&isFinite(e)}c(le,"_isNumber");function w(e){return e.charAt(0).toUpperCase()+e.substring(1)}c(w,"_capitalize");function L(e){return function(){return this[e]}}c(L,"_getter");var _=["isConstructor","isEval","isNative","isToplevel"],F=["columnNumber","lineNumber"],R=["fileName","functionName","source"],de=["args"],ue=["evalOrigin"],x=_.concat(F,R,de,ue);function g(e){if(e)for(var t=0;t-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(,.*$)/g,""));var i=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").replace(/^.*?\s+/,""),s=i.match(/ (\(.+\)$)/);i=s?i.replace(s[0],""):i;var l=this.extractLocation(s?s[1]:i),d=s&&i||void 0,u=["eval",""].indexOf(l[0])>-1?void 0:l[0];return new A({functionName:d,fileName:u,lineNumber:l[1],columnNumber:l[2],source:n})},this)},"ErrorStackParser$$parseV8OrIE"),parseFFOrSafari:c(function(r){var a=r.stack.split(` +`).filter(function(n){return!n.match(t)},this);return a.map(function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),n.indexOf("@")===-1&&n.indexOf(":")===-1)return new A({functionName:n});var i=/((.*".+"[^@]*)?[^@]*)(?:@)/,s=n.match(i),l=s&&s[1]?s[1]:void 0,d=this.extractLocation(n.replace(i,""));return new A({functionName:l,fileName:d[0],lineNumber:d[1],columnNumber:d[2],source:n})},this)},"ErrorStackParser$$parseFFOrSafari")}}c(fe,"ErrorStackParser");var me=new fe;var j=me;var y=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&!process.browser,T=y&&typeof module<"u"&&typeof module.exports<"u"&&typeof p<"u"&&typeof __dirname<"u",H=y&&!T,Le=typeof globalThis.Bun<"u",pe=typeof Deno<"u",V=!y&&!pe,z=V&&typeof window=="object"&&typeof document=="object"&&typeof document.createElement=="function"&&typeof sessionStorage=="object"&&typeof importScripts!="function",q=V&&typeof importScripts=="function"&&typeof self=="object",Te=typeof navigator=="object"&&typeof navigator.userAgent=="string"&&navigator.userAgent.indexOf("Chrome")==-1&&navigator.userAgent.indexOf("Safari")>-1;var K,U,Y,J,C;async function M(){if(!y||(K=(await import(/* webpackIgnore */"node:url")).default,J=await import(/* webpackIgnore */"node:fs"),C=await import(/* webpackIgnore */"node:fs/promises"),Y=(await import(/* webpackIgnore */"node:vm")).default,U=await import(/* webpackIgnore */"node:path"),W=U.sep,typeof p<"u"))return;let e=J,t=await import(/* webpackIgnore */"node:crypto"),o=await import(/* webpackIgnore */"ws"),r=await import(/* webpackIgnore */"node:child_process"),a={fs:e,crypto:t,ws:o,child_process:r};globalThis.require=function(n){return a[n]}}c(M,"initNodeModules");function ge(e,t){return U.resolve(t||".",e)}c(ge,"node_resolvePath");function ye(e,t){return t===void 0&&(t=location),new URL(e,t).toString()}c(ye,"browser_resolvePath");var D;y?D=ge:D=ye;var W;y||(W="/");function be(e,t){return e.startsWith("file://")&&(e=e.slice(7)),e.includes("://")?{response:fetch(e)}:{binary:C.readFile(e).then(o=>new Uint8Array(o.buffer,o.byteOffset,o.byteLength))}}c(be,"node_getBinaryResponse");function ve(e,t){let o=new URL(e,location);return{response:fetch(o,t?{integrity:t}:{})}}c(ve,"browser_getBinaryResponse");var P;y?P=be:P=ve;async function G(e,t){let{response:o,binary:r}=P(e,t);if(r)return r;let a=await o;if(!a.ok)throw new Error(`Failed to load '${e}': request failed.`);return new Uint8Array(await a.arrayBuffer())}c(G,"loadBinaryFile");var I;if(z)I=c(async e=>await import(/* webpackIgnore */e),"loadScript");else if(q)I=c(async e=>{try{globalThis.importScripts(e)}catch(t){if(t instanceof TypeError)await import(/* webpackIgnore */e);else throw t}},"loadScript");else if(y)I=he;else throw new Error("Cannot determine runtime environment");async function he(e){e.startsWith("file://")&&(e=e.slice(7)),e.includes("://")?Y.runInThisContext(await(await fetch(e)).text()):await import(/* webpackIgnore */K.pathToFileURL(e).href)}c(he,"nodeLoadScript");async function X(e){if(y){await M();let t=await C.readFile(e,{encoding:"utf8"});return JSON.parse(t)}else return await(await fetch(e)).json()}c(X,"loadLockFile");async function Q(){if(T)return __dirname;let e;try{throw new Error}catch(r){e=r}let t=j.parse(e)[0].fileName;if(y&&!t.startsWith("file://")&&(t=`file://${t}`),H){let r=await import(/* webpackIgnore */"node:path");return(await import(/* webpackIgnore */"node:url")).fileURLToPath(r.dirname(t))}let o=t.lastIndexOf(W);if(o===-1)throw new Error("Could not extract indexURL path from pyodide module location");return t.slice(0,o)}c(Q,"calculateDirname");function Z(e){let t=e.FS,o=e.FS.filesystems.MEMFS,r=e.PATH,a={DIR_MODE:16895,FILE_MODE:33279,mount:function(n){if(!n.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return o.mount.apply(null,arguments)},syncfs:async(n,i,s)=>{try{let l=a.getLocalSet(n),d=await a.getRemoteSet(n),u=i?d:l,m=i?l:d;await a.reconcile(n,u,m),s(null)}catch(l){s(l)}},getLocalSet:n=>{let i=Object.create(null);function s(u){return u!=="."&&u!==".."}c(s,"isRealDir");function l(u){return m=>r.join2(u,m)}c(l,"toAbsolute");let d=t.readdir(n.mountpoint).filter(s).map(l(n.mountpoint));for(;d.length;){let u=d.pop(),m=t.stat(u);t.isDir(m.mode)&&d.push.apply(d,t.readdir(u).filter(s).map(l(u))),i[u]={timestamp:m.mtime,mode:m.mode}}return{type:"local",entries:i}},getRemoteSet:async n=>{let i=Object.create(null),s=await Ee(n.opts.fileSystemHandle);for(let[l,d]of s)l!=="."&&(i[r.join2(n.mountpoint,l)]={timestamp:d.kind==="file"?(await d.getFile()).lastModifiedDate:new Date,mode:d.kind==="file"?a.FILE_MODE:a.DIR_MODE});return{type:"remote",entries:i,handles:s}},loadLocalEntry:n=>{let s=t.lookupPath(n).node,l=t.stat(n);if(t.isDir(l.mode))return{timestamp:l.mtime,mode:l.mode};if(t.isFile(l.mode))return s.contents=o.getFileDataAsTypedArray(s),{timestamp:l.mtime,mode:l.mode,contents:s.contents};throw new Error("node type not supported")},storeLocalEntry:(n,i)=>{if(t.isDir(i.mode))t.mkdirTree(n,i.mode);else if(t.isFile(i.mode))t.writeFile(n,i.contents,{canOwn:!0});else throw new Error("node type not supported");t.chmod(n,i.mode),t.utime(n,i.timestamp,i.timestamp)},removeLocalEntry:n=>{var i=t.stat(n);t.isDir(i.mode)?t.rmdir(n):t.isFile(i.mode)&&t.unlink(n)},loadRemoteEntry:async n=>{if(n.kind==="file"){let i=await n.getFile();return{contents:new Uint8Array(await i.arrayBuffer()),mode:a.FILE_MODE,timestamp:i.lastModifiedDate}}else{if(n.kind==="directory")return{mode:a.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+n.kind)}},storeRemoteEntry:async(n,i,s)=>{let l=n.get(r.dirname(i)),d=t.isFile(s.mode)?await l.getFileHandle(r.basename(i),{create:!0}):await l.getDirectoryHandle(r.basename(i),{create:!0});if(d.kind==="file"){let u=await d.createWritable();await u.write(s.contents),await u.close()}n.set(i,d)},removeRemoteEntry:async(n,i)=>{await n.get(r.dirname(i)).removeEntry(r.basename(i)),n.delete(i)},reconcile:async(n,i,s)=>{let l=0,d=[];Object.keys(i.entries).forEach(function(f){let v=i.entries[f],N=s.entries[f];(!N||t.isFile(v.mode)&&v.timestamp.getTime()>N.timestamp.getTime())&&(d.push(f),l++)}),d.sort();let u=[];if(Object.keys(s.entries).forEach(function(f){i.entries[f]||(u.push(f),l++)}),u.sort().reverse(),!l)return;let m=i.type==="remote"?i.handles:s.handles;for(let f of d){let v=r.normalize(f.replace(n.mountpoint,"/")).substring(1);if(s.type==="local"){let N=m.get(v),te=await a.loadRemoteEntry(N);a.storeLocalEntry(f,te)}else{let N=a.loadLocalEntry(f);await a.storeRemoteEntry(m,v,N)}}for(let f of u)if(s.type==="local")a.removeLocalEntry(f);else{let v=r.normalize(f.replace(n.mountpoint,"/")).substring(1);await a.removeRemoteEntry(m,v)}}};e.FS.filesystems.NATIVEFS_ASYNC=a}c(Z,"initializeNativeFS");var Ee=c(async e=>{let t=[];async function o(a){for await(let n of a.values())t.push(n),n.kind==="directory"&&await o(n)}c(o,"collect"),await o(e);let r=new Map;r.set(".",e);for(let a of t){let n=(await e.resolve(a)).join("/");r.set(n,a)}return r},"getFsHandles");function ee(e){let t={noImageDecoding:!0,noAudioDecoding:!0,noWasmDecoding:!1,preRun:Fe(e),quit(o,r){throw t.exited={status:o,toThrow:r},r},print:e.stdout,printErr:e.stderr,arguments:e.args,API:{config:e},locateFile:o=>e.indexURL+o,instantiateWasm:Re(e.indexURL)};return t}c(ee,"createSettings");function Se(e){return function(t){let o="/";try{t.FS.mkdirTree(e)}catch(r){console.error(`Error occurred while making a home directory '${e}':`),console.error(r),console.error(`Using '${o}' for a home directory instead`),e=o}t.FS.chdir(e)}}c(Se,"createHomeDirectory");function we(e){return function(t){Object.assign(t.ENV,e)}}c(we,"setEnvironment");function Ne(e){return t=>{for(let o of e)t.FS.mkdirTree(o),t.FS.mount(t.FS.filesystems.NODEFS,{root:o},o)}}c(Ne,"mountLocalDirectories");function _e(e){let t=G(e);return o=>{let r=o._py_version_major(),a=o._py_version_minor();o.FS.mkdirTree("/lib"),o.FS.mkdirTree(`/lib/python${r}.${a}/site-packages`),o.addRunDependency("install-stdlib"),t.then(n=>{o.FS.writeFile(`/lib/python${r}${a}.zip`,n)}).catch(n=>{console.error("Error occurred while installing the standard library:"),console.error(n)}).finally(()=>{o.removeRunDependency("install-stdlib")})}}c(_e,"installStdlib");function Fe(e){let t;return e.stdLibURL!=null?t=e.stdLibURL:t=e.indexURL+"python_stdlib.zip",[_e(t),Se(e.env.HOME),we(e.env),Ne(e._node_mounts),Z]}c(Fe,"getFileSystemInitializationFuncs");function Re(e){let{binary:t,response:o}=P(e+"pyodide.asm.wasm");return function(r,a){return async function(){try{let n;o?n=await WebAssembly.instantiateStreaming(o,r):n=await WebAssembly.instantiate(await t,r);let{instance:i,module:s}=n;typeof WasmOffsetConverter<"u"&&(wasmOffsetConverter=new WasmOffsetConverter(wasmBinary,s)),a(i,s)}catch(n){console.warn("wasm instantiation failed!"),console.warn(n)}}(),{}}}c(Re,"getInstantiateWasmFunc");var k="0.26.2";async function B(e={}){var u,m;await M();let t=e.indexURL||await Q();t=D(t),t.endsWith("/")||(t+="/"),e.indexURL=t;let o={fullStdLib:!1,jsglobals:globalThis,stdin:globalThis.prompt?globalThis.prompt:void 0,lockFileURL:t+"pyodide-lock.json",args:[],_node_mounts:[],env:{},packageCacheDir:t,packages:[],enableRunUntilComplete:!1,checkAPIVersion:!0},r=Object.assign(o,e);(u=r.env).HOME??(u.HOME="/home/pyodide"),(m=r.env).PYTHONINSPECT??(m.PYTHONINSPECT="1");let a=ee(r),n=a.API;if(n.lockFilePromise=X(r.lockFileURL),typeof _createPyodideModule!="function"){let f=`${r.indexURL}pyodide.asm.js`;await I(f)}let i;if(e._loadSnapshot){let f=await e._loadSnapshot;ArrayBuffer.isView(f)?i=f:i=new Uint8Array(f),a.noInitialRun=!0,a.INITIAL_MEMORY=i.length}let s=await _createPyodideModule(a);if(a.exited)throw a.exited.toThrow;if(e.pyproxyToStringRepr&&n.setPyProxyToStringMethod(!0),n.version!==k&&r.checkAPIVersion)throw new Error(`Pyodide version does not match: '${k}' <==> '${n.version}'. If you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);s.locateFile=f=>{throw new Error("Didn't expect to load any more file_packager files!")};let l;i&&(l=n.restoreSnapshot(i));let d=n.finalizeBootstrap(l);return n.sys.path.insert(0,n.config.env.HOME),d.version.includes("dev")||n.setCdnUrl(`https://cdn.jsdelivr.net/pyodide/v${d.version}/full/`),n._pyodide.set_excepthook(),await n.packageIndexReady,n.initializeStreams(r.stdin,r.stdout,r.stderr),d}c(B,"loadPyodide");globalThis.loadPyodide=B;return ce(Oe);})(); +try{Object.assign(exports,loadPyodide)}catch(_){} +globalThis.loadPyodide=loadPyodide.loadPyodide; +//# sourceMappingURL=pyodide.js.map diff --git a/dingus/pyodide/pyodide.mjs b/dingus/pyodide/pyodide.mjs new file mode 100644 index 0000000..82aba49 --- /dev/null +++ b/dingus/pyodide/pyodide.mjs @@ -0,0 +1,4 @@ +var Q=Object.defineProperty;var c=(e,t)=>Q(e,"name",{value:t,configurable:!0}),O=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,i)=>(typeof require<"u"?require:t)[i]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});function Z(e){return!isNaN(parseFloat(e))&&isFinite(e)}c(Z,"_isNumber");function E(e){return e.charAt(0).toUpperCase()+e.substring(1)}c(E,"_capitalize");function P(e){return function(){return this[e]}}c(P,"_getter");var w=["isConstructor","isEval","isNative","isToplevel"],N=["columnNumber","lineNumber"],_=["fileName","functionName","source"],ee=["args"],te=["evalOrigin"],I=w.concat(N,_,ee,te);function p(e){if(e)for(var t=0;t-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(,.*$)/g,""));var o=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").replace(/^.*?\s+/,""),s=o.match(/ (\(.+\)$)/);o=s?o.replace(s[0],""):o;var l=this.extractLocation(s?s[1]:o),d=s&&o||void 0,u=["eval",""].indexOf(l[0])>-1?void 0:l[0];return new x({functionName:d,fileName:u,lineNumber:l[1],columnNumber:l[2],source:n})},this)},"ErrorStackParser$$parseV8OrIE"),parseFFOrSafari:c(function(r){var a=r.stack.split(` +`).filter(function(n){return!n.match(t)},this);return a.map(function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),n.indexOf("@")===-1&&n.indexOf(":")===-1)return new x({functionName:n});var o=/((.*".+"[^@]*)?[^@]*)(?:@)/,s=n.match(o),l=s&&s[1]?s[1]:void 0,d=this.extractLocation(n.replace(o,""));return new x({functionName:l,fileName:d[0],lineNumber:d[1],columnNumber:d[2],source:n})},this)},"ErrorStackParser$$parseFFOrSafari")}}c(ne,"ErrorStackParser");var re=new ne;var M=re;var g=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&!process.browser,A=g&&typeof module<"u"&&typeof module.exports<"u"&&typeof O<"u"&&typeof __dirname<"u",W=g&&!A,Ne=typeof globalThis.Bun<"u",oe=typeof Deno<"u",B=!g&&!oe,$=B&&typeof window=="object"&&typeof document=="object"&&typeof document.createElement=="function"&&typeof sessionStorage=="object"&&typeof importScripts!="function",j=B&&typeof importScripts=="function"&&typeof self=="object",_e=typeof navigator=="object"&&typeof navigator.userAgent=="string"&&navigator.userAgent.indexOf("Chrome")==-1&&navigator.userAgent.indexOf("Safari")>-1;var V,L,z,H,D;async function T(){if(!g||(V=(await import("node:url")).default,H=await import("node:fs"),D=await import("node:fs/promises"),z=(await import("node:vm")).default,L=await import("node:path"),U=L.sep,typeof O<"u"))return;let e=H,t=await import("node:crypto"),i=await import("ws"),r=await import("node:child_process"),a={fs:e,crypto:t,ws:i,child_process:r};globalThis.require=function(n){return a[n]}}c(T,"initNodeModules");function ie(e,t){return L.resolve(t||".",e)}c(ie,"node_resolvePath");function ae(e,t){return t===void 0&&(t=location),new URL(e,t).toString()}c(ae,"browser_resolvePath");var k;g?k=ie:k=ae;var U;g||(U="/");function se(e,t){return e.startsWith("file://")&&(e=e.slice(7)),e.includes("://")?{response:fetch(e)}:{binary:D.readFile(e).then(i=>new Uint8Array(i.buffer,i.byteOffset,i.byteLength))}}c(se,"node_getBinaryResponse");function ce(e,t){let i=new URL(e,location);return{response:fetch(i,t?{integrity:t}:{})}}c(ce,"browser_getBinaryResponse");var R;g?R=se:R=ce;async function q(e,t){let{response:i,binary:r}=R(e,t);if(r)return r;let a=await i;if(!a.ok)throw new Error(`Failed to load '${e}': request failed.`);return new Uint8Array(await a.arrayBuffer())}c(q,"loadBinaryFile");var F;if($)F=c(async e=>await import(e),"loadScript");else if(j)F=c(async e=>{try{globalThis.importScripts(e)}catch(t){if(t instanceof TypeError)await import(e);else throw t}},"loadScript");else if(g)F=le;else throw new Error("Cannot determine runtime environment");async function le(e){e.startsWith("file://")&&(e=e.slice(7)),e.includes("://")?z.runInThisContext(await(await fetch(e)).text()):await import(V.pathToFileURL(e).href)}c(le,"nodeLoadScript");async function J(e){if(g){await T();let t=await D.readFile(e,{encoding:"utf8"});return JSON.parse(t)}else return await(await fetch(e)).json()}c(J,"loadLockFile");async function K(){if(A)return __dirname;let e;try{throw new Error}catch(r){e=r}let t=M.parse(e)[0].fileName;if(g&&!t.startsWith("file://")&&(t=`file://${t}`),W){let r=await import("node:path");return(await import("node:url")).fileURLToPath(r.dirname(t))}let i=t.lastIndexOf(U);if(i===-1)throw new Error("Could not extract indexURL path from pyodide module location");return t.slice(0,i)}c(K,"calculateDirname");function Y(e){let t=e.FS,i=e.FS.filesystems.MEMFS,r=e.PATH,a={DIR_MODE:16895,FILE_MODE:33279,mount:function(n){if(!n.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return i.mount.apply(null,arguments)},syncfs:async(n,o,s)=>{try{let l=a.getLocalSet(n),d=await a.getRemoteSet(n),u=o?d:l,m=o?l:d;await a.reconcile(n,u,m),s(null)}catch(l){s(l)}},getLocalSet:n=>{let o=Object.create(null);function s(u){return u!=="."&&u!==".."}c(s,"isRealDir");function l(u){return m=>r.join2(u,m)}c(l,"toAbsolute");let d=t.readdir(n.mountpoint).filter(s).map(l(n.mountpoint));for(;d.length;){let u=d.pop(),m=t.stat(u);t.isDir(m.mode)&&d.push.apply(d,t.readdir(u).filter(s).map(l(u))),o[u]={timestamp:m.mtime,mode:m.mode}}return{type:"local",entries:o}},getRemoteSet:async n=>{let o=Object.create(null),s=await de(n.opts.fileSystemHandle);for(let[l,d]of s)l!=="."&&(o[r.join2(n.mountpoint,l)]={timestamp:d.kind==="file"?(await d.getFile()).lastModifiedDate:new Date,mode:d.kind==="file"?a.FILE_MODE:a.DIR_MODE});return{type:"remote",entries:o,handles:s}},loadLocalEntry:n=>{let s=t.lookupPath(n).node,l=t.stat(n);if(t.isDir(l.mode))return{timestamp:l.mtime,mode:l.mode};if(t.isFile(l.mode))return s.contents=i.getFileDataAsTypedArray(s),{timestamp:l.mtime,mode:l.mode,contents:s.contents};throw new Error("node type not supported")},storeLocalEntry:(n,o)=>{if(t.isDir(o.mode))t.mkdirTree(n,o.mode);else if(t.isFile(o.mode))t.writeFile(n,o.contents,{canOwn:!0});else throw new Error("node type not supported");t.chmod(n,o.mode),t.utime(n,o.timestamp,o.timestamp)},removeLocalEntry:n=>{var o=t.stat(n);t.isDir(o.mode)?t.rmdir(n):t.isFile(o.mode)&&t.unlink(n)},loadRemoteEntry:async n=>{if(n.kind==="file"){let o=await n.getFile();return{contents:new Uint8Array(await o.arrayBuffer()),mode:a.FILE_MODE,timestamp:o.lastModifiedDate}}else{if(n.kind==="directory")return{mode:a.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+n.kind)}},storeRemoteEntry:async(n,o,s)=>{let l=n.get(r.dirname(o)),d=t.isFile(s.mode)?await l.getFileHandle(r.basename(o),{create:!0}):await l.getDirectoryHandle(r.basename(o),{create:!0});if(d.kind==="file"){let u=await d.createWritable();await u.write(s.contents),await u.close()}n.set(o,d)},removeRemoteEntry:async(n,o)=>{await n.get(r.dirname(o)).removeEntry(r.basename(o)),n.delete(o)},reconcile:async(n,o,s)=>{let l=0,d=[];Object.keys(o.entries).forEach(function(f){let y=o.entries[f],S=s.entries[f];(!S||t.isFile(y.mode)&&y.timestamp.getTime()>S.timestamp.getTime())&&(d.push(f),l++)}),d.sort();let u=[];if(Object.keys(s.entries).forEach(function(f){o.entries[f]||(u.push(f),l++)}),u.sort().reverse(),!l)return;let m=o.type==="remote"?o.handles:s.handles;for(let f of d){let y=r.normalize(f.replace(n.mountpoint,"/")).substring(1);if(s.type==="local"){let S=m.get(y),X=await a.loadRemoteEntry(S);a.storeLocalEntry(f,X)}else{let S=a.loadLocalEntry(f);await a.storeRemoteEntry(m,y,S)}}for(let f of u)if(s.type==="local")a.removeLocalEntry(f);else{let y=r.normalize(f.replace(n.mountpoint,"/")).substring(1);await a.removeRemoteEntry(m,y)}}};e.FS.filesystems.NATIVEFS_ASYNC=a}c(Y,"initializeNativeFS");var de=c(async e=>{let t=[];async function i(a){for await(let n of a.values())t.push(n),n.kind==="directory"&&await i(n)}c(i,"collect"),await i(e);let r=new Map;r.set(".",e);for(let a of t){let n=(await e.resolve(a)).join("/");r.set(n,a)}return r},"getFsHandles");function G(e){let t={noImageDecoding:!0,noAudioDecoding:!0,noWasmDecoding:!1,preRun:ge(e),quit(i,r){throw t.exited={status:i,toThrow:r},r},print:e.stdout,printErr:e.stderr,arguments:e.args,API:{config:e},locateFile:i=>e.indexURL+i,instantiateWasm:ye(e.indexURL)};return t}c(G,"createSettings");function ue(e){return function(t){let i="/";try{t.FS.mkdirTree(e)}catch(r){console.error(`Error occurred while making a home directory '${e}':`),console.error(r),console.error(`Using '${i}' for a home directory instead`),e=i}t.FS.chdir(e)}}c(ue,"createHomeDirectory");function fe(e){return function(t){Object.assign(t.ENV,e)}}c(fe,"setEnvironment");function me(e){return t=>{for(let i of e)t.FS.mkdirTree(i),t.FS.mount(t.FS.filesystems.NODEFS,{root:i},i)}}c(me,"mountLocalDirectories");function pe(e){let t=q(e);return i=>{let r=i._py_version_major(),a=i._py_version_minor();i.FS.mkdirTree("/lib"),i.FS.mkdirTree(`/lib/python${r}.${a}/site-packages`),i.addRunDependency("install-stdlib"),t.then(n=>{i.FS.writeFile(`/lib/python${r}${a}.zip`,n)}).catch(n=>{console.error("Error occurred while installing the standard library:"),console.error(n)}).finally(()=>{i.removeRunDependency("install-stdlib")})}}c(pe,"installStdlib");function ge(e){let t;return e.stdLibURL!=null?t=e.stdLibURL:t=e.indexURL+"python_stdlib.zip",[pe(t),ue(e.env.HOME),fe(e.env),me(e._node_mounts),Y]}c(ge,"getFileSystemInitializationFuncs");function ye(e){let{binary:t,response:i}=R(e+"pyodide.asm.wasm");return function(r,a){return async function(){try{let n;i?n=await WebAssembly.instantiateStreaming(i,r):n=await WebAssembly.instantiate(await t,r);let{instance:o,module:s}=n;typeof WasmOffsetConverter<"u"&&(wasmOffsetConverter=new WasmOffsetConverter(wasmBinary,s)),a(o,s)}catch(n){console.warn("wasm instantiation failed!"),console.warn(n)}}(),{}}}c(ye,"getInstantiateWasmFunc");var C="0.26.2";async function $e(e={}){var u,m;await T();let t=e.indexURL||await K();t=k(t),t.endsWith("/")||(t+="/"),e.indexURL=t;let i={fullStdLib:!1,jsglobals:globalThis,stdin:globalThis.prompt?globalThis.prompt:void 0,lockFileURL:t+"pyodide-lock.json",args:[],_node_mounts:[],env:{},packageCacheDir:t,packages:[],enableRunUntilComplete:!1,checkAPIVersion:!0},r=Object.assign(i,e);(u=r.env).HOME??(u.HOME="/home/pyodide"),(m=r.env).PYTHONINSPECT??(m.PYTHONINSPECT="1");let a=G(r),n=a.API;if(n.lockFilePromise=J(r.lockFileURL),typeof _createPyodideModule!="function"){let f=`${r.indexURL}pyodide.asm.js`;await F(f)}let o;if(e._loadSnapshot){let f=await e._loadSnapshot;ArrayBuffer.isView(f)?o=f:o=new Uint8Array(f),a.noInitialRun=!0,a.INITIAL_MEMORY=o.length}let s=await _createPyodideModule(a);if(a.exited)throw a.exited.toThrow;if(e.pyproxyToStringRepr&&n.setPyProxyToStringMethod(!0),n.version!==C&&r.checkAPIVersion)throw new Error(`Pyodide version does not match: '${C}' <==> '${n.version}'. If you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);s.locateFile=f=>{throw new Error("Didn't expect to load any more file_packager files!")};let l;o&&(l=n.restoreSnapshot(o));let d=n.finalizeBootstrap(l);return n.sys.path.insert(0,n.config.env.HOME),d.version.includes("dev")||n.setCdnUrl(`https://cdn.jsdelivr.net/pyodide/v${d.version}/full/`),n._pyodide.set_excepthook(),await n.packageIndexReady,n.initializeStreams(r.stdin,r.stdout,r.stderr),d}c($e,"loadPyodide");export{$e as loadPyodide,C as version}; +//# sourceMappingURL=pyodide.mjs.map diff --git a/dingus/pyodide/python_stdlib.zip b/dingus/pyodide/python_stdlib.zip new file mode 100644 index 0000000..d984f67 Binary files /dev/null and b/dingus/pyodide/python_stdlib.zip differ diff --git a/dingus/srvit.py b/dingus/srvit.py new file mode 100755 index 0000000..31b0c81 --- /dev/null +++ b/dingus/srvit.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +import os + +from http.server import test, SimpleHTTPRequestHandler, ThreadingHTTPServer + + +class MyHTTPRequestHandler(SimpleHTTPRequestHandler): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.extensions_map[".js"] = "application/javascript" + self.extensions_map[".wasm"] = "application/wasm" + + def end_headers(self): + self.send_my_headers() + super().end_headers() + + def send_my_headers(self): + if "pyodide" not in self.path: + self.send_header("Cache-Control", "no-cache, no-store, must-revalidate") + self.send_header("Pragma", "no-cache") + self.send_header("Expires", "0") + + self.send_header("Cross-Origin-Opener-Policy", "same-origin") + self.send_header("Cross-Origin-Embedder-Policy", "require-corp") + + +if __name__ == "__main__": + import argparse + import contextlib + + parser = argparse.ArgumentParser() + parser.add_argument( + "-b", + "--bind", + metavar="ADDRESS", + help="bind to this address " "(default: all interfaces)", + ) + parser.add_argument( + "-d", + "--directory", + default=os.getcwd(), + help="serve this directory " "(default: current directory)", + ) + parser.add_argument( + "-p", + "--protocol", + metavar="VERSION", + default="HTTP/1.0", + help="conform to this HTTP version " "(default: %(default)s)", + ) + parser.add_argument( + "port", + default=8000, + type=int, + nargs="?", + help="bind to this port " "(default: %(default)s)", + ) + args = parser.parse_args() + handler_class = MyHTTPRequestHandler + + # ensure dual-stack is not disabled; ref #38907 + class DualStackServer(ThreadingHTTPServer): + + def server_bind(self): + # suppress exception when protocol is IPv4 + with contextlib.suppress(Exception): + self.socket.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0) + return super().server_bind() + + def finish_request(self, request, client_address): + self.RequestHandlerClass(request, client_address, self, directory=args.directory) + + test( + HandlerClass=handler_class, + ServerClass=DualStackServer, + port=args.port, + bind=args.bind, + protocol=args.protocol, + ) diff --git a/dingus/style.css b/dingus/style.css new file mode 100644 index 0000000..bf4a03e --- /dev/null +++ b/dingus/style.css @@ -0,0 +1,41 @@ +/* set codemirror ide height to 100% of the textarea */ +body { + height: 100vh; + box-sizing: border-box; + margin: 0; +} + +.page-container { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + grid-template-rows: 4rem 1fr; + width: 100%; + height: 100%; +} + +.grammar-container { + grid-column: 1; + grid-row: 2; + padding: 0.25rem; +} + +.input-container { + grid-column: 2; + grid-row: 2; + padding: 0.25rem; +} + +.results-container { + grid-column: 3; + grid-row: 2; + padding: 0.25rem; +} + +.main-textarea { + height: 100%; + width: 100%; +} + +.CodeMirror { + height: 100%; +} diff --git a/dingus/worker.js b/dingus/worker.js new file mode 100644 index 0000000..8fc99ee --- /dev/null +++ b/dingus/worker.js @@ -0,0 +1,89 @@ +const PARSER_PACKAGE = "./wheel/lrparsers-0.7.9-py3-none-any.whl" + + +// Load the whole pyodide thingy. +importScripts("pyodide/pyodide.js"); + +const dingus_module = { + post_grammar_status: function (message) { + console.log("Grammar Status:", message); + postMessage({kind: "grammar_status", status: "loading", message}); + }, + + post_grammar_loaded: function () { + console.log("Grammar Loaded"); + postMessage({kind: "grammar_status", status: "ok", message: "Grammar loaded"}); + }, + + post_grammar_error: function(error) { + console.log("Grammar Error:", error); + postMessage({kind:"grammar_status", status: "error", message: error}); + }, +}; + +async function setup_python() { + console.log("Loading pyodide...."); + const pyodide = await loadPyodide({ + packages: ["micropip"], + }); + pyodide.setStdout({ batched: (msg) => console.log(msg) }); // TODO: I know this is an option above. + + // TODO: Do I actually want micropip? Probably not? + console.log("Installing parser package..."); + const micropip = pyodide.pyimport("micropip"); + await micropip.install(PARSER_PACKAGE); + + pyodide.registerJsModule("dingus", dingus_module); + + pyodide.runPython(` +import dingus +import parser +import pyodide.code + +GRAMMAR_GLOBALS = {} + +def eval_grammar(code): + global GRAMMAR_GLOBALS + try: + dingus.post_grammar_status("Evaluating grammar...") + pyodide.code.eval_code(code, globals=GRAMMAR_GLOBALS) + dingus.post_grammar_loaded() + except Exception as e: + dingus.post_grammar_error(f"{e}") +`); + + console.log("Loaded!"); + self.pyodide = pyodide; + return pyodide; +} +const pyodide_promise = setup_python(); + + +async function load_grammar_module(code) { + const pyodide = self.pyodide; + + console.log("Running..."); + + const my_fn = pyodide.globals.get("eval_grammar"); + my_fn(code); + my_fn.destroy(); +} + +self.onmessage = async function(event) { + await pyodide_promise; + + try { + const { kind, data } = event.data; + if (kind === "grammar_module") { + try { + await load_grammar_module(data); + } catch (e) { + console.log("INTERNAL ERROR:", e.message); + postMessage({error: e.message}); + } + } + } catch (wtf) { + console.log("WTF?"); + console.log(wtf); + } +};