From 8b1ec8c443562415853132b7e582bf213a449127 Mon Sep 17 00:00:00 2001 From: "sigonasr2, Sig, Sigo" Date: Wed, 7 Jun 2023 18:26:11 +0000 Subject: [PATCH] Remove unnecessary stuff Co-authored-by: sigonasr2 --- C++/scripts/md5 | 6 +- C++ProjectTemplate.js | 2 +- C++ProjectTemplate.wasm | Bin 304153 -> 313367 bytes main.cpp | 282 +++++++++++++++++++++++++++++++++++----- 4 files changed, 254 insertions(+), 36 deletions(-) diff --git a/C++/scripts/md5 b/C++/scripts/md5 index 5520048..da48c26 100644 --- a/C++/scripts/md5 +++ b/C++/scripts/md5 @@ -1,7 +1,7 @@ build.sh:c073187e65d0e23aa77aa94af4ec6382 - commit.sh:1af81bf417dfb932284d8a14fdd10657 - -debug.sh:849488515cab075948653c15eec4177b - +debug.sh:8125f303032b6cbc137223df63d10096 - lines.sh:3b907786f7fc9204025993016c9080de - -release.sh:0ab321c3fa2f1a1b2f03b1aec3bce816 - +release.sh:b1ce8461a303e8e7aa9ed74259db3873 - temp:d41d8cd98f00b204e9800998ecf8427e - -web.sh:4bbe9c5710a0ae4289468c3f7f340ff1 - +web.sh:dd7eec9825587db99063877da2839506 - diff --git a/C++ProjectTemplate.js b/C++ProjectTemplate.js index 0b4c5fa..f005663 100644 --- a/C++ProjectTemplate.js +++ b/C++ProjectTemplate.js @@ -1 +1 @@ -var Module=typeof Module!="undefined"?Module:{};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};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 scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;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)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}process.on("uncaughtException",function(ex){if(ex!=="unwind"&&!(ex instanceof ExitStatus)&&!(ex.context instanceof ExitStatus)){throw ex}});var nodeMajor=process.versions.node.split(".")[0];if(nodeMajor<15){process.on("unhandledRejection",function(reason){throw reason})}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=function(){return"[Emscripten Module object]"}}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(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{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)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.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"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function 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}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function 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}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="C++ProjectTemplate.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(binaryFile)){return fetch(binaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+binaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(binaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(binaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(binaryFile)})}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(function(binary){return WebAssembly.instantiate(binary,imports)}).then(function(instance){return instance}).then(receiver,function(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(function(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)})})}else{return instantiateArrayBuffer(binaryFile,imports,callback)}}function createWasm(){var info={"env":wasmImports,"wasi_snapshot_preview1":wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["memory"];updateMemoryViews();wasmTable=Module["asm"]["__indirect_function_table"];addOnInit(Module["asm"]["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate");return exports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult);return{}}var tempDouble;var tempI64;var ASM_CONSTS={38668:()=>{window.onunload=Module._olc_OnPageUnload},38712:($0,$1)=>{Module._olc_EmscriptenShellCss="width: 100%; height: 70vh; margin-left: auto; margin-right: auto;";Module._olc_WindowAspectRatio=$0/$1;Module.canvas.parentNode.addEventListener("resize",function(e){if(e.defaultPrevented){e.stopPropagation();return}var viewWidth=e.detail.width;var viewHeight=e.detail.width/Module._olc_WindowAspectRatio;if(viewHeight>e.detail.height){viewHeight=e.detail.height;viewWidth=e.detail.height*Module._olc_WindowAspectRatio}if(Module.canvas.parentNode.className=="emscripten_border")Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss+" width: "+viewWidth.toString()+"px; height: "+viewHeight.toString()+"px;";Module.canvas.setAttribute("width",viewWidth);Module.canvas.setAttribute("height",viewHeight);if(document.fullscreenElement!=null){var top=(e.detail.height-viewHeight)/2;var left=(e.detail.width-viewWidth)/2;Module.canvas.style.position="fixed";Module.canvas.style.top=top.toString()+"px";Module.canvas.style.left=left.toString()+"px";Module.canvas.style.width="";Module.canvas.style.height=""}Module._olc_PGE_UpdateWindowSize(viewWidth,viewHeight);Module.canvas.focus();e.stopPropagation()});Module._olc_ResizeCanvas=function(){setTimeout(function(){if(Module.canvas.parentNode.className=="emscripten_border")Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss;Module.canvas.style.cssText="width: 100%; height: 100%; outline: none;";var resizeEvent=new CustomEvent("resize",{detail:{width:Module.canvas.clientWidth,height:Module.canvas.clientHeight},bubbles:true,cancelable:true});Module.canvas.dispatchEvent(resizeEvent)},50)};document.body.style.cssText+=" overscroll-behavior-y: contain;";if(Module.canvas.parentNode.className=="emscripten_border"){document.body.style.margin="0";Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss}Module._olc_ResizeCanvas();var resizeObserver=new ResizeObserver(function(entries){Module._olc_ResizeCanvas()}).observe(Module.canvas.parentNode);var mutationObserver=new MutationObserver(function(mutationsList,observer){for(var i=0;i0){callbacks.shift()(Module)}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=prev-1;return prev===1};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){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}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}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:function(){var paths=Array.prototype.slice.call(arguments);return PATH.normalize(paths.join("/"))},join2:(l,r)=>{return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){var randomBuffer=new Uint8Array(1);return()=>{crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return()=>crypto_module["randomBytes"](1)[0]}catch(e){}}return()=>abort("randomDevice")}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[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;i0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.fsync(stream.tty)},fsync:function(stream){stream.tty.ops.fsync(stream.tty)},read:function(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){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}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){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:function(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:function(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:function(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:function(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:function(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:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(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:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(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:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(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{assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)}var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(path,opts={})=>{path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:node=>{var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:node=>{var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:(parent,name)=>{var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}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},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:str=>{var flags=FS.flagModes[str];if(typeof flags=="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},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=>{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:(fd_start=0,fd_end=FS.MAX_OPEN_FDS)=>{for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:fd=>FS.streams[fd],createStream:(stream,fd_start,fd_end)=>{if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}},flags:{get:function(){return this.shared.flags},set:function(val){this.shared.flags=val}},position:{get:function(){return this.shared.position},set:function(val){this.shared.position=val}}})}stream=Object.assign(new FS.FSStream,stream);var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:fd=>{FS.streams[fd]=null},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){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.apply(check,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;i{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(oldpath,newpath)=>{if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(old_path,new_path)=>{var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir:path=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink:path=>{var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(path,len)=>{if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close:stream=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:stream=>{return stream.fd===null},llseek:(stream,offset,whence)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:(stream,buffer,offset,length,position)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:(stream,buffer,offset,length,position,canOwn)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:(stream,length,position,prot,flags)=>{if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,ioctl:(stream,cmd,arg)=>{if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:(path,opts={})=>{opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.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 random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);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.getStream(fd);if(!stream)throw new FS.ErrnoError(8);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)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.name="ErrnoError";this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:(input,output,error)=>{FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;for(var i=0;i{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:(path,dontResolveLastLink)=>{var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:(parent,name,properties,canRead,canWrite)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i{for(var i=0;i{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_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};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;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});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]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});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},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){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(Browser.handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}},indexedDB:()=>{return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:()=>{return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(paths,onload=(()=>{}),onerror=(()=>{}))=>{var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=()=>{out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=()=>{var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=()=>{ok++;if(ok+fail==total)finish()};putRequest.onerror=()=>{fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:(paths,onload=(()=>{}),onerror=(()=>{}))=>{var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=()=>{var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var getRequest=files.get(path);getRequest.onsuccess=()=>{if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=()=>{fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(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:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAPU32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];HEAPU32[buf+64>>2]=atime%1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];HEAPU32[buf+80>>2]=mtime%1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];HEAPU32[buf+96>>2]=ctime%1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+104>>2]=tempI64[0],HEAP32[buf+108>>2]=tempI64[1];return 0},doMsync:function(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)},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var nowIsMonotonic=true;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function __emscripten_throw_longjmp(){throw Infinity}function _abort(){abort("")}function _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 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);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,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=()=>{var t=process.hrtime();return t[0]*1e3+t[1]/1e6}}else _emscripten_get_now=()=>performance.now();function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");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}}out('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");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&&SDL.audio.queueNewAudioData)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"}}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}function _proc_exit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;_proc_exit(status)}var _exit=exitJS;function maybeExit(){if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}}function callUserCallback(func){if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}}function safeSetTimeout(func,timeout){return setTimeout(function(){callUserCallback(func)},timeout)}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}}var Browser={mainLoop:{running:false,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){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:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining{assert(img.complete,"Image "+name+" could not be decoded");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;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=event=>{out("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["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;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;preloadedAudios[name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.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(function(){finish(audio)},1e4)}else{return fail()}};Module["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)}}},handledByPreloadPlugin:function(byteArray,fullname,finish,onerror){Browser.init();var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled},createContext:function(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:2};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){if(!useWebGL)assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(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)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])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:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(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:function(func){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(func);return}var RAF=Browser.fakeRequestAnimationFrame;RAF(func)},safeSetTimeout:function(func,timeout){return safeSetTimeout(func,timeout)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){callUserCallback(func)})},getMimetype:function(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:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(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:{},calculateMouseEvent:function(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)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{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;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};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];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){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:function(){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:function(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>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){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglChooseConfig(display,attrib_list,configs,config_size,numConfigs){return EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs)}function __webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.dibvbi=ctx.getExtension("WEBGL_draw_instanced_base_vertex_base_instance"))}function __webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.mdibvbi=ctx.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance"))}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],samplers:[],transformFeedbacks:[],syncs:[],stringCache:{},stringiCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;function fixedGetContext(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}canvas.getContext=fixedGetContext}var ctx=canvas.getContext("webgl2",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(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:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(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:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;__webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(GLctx);__webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(GLctx);if(context.version>=2){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query_webgl2")}if(context.version<2||!GLctx.disjointTimerQueryExt){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};function _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||glesContextVersion>3){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}}function _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}function _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}function _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}function _eglGetDisplay(nativeDisplayType){EGL.setErrorCode(12288);return 62e3}function _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}function _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}function _eglSwapBuffers(){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}function _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}function _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}var readEmAsmArgsArray=[];function readEmAsmArgs(sigPtr,buf){readEmAsmArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++]){buf+=ch!=105&buf;readEmAsmArgsArray.push(ch==105?HEAP32[buf]:HEAPF64[buf++>>1]);++buf}return readEmAsmArgsArray}function runEmAsmFunction(code,sigPtr,argbuf){var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_asm_const_int(code,sigPtr,argbuf){return runEmAsmFunction(code,sigPtr,argbuf)}function _emscripten_cancel_main_loop(){Browser.mainLoop.pause();Browser.mainLoop.func=null}function _emscripten_date_now(){return Date.now()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(size){var b=wasmMemory.buffer;try{wasmMemory.grow(size-b.byteLength+65535>>>16);updateMemoryViews();return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}let 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=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var JSEvents={inEventHandler:0,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(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(function(x,y){return x.precedence2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function findEventTarget(target){target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!="undefined"?document.querySelector(target):undefined);return domElement}function registerFocusEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.focusEvent)JSEvents.focusEvent=_malloc(256);var focusEventHandlerFunc=function(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};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_blur_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread);return 0}function findCanvasEventTarget(target){return findEventTarget(target)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0}function _emscripten_set_focus_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread);return 0}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(176);var keyEventHandlerFunc=function(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),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0}function _emscripten_set_keyup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread);return 0}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=getWasmTableEntry(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function 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;HEAP32[idx+14]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=findEventTarget(target);var mouseEventHandlerFunc=function(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};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_mousedown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread);return 0}function _emscripten_set_mousemove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread);return 0}function _emscripten_set_mouseup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread);return 0}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1696);target=findEventTarget(target);var touchEventHandlerFunc=function(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;HEAP32[idx+10]=t.clientY-targetRect.top;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};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function registerWheelEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.wheelEvent)JSEvents.wheelEvent=_malloc(104);var wheelHandlerFunc=function(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};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_wheel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target=findEventTarget(target);if(typeof target.onwheel!="undefined"){registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread);return 0}else{return-1}}function _emscripten_set_window_title(title){setWindowTitle(UTF8ToString(title))}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function 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}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>2]=bufSize;return 0}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}}function 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}}function convertI32PairToI53Checked(lo,hi){return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var offset=convertI32PairToI53Checked(offset_low,offset_high);if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function 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}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}}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindBuffer(target,buffer){if(target==35051){GLctx.currentPixelPackBufferBinding=buffer}else if(target==35052){GLctx.currentPixelUnpackBufferBinding=buffer}GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBindVertexArray(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){if(true){if(data&&size){GLctx.bufferData(target,HEAPU8,usage,data,size)}else{GLctx.bufferData(target,size,usage)}}else{GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _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}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _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}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _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}}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _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}function _glLinkProgram(program){program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}}function 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}function __colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==0)return HEAP8;if(type==1)return HEAPU8;if(type==2)return HEAP16;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922||type==28520||type==30779||type==30782)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<>shift,pixels+bytes>>shift)}function _glReadPixels(x,y,width,height,format,type,pixels){if(true){if(GLctx.currentPixelPackBufferBinding){GLctx.readPixels(x,y,width,height,format,type,pixels)}else{var heap=heapObjectForWebGLType(type);GLctx.readPixels(x,y,width,height,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}return}var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){if(true){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,null)}return}GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUseProgram(program){program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[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":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}return"PM"},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(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":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(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":function(date){return date.tm_zone},"%%":function(){return"%"}};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}function _strftime_l(s,maxsize,format,tm,loc){return _strftime(s,maxsize,format,tm)}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas){Browser.requestFullscreen(lockPointer,resizeCanvas)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};var preloadedImages={};var preloadedAudios={};var GLctx;var wasmImports={"__cxa_throw":___cxa_throw,"__syscall_fcntl64":___syscall_fcntl64,"__syscall_ioctl":___syscall_ioctl,"__syscall_openat":___syscall_openat,"_emscripten_get_now_is_monotonic":__emscripten_get_now_is_monotonic,"_emscripten_throw_longjmp":__emscripten_throw_longjmp,"abort":_abort,"eglChooseConfig":_eglChooseConfig,"eglCreateContext":_eglCreateContext,"eglCreateWindowSurface":_eglCreateWindowSurface,"eglDestroyContext":_eglDestroyContext,"eglDestroySurface":_eglDestroySurface,"eglGetDisplay":_eglGetDisplay,"eglInitialize":_eglInitialize,"eglMakeCurrent":_eglMakeCurrent,"eglSwapBuffers":_eglSwapBuffers,"eglSwapInterval":_eglSwapInterval,"eglTerminate":_eglTerminate,"emscripten_asm_const_int":_emscripten_asm_const_int,"emscripten_cancel_main_loop":_emscripten_cancel_main_loop,"emscripten_date_now":_emscripten_date_now,"emscripten_get_now":_emscripten_get_now,"emscripten_memcpy_big":_emscripten_memcpy_big,"emscripten_resize_heap":_emscripten_resize_heap,"emscripten_set_blur_callback_on_thread":_emscripten_set_blur_callback_on_thread,"emscripten_set_canvas_element_size":_emscripten_set_canvas_element_size,"emscripten_set_focus_callback_on_thread":_emscripten_set_focus_callback_on_thread,"emscripten_set_keydown_callback_on_thread":_emscripten_set_keydown_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_mousedown_callback_on_thread":_emscripten_set_mousedown_callback_on_thread,"emscripten_set_mousemove_callback_on_thread":_emscripten_set_mousemove_callback_on_thread,"emscripten_set_mouseup_callback_on_thread":_emscripten_set_mouseup_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_wheel_callback_on_thread":_emscripten_set_wheel_callback_on_thread,"emscripten_set_window_title":_emscripten_set_window_title,"environ_get":_environ_get,"environ_sizes_get":_environ_sizes_get,"fd_close":_fd_close,"fd_read":_fd_read,"fd_seek":_fd_seek,"fd_write":_fd_write,"glAttachShader":_glAttachShader,"glBindBuffer":_glBindBuffer,"glBindTexture":_glBindTexture,"glBindVertexArray":_glBindVertexArray,"glBlendFunc":_glBlendFunc,"glBufferData":_glBufferData,"glClear":_glClear,"glClearColor":_glClearColor,"glCompileShader":_glCompileShader,"glCreateProgram":_glCreateProgram,"glCreateShader":_glCreateShader,"glDeleteProgram":_glDeleteProgram,"glDeleteShader":_glDeleteShader,"glDeleteTextures":_glDeleteTextures,"glDrawArrays":_glDrawArrays,"glEnable":_glEnable,"glEnableVertexAttribArray":_glEnableVertexAttribArray,"glGenBuffers":_glGenBuffers,"glGenTextures":_glGenTextures,"glGenVertexArrays":_glGenVertexArrays,"glGetShaderInfoLog":_glGetShaderInfoLog,"glLinkProgram":_glLinkProgram,"glReadPixels":_glReadPixels,"glShaderSource":_glShaderSource,"glTexImage2D":_glTexImage2D,"glTexParameteri":_glTexParameteri,"glUseProgram":_glUseProgram,"glVertexAttribPointer":_glVertexAttribPointer,"glViewport":_glViewport,"invoke_ii":invoke_ii,"invoke_iii":invoke_iii,"invoke_iiii":invoke_iiii,"invoke_iiiii":invoke_iiiii,"invoke_vi":invoke_vi,"invoke_vii":invoke_vii,"invoke_viii":invoke_viii,"invoke_viiii":invoke_viiii,"invoke_viiiiii":invoke_viiiiii,"strftime_l":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=function(){return(___wasm_call_ctors=Module["asm"]["__wasm_call_ctors"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["main"]).apply(null,arguments)};var _memcpy=function(){return(_memcpy=Module["asm"]["memcpy"]).apply(null,arguments)};var _olc_OnPageUnload=Module["_olc_OnPageUnload"]=function(){return(_olc_OnPageUnload=Module["_olc_OnPageUnload"]=Module["asm"]["olc_OnPageUnload"]).apply(null,arguments)};var _olc_PGE_UpdateWindowSize=Module["_olc_PGE_UpdateWindowSize"]=function(){return(_olc_PGE_UpdateWindowSize=Module["_olc_PGE_UpdateWindowSize"]=Module["asm"]["olc_PGE_UpdateWindowSize"]).apply(null,arguments)};var _malloc=function(){return(_malloc=Module["asm"]["malloc"]).apply(null,arguments)};var _saveSetjmp=function(){return(_saveSetjmp=Module["asm"]["saveSetjmp"]).apply(null,arguments)};var _free=function(){return(_free=Module["asm"]["free"]).apply(null,arguments)};var ___errno_location=function(){return(___errno_location=Module["asm"]["__errno_location"]).apply(null,arguments)};var ___dl_seterr=function(){return(___dl_seterr=Module["asm"]["__dl_seterr"]).apply(null,arguments)};var _setThrew=function(){return(_setThrew=Module["asm"]["setThrew"]).apply(null,arguments)};var stackSave=function(){return(stackSave=Module["asm"]["stackSave"]).apply(null,arguments)};var stackRestore=function(){return(stackRestore=Module["asm"]["stackRestore"]).apply(null,arguments)};var stackAlloc=function(){return(stackAlloc=Module["asm"]["stackAlloc"]).apply(null,arguments)};var ___cxa_is_pointer_type=function(){return(___cxa_is_pointer_type=Module["asm"]["__cxa_is_pointer_type"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["dynCall_viijii"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["dynCall_jiji"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["dynCall_iiiiij"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["dynCall_iiiiijj"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["dynCall_iiiiiijj"]).apply(null,arguments)};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_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_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_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_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_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_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_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)}}var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(){var entryFunction=_main;var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain();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(); +var Module=typeof Module!="undefined"?Module:{};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};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 scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;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);if(typeof module!="undefined"){module["exports"]=Module}process.on("uncaughtException",ex=>{if(ex!=="unwind"&&!(ex instanceof ExitStatus)&&!(ex.context instanceof ExitStatus)){throw ex}});var nodeMajor=process.versions.node.split(".")[0];if(nodeMajor<15){process.on("unhandledRejection",reason=>{throw reason})}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=()=>"[Emscripten Module object]"}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(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{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)}}setWindowTitle=title=>document.title=title}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"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="C++ProjectTemplate.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}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(()=>getBinary(binaryFile))}else{if(readAsync){return new Promise((resolve,reject)=>{readAsync(binaryFile,response=>resolve(new Uint8Array(response)),reject)})}}}return Promise.resolve().then(()=>getBinary(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>{return WebAssembly.instantiate(binary,imports)}).then(instance=>{return instance}).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)})})}else{return instantiateArrayBuffer(binaryFile,imports,callback)}}function createWasm(){var info={"env":wasmImports,"wasi_snapshot_preview1":wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["memory"];updateMemoryViews();wasmTable=Module["asm"]["__indirect_function_table"];addOnInit(Module["asm"]["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate");return exports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult);return{}}var tempDouble;var tempI64;var ASM_CONSTS={40156:()=>{window.onunload=Module._olc_OnPageUnload},40200:($0,$1)=>{Module._olc_EmscriptenShellCss="width: 100%; height: 70vh; margin-left: auto; margin-right: auto;";Module._olc_WindowAspectRatio=$0/$1;Module.canvas.parentNode.addEventListener("resize",function(e){if(e.defaultPrevented){e.stopPropagation();return}var viewWidth=e.detail.width;var viewHeight=e.detail.width/Module._olc_WindowAspectRatio;if(viewHeight>e.detail.height){viewHeight=e.detail.height;viewWidth=e.detail.height*Module._olc_WindowAspectRatio}if(Module.canvas.parentNode.className=="emscripten_border")Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss+" width: "+viewWidth.toString()+"px; height: "+viewHeight.toString()+"px;";Module.canvas.setAttribute("width",viewWidth);Module.canvas.setAttribute("height",viewHeight);if(document.fullscreenElement!=null){var top=(e.detail.height-viewHeight)/2;var left=(e.detail.width-viewWidth)/2;Module.canvas.style.position="fixed";Module.canvas.style.top=top.toString()+"px";Module.canvas.style.left=left.toString()+"px";Module.canvas.style.width="";Module.canvas.style.height=""}Module._olc_PGE_UpdateWindowSize(viewWidth,viewHeight);Module.canvas.focus();e.stopPropagation()});Module._olc_ResizeCanvas=function(){setTimeout(function(){if(Module.canvas.parentNode.className=="emscripten_border")Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss;Module.canvas.style.cssText="width: 100%; height: 100%; outline: none;";var resizeEvent=new CustomEvent("resize",{detail:{width:Module.canvas.clientWidth,height:Module.canvas.clientHeight},bubbles:true,cancelable:true});Module.canvas.dispatchEvent(resizeEvent)},50)};document.body.style.cssText+=" overscroll-behavior-y: contain;";if(Module.canvas.parentNode.className=="emscripten_border"){document.body.style.margin="0";Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss}Module._olc_ResizeCanvas();var resizeObserver=new ResizeObserver(function(entries){Module._olc_ResizeCanvas()}).observe(Module.canvas.parentNode);var mutationObserver=new MutationObserver(function(mutationsList,observer){for(var i=0;i0){callbacks.shift()(Module)}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){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}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}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:function(){var paths=Array.prototype.slice.call(arguments);return PATH.normalize(paths.join("/"))},join2:(l,r)=>{return PATH.normalize(l+"/"+r)}};function 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")}function randomFill(view){return(randomFill=initRandomFill())(view)}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[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=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}function 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}function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function 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}var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.fsync(stream.tty)},fsync:function(stream){stream.tty.ops.fsync(stream.tty)},read:function(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){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}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){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:function(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:function(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:function(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:function(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:function(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:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(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:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(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:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(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{assert(arrayBuffer,`Loading data file "${url}" failed (no arrayBuffer).`);onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)}var preloadPlugins=Module["preloadPlugins"]||[];function FS_handledByPreloadPlugin(byteArray,fullname,finish,onerror){if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled}function 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){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}}function 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}function FS_getMode(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode}var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(path,opts={})=>{path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:node=>{var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:node=>{var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:(parent,name)=>{var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}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=>{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)},getStream:fd=>FS.streams[fd],createStream:(stream,fd=-1)=>{if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}},flags:{get:function(){return this.shared.flags},set:function(val){this.shared.flags=val}},position:{get:function(){return this.shared.position},set:function(val){this.shared.position=val}}})}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},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){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.apply(check,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;i{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(oldpath,newpath)=>{if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(old_path,new_path)=>{var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir:path=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink:path=>{var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(path,len)=>{if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close:stream=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:stream=>{return stream.fd===null},llseek:(stream,offset,whence)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:(stream,buffer,offset,length,position)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:(stream,buffer,offset,length,position,canOwn)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:(stream,length,position,prot,flags)=>{if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,ioctl:(stream,cmd,arg)=>{if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:(path,opts={})=>{opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error(`Invalid encoding type "${opts.encoding}"`)}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.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.getStream(fd);if(!stream)throw new FS.ErrnoError(8);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)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.name="ErrnoError";this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:(input,output,error)=>{FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;for(var i=0;i{var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:(parent,name,properties,canRead,canWrite)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i{for(var i=0;i{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_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};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;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});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]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});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}};function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(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:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAPU32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];HEAPU32[buf+64>>2]=atime%1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];HEAPU32[buf+80>>2]=mtime%1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];HEAPU32[buf+96>>2]=ctime%1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+104>>2]=tempI64[0],HEAP32[buf+108>>2]=tempI64[1];return 0},doMsync:function(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)},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var nowIsMonotonic=true;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function __emscripten_throw_longjmp(){throw Infinity}function _abort(){abort("")}function _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 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);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,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){global.performance=require("perf_hooks").performance}_emscripten_get_now=()=>performance.now();function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");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}}out('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");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&&SDL.audio.queueNewAudioData)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"}}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}function _proc_exit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;_proc_exit(status)}var _exit=exitJS;function maybeExit(){if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}}function callUserCallback(func){if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}}function safeSetTimeout(func,timeout){return setTimeout(()=>{callUserCallback(func)},timeout)}var Browser={mainLoop:{running:false,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){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:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining{assert(img.complete,"Image "+name+" could not be decoded");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);if(onload)onload(byteArray)};img.onerror=event=>{out("Image "+url+" could not be decoded");if(onerror)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;if(onload)onload(byteArray)}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:function(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:2};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){if(!useWebGL)assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(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)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])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:function(){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:function(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:function(func){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(func);return}var RAF=Browser.fakeRequestAnimationFrame;RAF(func)},safeSetTimeout:function(func,timeout){return safeSetTimeout(func,timeout)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(()=>{callUserCallback(func)})},getMimetype:function(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:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(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:{},calculateMouseEvent:function(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)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{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;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};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];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){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:function(){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:function(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>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){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglChooseConfig(display,attrib_list,configs,config_size,numConfigs){return EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs)}function webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.dibvbi=ctx.getExtension("WEBGL_draw_instanced_base_vertex_base_instance"))}function webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.mdibvbi=ctx.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance"))}function webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],samplers:[],transformFeedbacks:[],syncs:[],stringCache:{},stringiCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;function fixedGetContext(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}canvas.getContext=fixedGetContext}var ctx=canvas.getContext("webgl2",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(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:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(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:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(GLctx);webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(GLctx);if(context.version>=2){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query_webgl2")}if(context.version<2||!GLctx.disjointTimerQueryExt){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};function _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||glesContextVersion>3){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}}function _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}function _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}function _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}function _eglGetDisplay(nativeDisplayType){EGL.setErrorCode(12288);return 62e3}function _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}function _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}function _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}function _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}function _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}var readEmAsmArgsArray=[];function readEmAsmArgs(sigPtr,buf){readEmAsmArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++]){buf+=ch!=105&buf;readEmAsmArgsArray.push(ch==105?HEAP32[buf]:HEAPF64[buf++>>1]);++buf}return readEmAsmArgsArray}function runEmAsmFunction(code,sigPtr,argbuf){var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_asm_const_int(code,sigPtr,argbuf){return runEmAsmFunction(code,sigPtr,argbuf)}function _emscripten_cancel_main_loop(){Browser.mainLoop.pause();Browser.mainLoop.func=null}function _emscripten_date_now(){return Date.now()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(size){var b=wasmMemory.buffer;var pages=size-b.byteLength+65535>>>16;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=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=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var JSEvents={inEventHandler:0,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(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(function(x,y){return x.precedence2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function findEventTarget(target){target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!="undefined"?document.querySelector(target):undefined);return domElement}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function registerFocusEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.focusEvent)JSEvents.focusEvent=_malloc(256);var focusEventHandlerFunc=function(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)}function _emscripten_set_blur_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread)}function findCanvasEventTarget(target){return findEventTarget(target)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0}function _emscripten_set_focus_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread)}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(176);var keyEventHandlerFunc=function(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),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread)}function _emscripten_set_keyup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread)}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=getWasmTableEntry(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function 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;HEAP32[idx+14]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=findEventTarget(target);var mouseEventHandlerFunc=function(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)}function _emscripten_set_mousedown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread)}function _emscripten_set_mousemove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread)}function _emscripten_set_mouseup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1696);target=findEventTarget(target);var touchEventHandlerFunc=function(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;HEAP32[idx+10]=t.clientY-targetRect.top;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)}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread)}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread)}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread)}function registerWheelEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.wheelEvent)JSEvents.wheelEvent=_malloc(104);var wheelHandlerFunc=function(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)}function _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}}function _emscripten_set_window_title(title){setWindowTitle(UTF8ToString(title))}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function 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}function stringToAscii(str,buffer){for(var i=0;i>0]=str.charCodeAt(i)}HEAP8[buffer>>0]=0}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>2]=bufSize;return 0}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}}function 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}}function convertI32PairToI53Checked(lo,hi){return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var offset=convertI32PairToI53Checked(offset_low,offset_high);if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function 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}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}}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindBuffer(target,buffer){if(target==35051){GLctx.currentPixelPackBufferBinding=buffer}else if(target==35052){GLctx.currentPixelUnpackBufferBinding=buffer}GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBindVertexArray(vao){GLctx.bindVertexArray(GL.vaos[vao])}var _glBindVertexArrayOES=_glBindVertexArray;function _glBlendFunc(x0,x1){GLctx.blendFunc(x0,x1)}function _glBufferData(target,size,data,usage){if(true){if(data&&size){GLctx.bufferData(target,HEAPU8,usage,data,size)}else{GLctx.bufferData(target,size,usage)}}else{GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}}function _glClear(x0){GLctx.clear(x0)}function _glClearColor(x0,x1,x2,x3){GLctx.clearColor(x0,x1,x2,x3)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _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}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _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}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _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}}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glEnable(x0){GLctx.enable(x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}var _glGenVertexArraysOES=_glGenVertexArrays;function _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}function _glLinkProgram(program){program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}}function 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}function colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==0)return HEAP8;if(type==1)return HEAPU8;if(type==2)return HEAP16;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922||type==28520||type==30779||type==30782)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<>shift,pixels+bytes>>shift)}function _glReadPixels(x,y,width,height,format,type,pixels){if(true){if(GLctx.currentPixelPackBufferBinding){GLctx.readPixels(x,y,width,height,format,type,pixels)}else{var heap=heapObjectForWebGLType(type);GLctx.readPixels(x,y,width,height,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}return}var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){if(true){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,null)}return}GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx.texParameteri(x0,x1,x2)}function _glUseProgram(program){program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx.viewport(x0,x1,x2,x3)}function isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[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":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+arraySum(isLeapYear(date.tm_year+1900)?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}return"PM"},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(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":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(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":function(date){return date.tm_zone},"%%":function(){return"%"}};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}function _strftime_l(s,maxsize,format,tm,loc){return _strftime(s,maxsize,format,tm)}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas){Browser.requestFullscreen(lockPointer,resizeCanvas)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};var preloadedImages={};var preloadedAudios={};var GLctx;var wasmImports={"__cxa_throw":___cxa_throw,"__syscall_fcntl64":___syscall_fcntl64,"__syscall_ioctl":___syscall_ioctl,"__syscall_openat":___syscall_openat,"_emscripten_get_now_is_monotonic":__emscripten_get_now_is_monotonic,"_emscripten_throw_longjmp":__emscripten_throw_longjmp,"abort":_abort,"eglChooseConfig":_eglChooseConfig,"eglCreateContext":_eglCreateContext,"eglCreateWindowSurface":_eglCreateWindowSurface,"eglDestroyContext":_eglDestroyContext,"eglDestroySurface":_eglDestroySurface,"eglGetDisplay":_eglGetDisplay,"eglInitialize":_eglInitialize,"eglMakeCurrent":_eglMakeCurrent,"eglSwapBuffers":_eglSwapBuffers,"eglSwapInterval":_eglSwapInterval,"eglTerminate":_eglTerminate,"emscripten_asm_const_int":_emscripten_asm_const_int,"emscripten_cancel_main_loop":_emscripten_cancel_main_loop,"emscripten_date_now":_emscripten_date_now,"emscripten_get_now":_emscripten_get_now,"emscripten_memcpy_big":_emscripten_memcpy_big,"emscripten_resize_heap":_emscripten_resize_heap,"emscripten_set_blur_callback_on_thread":_emscripten_set_blur_callback_on_thread,"emscripten_set_canvas_element_size":_emscripten_set_canvas_element_size,"emscripten_set_focus_callback_on_thread":_emscripten_set_focus_callback_on_thread,"emscripten_set_keydown_callback_on_thread":_emscripten_set_keydown_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_mousedown_callback_on_thread":_emscripten_set_mousedown_callback_on_thread,"emscripten_set_mousemove_callback_on_thread":_emscripten_set_mousemove_callback_on_thread,"emscripten_set_mouseup_callback_on_thread":_emscripten_set_mouseup_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_wheel_callback_on_thread":_emscripten_set_wheel_callback_on_thread,"emscripten_set_window_title":_emscripten_set_window_title,"environ_get":_environ_get,"environ_sizes_get":_environ_sizes_get,"fd_close":_fd_close,"fd_read":_fd_read,"fd_seek":_fd_seek,"fd_write":_fd_write,"glAttachShader":_glAttachShader,"glBindBuffer":_glBindBuffer,"glBindTexture":_glBindTexture,"glBindVertexArrayOES":_glBindVertexArrayOES,"glBlendFunc":_glBlendFunc,"glBufferData":_glBufferData,"glClear":_glClear,"glClearColor":_glClearColor,"glCompileShader":_glCompileShader,"glCreateProgram":_glCreateProgram,"glCreateShader":_glCreateShader,"glDeleteProgram":_glDeleteProgram,"glDeleteShader":_glDeleteShader,"glDeleteTextures":_glDeleteTextures,"glDrawArrays":_glDrawArrays,"glEnable":_glEnable,"glEnableVertexAttribArray":_glEnableVertexAttribArray,"glGenBuffers":_glGenBuffers,"glGenTextures":_glGenTextures,"glGenVertexArraysOES":_glGenVertexArraysOES,"glGetShaderInfoLog":_glGetShaderInfoLog,"glLinkProgram":_glLinkProgram,"glReadPixels":_glReadPixels,"glShaderSource":_glShaderSource,"glTexImage2D":_glTexImage2D,"glTexParameteri":_glTexParameteri,"glUseProgram":_glUseProgram,"glVertexAttribPointer":_glVertexAttribPointer,"glViewport":_glViewport,"invoke_ii":invoke_ii,"invoke_iii":invoke_iii,"invoke_iiii":invoke_iiii,"invoke_iiiii":invoke_iiiii,"invoke_vi":invoke_vi,"invoke_vii":invoke_vii,"invoke_viii":invoke_viii,"invoke_viiii":invoke_viiii,"invoke_viiiiii":invoke_viiiiii,"strftime_l":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=function(){return(___wasm_call_ctors=Module["asm"]["__wasm_call_ctors"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["main"]).apply(null,arguments)};var _olc_OnPageUnload=Module["_olc_OnPageUnload"]=function(){return(_olc_OnPageUnload=Module["_olc_OnPageUnload"]=Module["asm"]["olc_OnPageUnload"]).apply(null,arguments)};var _olc_PGE_UpdateWindowSize=Module["_olc_PGE_UpdateWindowSize"]=function(){return(_olc_PGE_UpdateWindowSize=Module["_olc_PGE_UpdateWindowSize"]=Module["asm"]["olc_PGE_UpdateWindowSize"]).apply(null,arguments)};var _malloc=function(){return(_malloc=Module["asm"]["malloc"]).apply(null,arguments)};var ___errno_location=function(){return(___errno_location=Module["asm"]["__errno_location"]).apply(null,arguments)};var _setThrew=function(){return(_setThrew=Module["asm"]["setThrew"]).apply(null,arguments)};var stackSave=function(){return(stackSave=Module["asm"]["stackSave"]).apply(null,arguments)};var stackRestore=function(){return(stackRestore=Module["asm"]["stackRestore"]).apply(null,arguments)};var stackAlloc=function(){return(stackAlloc=Module["asm"]["stackAlloc"]).apply(null,arguments)};var ___cxa_is_pointer_type=function(){return(___cxa_is_pointer_type=Module["asm"]["__cxa_is_pointer_type"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["dynCall_viijii"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["dynCall_jiji"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["dynCall_iiiiij"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["dynCall_iiiiijj"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["dynCall_iiiiiijj"]).apply(null,arguments)};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_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_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_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_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_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_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_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)}}var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(){var entryFunction=_main;var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain();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(); diff --git a/C++ProjectTemplate.wasm b/C++ProjectTemplate.wasm index 2fa1fe3ffed38a86730d83dc1bb4c3e9db159753..a54eea691d6d38b8161e1ab0eda99de5daecd0b0 100755 GIT binary patch delta 132115 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 V5W7cK!VY0NY(_r}w{zI){|B9KQ_KJW delta 123441 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 diff --git a/main.cpp b/main.cpp index dbb67ae..11bc448 100644 --- a/main.cpp +++ b/main.cpp @@ -5,64 +5,282 @@ using namespace olc; #define WIDTH 640 #define HEIGHT 480 -class Example : public olc::PixelGameEngine +struct Ball{ + vf2d pos={}; + vf2d vel={}; + vf2d acc={}; + vf2d originalPos={}; + float radius=0; + float mass=0; + float simTimeRemaining=0; +}; + +struct Line{ + vf2d startPos={}; + vf2d endPos={}; + float radius=0; + float bounceFactor=0.8; + bool oneWay=false; +}; + +const float PI=3.14159f; + +class MountainClimber : public olc::PixelGameEngine { - public: - Example() + std::vectorballs; + std::vectorlines; + Ball*selectedBall; + Line*selectedLine; + std::vector>collidingPairs; + std::vectorfakeBalls; + bool selectedLineStart=false; + float friction=0.9f; + float gravity=200.f; + float limit=500.f; + + MountainClimber() { - sAppName = "Example"; + sAppName = "Mountain Climber"; + } + + void AddBall(vf2d pos,float r){ + Ball b; + b.pos=pos; + b.radius=r; + b.mass=r*10; + b.vel.y=rand()%1000-17000; + balls.emplace_back(b); + } + + void AddLine(vf2d pos1,vf2d pos2,float r,float bounceFactor,bool oneway=false){ + Line l; + l.startPos=pos1; + l.endPos=pos2; + l.radius=r; + l.bounceFactor=bounceFactor; + l.oneWay=oneway; + lines.push_back(l); } public: - olc::Key last; bool OnUserCreate() override { - std::cout<<"Test"<0){ + b.originalPos.x=b.pos.x; + b.originalPos.y=b.pos.y; + b.acc.x=-b.vel.x*friction; + b.acc.y=-b.vel.y*friction+gravity; //Gravity constant; + b.vel.x+=b.acc.x*b.simTimeRemaining; + b.vel.y+=b.acc.y*b.simTimeRemaining; + b.pos.x+=b.vel.x*b.simTimeRemaining; + b.pos.y+=b.vel.y*b.simTimeRemaining; + + if(b.pos.x<0){ + b.pos.x+=ScreenWidth(); + } + if(b.pos.y<0){ + b.pos.y+=ScreenHeight(); + } + if(b.pos.x>=ScreenWidth()){ + b.pos.x-=ScreenWidth(); + } + if(b.pos.y>=ScreenHeight()){ + b.pos.y-=ScreenHeight(); + } + + if(fabs(b.vel.x*b.vel.x+b.vel.y*b.vel.y)radius=l.radius; + fakeBall->mass=b.mass*l.bounceFactor; + fakeBall->pos={closestPoint.x,closestPoint.y}; + fakeBall->vel={std::min(limit,std::max(-limit,-b.vel.x)),std::min(limit,std::max(-limit,-b.vel.y))}; + fakeBalls.push_back(fakeBall); + collidingPairs.push_back({&b,fakeBall}); + float overlap=1.1f*(dist-b.radius-fakeBall->radius); + b.pos.x-=overlap*(b.pos.x-fakeBall->pos.x)/dist; + b.pos.y-=overlap*(b.pos.y-fakeBall->pos.y)/dist; + } + } + } + for(Ball&b2:balls){ + if(&b!=&b2){ + if(DoCirclesOverlap(b.pos,b.radius,b2.pos,b2.radius)){ + collidingPairs.push_back({&b,&b2}); + float dist=sqrtf((b.pos.x-b2.pos.x)*(b.pos.x-b2.pos.x)+(b.pos.y-b2.pos.y)*(b.pos.y-b2.pos.y)); + float overlap=0.5f*(dist-b.radius-b2.radius); + b.pos.x-=overlap*(b.pos.x-b2.pos.x)/dist; + b.pos.y-=overlap*(b.pos.y-b2.pos.y)/dist; + b2.pos.x+=overlap*(b.pos.x-b2.pos.x)/dist; + b2.pos.y+=overlap*(b.pos.y-b2.pos.y)/dist; + } + } + } + float intendedSpeed=sqrtf(b.vel.x+b.vel.y*b.vel.y); + float intendedDist=intendedSpeed*b.simTimeRemaining; + float actualDist=sqrtf((b.pos.x-b.originalPos.x)*(b.pos.x-b.originalPos.x)+(b.pos.y-b.originalPos.y)*(b.pos.y-b.originalPos.y)); + float actualTime=actualDist/intendedSpeed; + b.simTimeRemaining=b.simTimeRemaining-actualTime; + } + float efficiency=1; + for(std::pair&pair:collidingPairs){ + Ball*b1=pair.first; + Ball*b2=pair.second; + float dist=sqrtf((b1->pos.x-b2->pos.x)*(b1->pos.x-b2->pos.x)+(b1->pos.y-b2->pos.y)*(b1->pos.y-b2->pos.y)); + vf2d normal={(b2->pos.x-b1->pos.x)/dist,(b2->pos.y-b1->pos.y)/dist}; + vf2d tangent={-normal.y,normal.x}; + vf2d dpTangent={tangent.dot(b1->vel),tangent.dot(b2->vel)}; + vf2d dpNormal={normal.dot(b1->vel),normal.dot(b2->vel)}; + vf2d momentum={efficiency*(dpNormal.x*(b1->mass-b2->mass)+2.f*b2->mass*dpNormal.y)/(b1->mass+b2->mass),efficiency*(dpNormal.y*(b2->mass-b1->mass)+2.f*b1->mass*dpNormal.x)/(b1->mass+b2->mass)}; + b1->vel.x=tangent.x*dpTangent.x+normal.x*momentum.x; + b1->vel.y=tangent.y*dpTangent.x+normal.y*momentum.x; + b2->vel.x=tangent.x*dpTangent.y+normal.x*momentum.y; + b2->vel.y=tangent.y*dpTangent.y+normal.y*momentum.y; + } + + collidingPairs.clear(); + for(Ball*fb:fakeBalls){ + delete fb; + } + fakeBalls.clear(); + } + } + } + bool OnUserUpdate(float fElapsedTime) override { - std::cout<<"Test 4"<startPos=GetMousePos(); + }else{ + selectedLine->endPos=GetMousePos(); + } + } + } + if(GetMouse(0).bReleased){ + if(selectedLine!=nullptr){ + std::cout<startPos<<"/"<endPos<vel.x=5*((selectedBall->pos.x)-GetMouseX()); + selectedBall->vel.y=5*((selectedBall->pos.y)-GetMouseY()); + } + selectedBall=nullptr; + selectedLine=nullptr; + } + if(GetMouse(1).bHeld){ + for(Ball&b:balls){ + b.vel.x+=(GetMouseX()-b.pos.x)*0.01f; + b.vel.y+=(GetMouseY()-b.pos.y)*0.01f; + } + } + + if(GetKey(F1).bPressed){ + ConsoleShow(F1); + } + Clear(BLACK); - DrawString({0,0},std::to_string(last)); + + if(GetKey(SPACE).bPressed){ + AddBall({610,620},rand()%4+8); + } + + HandlePhysics(fElapsedTime); + + for(Ball&b:balls){ + if(selectedBall==&b){ + FillCircle(b.pos,b.radius,YELLOW); + } else { + FillCircle(b.pos,b.radius); + } + } + for(Line&l:lines){ + FillCircle(l.startPos,l.radius); + FillCircle(l.endPos,l.radius); + vf2d normal={-(l.endPos.y-l.startPos.y),l.endPos.x-l.startPos.x}; + float dist=sqrt(normal.x*normal.x+normal.y*normal.y); + normal/=dist; + DrawLine(l.startPos.x+normal.x*l.radius,l.startPos.y+normal.y*l.radius,l.endPos.x+normal.x*l.radius,l.endPos.y+normal.y*l.radius,l.oneWay?DARK_YELLOW:WHITE); + DrawLine(l.startPos.x-normal.x*l.radius,l.startPos.y-normal.y*l.radius,l.endPos.x-normal.x*l.radius,l.endPos.y-normal.y*l.radius,l.oneWay?DARK_YELLOW:WHITE); + } return true; } bool OnUserDestroy()override{ return true; } - - void GetAnyKeyPress(olc::Key pressed)override{ - last=pressed; - } -}; - -enum Direction{ - RIGHT, - DOWN, - LEFT, - UP -}; - -struct Data{ - int x,y; }; int main() { - Example demo; - if (demo.Construct(640, 480, 4, 4)) + MountainClimber demo; + if (demo.Construct(640, 640, 4, 4)) demo.Start(); return 0; -} +} \ No newline at end of file