From 50aaba73a3d36430fdb0768cb79ae3e983689e53 Mon Sep 17 00:00:00 2001 From: yhirose Date: Sat, 9 Jan 2021 23:22:00 -0500 Subject: [PATCH] Better error report --- docs/native.js | 2 +- docs/native.wasm | Bin 349595 -> 351091 bytes peglib.h | 114 ++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 99 insertions(+), 17 deletions(-) diff --git a/docs/native.js b/docs/native.js index fe318f9..8e5a6b4 100644 --- a/docs/native.js +++ b/docs/native.js @@ -1 +1 @@ -var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};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 instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}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;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable=new WebAssembly.Table({"initial":776,"maximum":776+0,"element":"anyfunc"});var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{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&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var i=0;var str="";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0||i==maxBytesToRead/2)return str;++i;str+=String.fromCharCode(codeUnit)}}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var DYNAMIC_BASE=5279872,DYNAMICTOP_PTR=36832;var INITIAL_INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;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();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;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 addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;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()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";out(what);err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";throw new WebAssembly.RuntimeError(what)}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="native.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;__ATINIT__.push({func:function(){___wasm_call_ctors()}});function demangle(func){return func}function demangleAll(text){var regex=/\b_Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___cxa_allocate_exception(size){return _malloc(size)}var ___exception_infos={};var ___exception_last=0;function __ZSt18uncaught_exceptionv(){return __ZSt18uncaught_exceptionv.uncaught_exceptions>0}function ___cxa_throw(ptr,type,destructor){___exception_infos[ptr]={ptr:ptr,adjusted:[ptr],type:type,destructor:destructor,refcount:0,caught:false,rethrown:false};___exception_last=ptr;if(!("uncaught_exception"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exceptions=1}else{__ZSt18uncaught_exceptionv.uncaught_exceptions++}throw ptr}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}function ___map_file(pathname,size){setErrNo(63);return-1}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(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:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(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:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};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.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(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){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)}},flush: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)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};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}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=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);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){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;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=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+length8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(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:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(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:function(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:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(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:function(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:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=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:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};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}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(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:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(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:function(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(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(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:function(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(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(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:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};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=function(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);if(typeof Uint8Array!="undefined")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||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(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(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29)}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>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;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;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;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+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},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},get64:function(low,high){return low}};function syscallMunmap(addr,len){if((addr|0)===-1||len===0){return-28}var info=SYSCALLS.mappings[addr];if(!info)return 0;if(len===info.len){var stream=FS.getStream(info.fd);if(info.prot&2){SYSCALLS.doMsync(addr,stream,len,info.flags,info.offset)}FS.munmap(stream);SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}function ___sys_munmap(addr,len){try{return syscallMunmap(addr,len)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])},destructorFunction:null})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>2])}function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(handle){var rv=emval_handle_array[handle].value;__emval_decref(handle);return rv},"toWireType":function(destructors,value){return __emval_register(value)},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=function(value){return value};if(minRange===0){var bitshift=32-8*size;fromWireType=function(value){return value<>>bitshift}}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0},"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(HEAPU8[currentBytePtr]==0||i==length){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;i>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(HEAP[currentBytePtr>>shift]==0||i==length){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function _abort(){abort()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var ENV={};function __getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":(typeof navigator==="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8","_":__getExecutableName()};for(var x in ENV){env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__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();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}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 _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}else{return thisDate.getFullYear()}}else{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"}else{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 janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=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"%"}};for(var rule in EXPANSION_RULES_2){if(pattern.indexOf(rule)>=0){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}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){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();embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_emval();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");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 asmLibraryArg={"b":___assert_fail,"e":___cxa_allocate_exception,"d":___cxa_throw,"q":___map_file,"p":___sys_munmap,"k":__embind_register_bool,"j":__embind_register_emval,"i":__embind_register_float,"t":__embind_register_function,"c":__embind_register_integer,"a":__embind_register_memory_view,"g":__embind_register_std_string,"f":__embind_register_std_wstring,"l":__embind_register_void,"h":_abort,"m":_emscripten_memcpy_big,"n":_emscripten_resize_heap,"r":_environ_get,"s":_environ_sizes_get,"memory":wasmMemory,"o":_strftime_l,"table":wasmTable};var asm=createWasm();Module["asm"]=asm;var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["u"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["v"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["w"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["x"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["y"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["z"]).apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return(dynCall_viiii=Module["dynCall_viiii"]=Module["asm"]["A"]).apply(null,arguments)};var dynCall_iiiiii=Module["dynCall_iiiiii"]=function(){return(dynCall_iiiiii=Module["dynCall_iiiiii"]=Module["asm"]["B"]).apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return(dynCall_vii=Module["dynCall_vii"]=Module["asm"]["C"]).apply(null,arguments)};var dynCall_viiiiii=Module["dynCall_viiiiii"]=function(){return(dynCall_viiiiii=Module["dynCall_viiiiii"]=Module["asm"]["D"]).apply(null,arguments)};var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=function(){return(dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=Module["asm"]["E"]).apply(null,arguments)};var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=function(){return(dynCall_viiiiiii=Module["dynCall_viiiiiii"]=Module["asm"]["F"]).apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return(dynCall_vi=Module["dynCall_vi"]=Module["asm"]["G"]).apply(null,arguments)};var dynCall_ii=Module["dynCall_ii"]=function(){return(dynCall_ii=Module["dynCall_ii"]=Module["asm"]["H"]).apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return(dynCall_viiiii=Module["dynCall_viiiii"]=Module["asm"]["I"]).apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return(dynCall_iiii=Module["dynCall_iiii"]=Module["asm"]["J"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["K"]).apply(null,arguments)};var dynCall_iii=Module["dynCall_iii"]=function(){return(dynCall_iii=Module["dynCall_iii"]=Module["asm"]["L"]).apply(null,arguments)};var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=function(){return(dynCall_iiiiiii=Module["dynCall_iiiiiii"]=Module["asm"]["M"]).apply(null,arguments)};var dynCall_iidiiii=Module["dynCall_iidiiii"]=function(){return(dynCall_iidiiii=Module["dynCall_iidiiii"]=Module["asm"]["N"]).apply(null,arguments)};var dynCall_iiiii=Module["dynCall_iiiii"]=function(){return(dynCall_iiiii=Module["dynCall_iiiii"]=Module["asm"]["O"]).apply(null,arguments)};var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=function(){return(dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=Module["asm"]["P"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["Q"]).apply(null,arguments)};var dynCall_iiiiid=Module["dynCall_iiiiid"]=function(){return(dynCall_iiiiid=Module["dynCall_iiiiid"]=Module["asm"]["R"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["S"]).apply(null,arguments)};var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=function(){return(dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=Module["asm"]["T"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["U"]).apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return(dynCall_v=Module["dynCall_v"]=Module["asm"]["V"]).apply(null,arguments)};Module["asm"]=asm;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run(); +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};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 instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}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;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable=new WebAssembly.Table({"initial":781,"maximum":781+0,"element":"anyfunc"});var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{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&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var i=0;var str="";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0||i==maxBytesToRead/2)return str;++i;str+=String.fromCharCode(codeUnit)}}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var DYNAMIC_BASE=5280080,DYNAMICTOP_PTR=37040;var INITIAL_INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;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();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;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 addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;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()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";out(what);err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";throw new WebAssembly.RuntimeError(what)}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="native.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;__ATINIT__.push({func:function(){___wasm_call_ctors()}});function demangle(func){return func}function demangleAll(text){var regex=/\b_Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___cxa_allocate_exception(size){return _malloc(size)}var ___exception_infos={};var ___exception_last=0;function __ZSt18uncaught_exceptionv(){return __ZSt18uncaught_exceptionv.uncaught_exceptions>0}function ___cxa_throw(ptr,type,destructor){___exception_infos[ptr]={ptr:ptr,adjusted:[ptr],type:type,destructor:destructor,refcount:0,caught:false,rethrown:false};___exception_last=ptr;if(!("uncaught_exception"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exceptions=1}else{__ZSt18uncaught_exceptionv.uncaught_exceptions++}throw ptr}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}function ___map_file(pathname,size){setErrNo(63);return-1}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(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:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(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:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};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.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(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){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)}},flush: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)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};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}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=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);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){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;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=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+length8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(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:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(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:function(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:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(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:function(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:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=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:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};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}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(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:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(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:function(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(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(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:function(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(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(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:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};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=function(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);if(typeof Uint8Array!="undefined")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||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(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(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29)}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>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;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;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;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+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},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},get64:function(low,high){return low}};function syscallMunmap(addr,len){if((addr|0)===-1||len===0){return-28}var info=SYSCALLS.mappings[addr];if(!info)return 0;if(len===info.len){var stream=FS.getStream(info.fd);if(info.prot&2){SYSCALLS.doMsync(addr,stream,len,info.flags,info.offset)}FS.munmap(stream);SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}function ___sys_munmap(addr,len){try{return syscallMunmap(addr,len)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])},destructorFunction:null})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>2])}function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(handle){var rv=emval_handle_array[handle].value;__emval_decref(handle);return rv},"toWireType":function(destructors,value){return __emval_register(value)},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=function(value){return value};if(minRange===0){var bitshift=32-8*size;fromWireType=function(value){return value<>>bitshift}}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0},"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(HEAPU8[currentBytePtr]==0||i==length){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;i>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(HEAP[currentBytePtr>>shift]==0||i==length){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function _abort(){abort()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var ENV={};function __getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":(typeof navigator==="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8","_":__getExecutableName()};for(var x in ENV){env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__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();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}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 _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}else{return thisDate.getFullYear()}}else{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"}else{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 janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=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"%"}};for(var rule in EXPANSION_RULES_2){if(pattern.indexOf(rule)>=0){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}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){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();embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_emval();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");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 asmLibraryArg={"b":___assert_fail,"e":___cxa_allocate_exception,"d":___cxa_throw,"q":___map_file,"p":___sys_munmap,"k":__embind_register_bool,"j":__embind_register_emval,"i":__embind_register_float,"t":__embind_register_function,"c":__embind_register_integer,"a":__embind_register_memory_view,"g":__embind_register_std_string,"f":__embind_register_std_wstring,"l":__embind_register_void,"h":_abort,"m":_emscripten_memcpy_big,"n":_emscripten_resize_heap,"r":_environ_get,"s":_environ_sizes_get,"memory":wasmMemory,"o":_strftime_l,"table":wasmTable};var asm=createWasm();Module["asm"]=asm;var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["u"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["v"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["w"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["x"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["y"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["z"]).apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return(dynCall_viiii=Module["dynCall_viiii"]=Module["asm"]["A"]).apply(null,arguments)};var dynCall_iiiiii=Module["dynCall_iiiiii"]=function(){return(dynCall_iiiiii=Module["dynCall_iiiiii"]=Module["asm"]["B"]).apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return(dynCall_vii=Module["dynCall_vii"]=Module["asm"]["C"]).apply(null,arguments)};var dynCall_viiiiii=Module["dynCall_viiiiii"]=function(){return(dynCall_viiiiii=Module["dynCall_viiiiii"]=Module["asm"]["D"]).apply(null,arguments)};var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=function(){return(dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=Module["asm"]["E"]).apply(null,arguments)};var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=function(){return(dynCall_viiiiiii=Module["dynCall_viiiiiii"]=Module["asm"]["F"]).apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return(dynCall_vi=Module["dynCall_vi"]=Module["asm"]["G"]).apply(null,arguments)};var dynCall_ii=Module["dynCall_ii"]=function(){return(dynCall_ii=Module["dynCall_ii"]=Module["asm"]["H"]).apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return(dynCall_viiiii=Module["dynCall_viiiii"]=Module["asm"]["I"]).apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return(dynCall_iiii=Module["dynCall_iiii"]=Module["asm"]["J"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["K"]).apply(null,arguments)};var dynCall_iii=Module["dynCall_iii"]=function(){return(dynCall_iii=Module["dynCall_iii"]=Module["asm"]["L"]).apply(null,arguments)};var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=function(){return(dynCall_iiiiiii=Module["dynCall_iiiiiii"]=Module["asm"]["M"]).apply(null,arguments)};var dynCall_iidiiii=Module["dynCall_iidiiii"]=function(){return(dynCall_iidiiii=Module["dynCall_iidiiii"]=Module["asm"]["N"]).apply(null,arguments)};var dynCall_iiiii=Module["dynCall_iiiii"]=function(){return(dynCall_iiiii=Module["dynCall_iiiii"]=Module["asm"]["O"]).apply(null,arguments)};var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=function(){return(dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=Module["asm"]["P"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["Q"]).apply(null,arguments)};var dynCall_iiiiid=Module["dynCall_iiiiid"]=function(){return(dynCall_iiiiid=Module["dynCall_iiiiid"]=Module["asm"]["R"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["S"]).apply(null,arguments)};var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=function(){return(dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=Module["asm"]["T"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["U"]).apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return(dynCall_v=Module["dynCall_v"]=Module["asm"]["V"]).apply(null,arguments)};Module["asm"]=asm;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run(); diff --git a/docs/native.wasm b/docs/native.wasm index 36899ed9b178a255684e1c60eb903f13cb2ed616..755bae272dcbdaca871dffa2fab9bc7c80add903 100644 GIT binary patch delta 51431 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%0AN%=x;S;x;}6!ve3(xvJ$`pc+A))eV1555KM z!U;3lfE_r}Y+THiPtd|mA?h0y12Pzt*WDY#!6XXeD2 zwQ_N<+sTbVtnn{%>3)vF4YqxUZ)9=bT!x0?@-|(Qne>f@=3U;zbE1~~jJ0kQhS{p0 zG;70}WVyJ6cVn*y50=0Ii!4*qd0eEX1qJ;~cb&K%0>$_L-$O`{G?#|VrvSI=RlTb_B3 zr$oGKr{v9%CGYV-#GX7=;K*!w60cEf?bi*n=}MPf{y9}($t-D>qWs5G)NAELIg(zt z+pl{jN=dJq?AI+5W!n3^dBl4Ab;Cq?u9UZpc-4L_a&lj>Uze!d#D9-GsAn0ppDWbh^BU z9Qq~$W*K~W%}=w77n5O4QC?FtprbG>y>9xi%f{bvS*B~iBV_u+kRi=fjAne(#&qLU zo?_e)OVO2Xs=!o3ntodBK$|K4!43p~cH=UWJ+u*2@)`3sfa00Xmkm^m?q>`N;#_1` z=^iRUh2>Wt@Q-@w{%c~ey4n38;|*Klq4t(kSW`FmxvH0+ydRs2k=vudX+5+PHN>F~f67^XH@5$$HmdT&;YZGnbiA<0c;Hbp-1 zDZGXyKg%~hocDH%Y?BJ-YGOt&0Ktf<4!$E&adPHQc7Fb z(vX7me<*TxHSK6qgKsj@93(OF`FuC%rnk9D}qNY4`b$_uczICmRYsVBxFZdW=*iYUpK$+3lInC&vLAX9S) z?!u|-Rfg&As&znCZnl?p^LZNJsS4Cu6Y;KEJB5&j^23o(gDX}7QX}aLpbEte`-=p8Y|KdnH@vBWUi|{=1@mXR-UC}7 ziCyy}9zQtLAysWt+o5mS_;iqJP&zfNjT=+b7%zgZ)E(9Y)B#EO@d+zH3HZzkWRS+| zVJU_#43`T}^065mTz_!_#k_=K&4AqAd;S?vd<}gXFAB5MbZ99$M>Mu zt>@r>1l)lL2q=@|Q>*s%JCP>0pW=<~gr?tpXh#?$<+3~J25a~j;IdRbxZQ~pta(>J`G_NkAO zqJ3YS=8anasrF%%5aXJi;Y|X)M!bAsA*Q~Q<4>2o``S4eAH)@6T-gr}_mK-`;Y+F5 zax@cgCtO`JB!h(lv}(pzKVp0-191bK6bI*ns+n}p9TNmCl69&mjrWH+vuj0KFS@?^ zTO222k}fm8;q`ciZA3Fjq0AS*fxej?Lt_UiwTBL|*&aH>)zG=^e`T}dREBzPce+2_ z@J8GF2IwYkK*7Ca`|~`((_g7NPSA#)=N$(1B$=s!*wOyRI?u1Z2P7TE07+5eozOjd46pG@L26BL z@}C!Y&n6`9Q0@iKIcQMW03d;EyTDT-_cyT@aK{7k!UewLZm1j?h5u{2Nd0K4 z4jB)}z$p8Hd75lmlka$s$b!~XtuR-$k|Vz39laagLtE*fuIyd8;yXS&80@Y1sT1^iiP0^tEId zga6uDxB;m?CP7Z6Q|SOPy<5(VSaJAIHQU_r99c5AmLn zI9pUJp0Xc;xks=W1s6Q?82_H(#I5ades{3$CBBlm=`OBWF-2a{MFSL)ixNaVS=5?G zb|lvoJWoY*C$6O{V@o}!^(=0S!fRJ^8v&34hHC<528A9xahZQ9*vdKE#XQ%v?=|0> z!I4ZL7=6Fo$VCHJ*>|)j^C=eta59#!i$3yxAx3n={ePtr=ryG6#|K!`@X(;Un94a> z5KQV+0`-{(Kx3Z0{S6Z-7jn@kME<8=kRKMO+JG-L(A_fMr{J9&>JrUZksRj|_>QLh z&Lw`7$D>4dUOq*hix>4}w`dW=muJW^bw#=y7cE*>=e$KZ740dfgS;FqnpWp@ia}0Z z2OFnnl8BMd#E2%<*>6*JZf01vD>f{0T9#9Fl$?VxhER+AlG7s!=6DY3g;RaZ2u&N)aq z`MYeg_y^^x8|lM0n8W%}xm%8DBs$Ag^+eZdl@UlgD+4ECFgUy zzV{o{P?c92puVF0c23WPu$(6nh(ll4Eh!Dp`I&O^584&>POPa=K9z`^l1j>HBb7+D zB-W7hwW!seJ%{ab(9>!j%gIn$KH;dHQ<~(6I|)QqAEU$!d0ldtc1%r1@grZ^#kVAj zA=Q#-*AO|EPuemX*Dy>*Tad$6$s zE_l`us~L80mv}@vM*!TeNYRC_yC9>y;#%j~EjZnauQSQ+jYTI)dbF{)#~p-OHSuz= zvA7P06U|dZW0*Z_2(pA3A527Aa0~Kz0p;~%axr(lq?E} z3`!Z(TqMcM0h^iaJBtf)-ck`W=L9ZSm`z1zDl+|yh_8dIR1}X%_Oe32kok7XNT$z6 z{F2aR4A+&BfJt(EDg_CT|7Z);;uyIGfd+GP9pQqSO=UZRhp`MaISrRRIwg6h}DHZjZkh(45ls*j!CtFIVG?{D?B(|_)(1S#*m)-GRqt>{hpp6kR= zdftAW7*5ZP*NN-s>FQ@c2lW%z)BE%N#2xg!*iQ_gXP^EmJvgJkuw0Y?c_zsoH`?-2 zOq_9}=!TqN*^PpZi5-zA53%)9Nn_*?yFB=OQNB1-G`A&!?@;qz=7lMowsF+0S-|#< zwBu7`>`kKnHC2wcK@k@Cr=jB2(WQx03|y?C;S6fdS3r;tHuL=@lHx%(!& z5lRVnJ}KOC%}wx7%l-1;P2wGnN*3NM8tAidjwRnH7thPW72+yVt*fN3qi8L^yv1&} z!mrh%@xu^$13K%5iS6vW;H1Bb9;)x5@uKXgQs+!8-KBeE zquZbdYUJF+&8TsPH9F`;kz+;dhdi_RDE^ zif>2|&)h|3*e^f6%OY33X^7KD!A}jwPs;KOOd&ISo zvltvqn5oMgpF9W^9MXHk$FQ53QK**Zn`Kz*DmJ&d4 zOqSE3StCLnN|m3E5I6p!SAR(=pgUCX`SP0C3qH7jc0hZI+>|F;$jFDqOqnxWM9Y6X zWQ%M5Lw3K;Ry`3lfes5i1(D84rzFX(*@>q z0T+N(7qGBOkuTn-H=Mg%%$K{K5{bXnvhH%|)1p7of8lA>oXt;HH%Bq4Yj$;WaOuCf zd@NfvCwL@Vyr|l-xfo{kg=cNE3jJ@8fZK!^wPu^HS^{_z#-o`Np=}$>gjY5kFM3j? zcZ?UU*iJco1f=@rTWV`=^C zI$KC%vgko5*G(2D>DeLIe)^|~J;{6N`Xe>?zhP%SXJbG1oWcs;GgaUN*uSZybPGf& z=|!sMt!d&kp26kQp+LW_X^7slHLam+k}viX7MrQCWR>$gILm(DVTt|8AJ~l*PGg0` z-jHZg<+0fqQ1e@oUh3wmG}&X0=*||(|I7iS-wwV!M_lJ7CM&6pJ1qv$i?Y}cFR zkkuj|Bj|on{6pCfrEQoBqvW)OqN9TpFF#!B9NGn5fbx%G--r5ae_5=d8bj(IC0|}9 zn*NC~aQL^&TvQUP9w%#F5smmPCYM3&y#>OyJ6HkBxD}$AXpLE8VFqT6Uw9>rSCZL* z`Q0O$#I^gC4#EtmAw2p`)uTm4m=kY&3m(?SS8WHL@akOtwer?R3h~5_OqFKQi^G$yXuf4o=ckMocnBwKNgh*`U?_tlZ2uq}rkHsd3 z+V3c6*zg>%*B+kA4nDW{SGv?)9^7jyBq>z5i&WDRtMC=LOyUnv}R!{ETO`^I{r(=Aj*hV~7jl%*pNpeJ$Ft>A{6xi~lg$ z<11UgeobrdSN{{O;%dE)OaCo(`_&Yq)YO04R?}Zk_?4%{E!5ghXW*>Q)8(!OSpSS} zYCB=rt!Tw}GI?mc_*Q0gLe6JrtH(*aY*l63H|SQ)@*dHWSAFw)g^0TygKwS}f$FZ* zx%5Y~o~`rpJA1Q14eQh2)fVw@jnSzW?cOP2U%V(f{VB`DezX_C5O0#a|3`bfN6EPC zM|)8pc}e`8xc1;B@iv~pW|zSUN>CL&{j-gt?EaCTZ4@|1t!33W!X@u-A|}dxS46UN zs07>IN@6_5%bxFv=s796a>uYhjQ6P<#WnjxtwW~&W-J)7W%O-GKWVo|s#W>ZLZ?-^ z^2L%uKJ8DxX0I9$OxLf%MT3sIKHQmSLN+u_exU0OX|maQ9IKbVmB1`uwb~-wgq$gZ z*s*BtEaCa2SFfQB`I@1BRm}`FDZJ&@8<5X%i)RzO>2%QW>k|iA>Bsi*{uAewXpCHR~OeW+3PK0f~PzT6j~Zv^(7NIj?KleCSzI{umLs*^-JK@N%4Gui8M za;!ct`{Ie(72vF^b_L#bjI-*`T;enCyq9?-Y|{g<^BJBgoKD8n8H){6V%Nioe9(Lw z4BwjuVdCpFbQ(ryWbRIKUXtFO70P`{x?gsGf}NCY!-;VKTODNaSEA_=L9fQX4@g5#r?l_j}-My6$krG`CwSeZZVhi2+4HFGFS zoRUln&C1H^|6Ti>in9(*1WFA-g(mh&pg1sfdX~klJsV+eZ636^# z4`Pb*R2Ri>j%y=scfw!ADVC>H{#=F23G{Vn0fCh5)3k&?3bhGb8!IXTDb(*>7gPJz zU*RtP75LDpC90?oB!9J{;XokOo3wY%;}eyr45k5I>tMZxmrM2wRVMph#cEc>EgQY4 zUJx56kp;mTig?__e@tZ&ta)A4nEgTpD?YxmK%`fzUkOW`zZh<-x8 z+4%Hp##dTB`q=P^?@$UKRd40*#b$gj=7qp^>@kps>dUXia#gP@7Tkt3^o*eXCcm~c zEdF3|Ony2FrS|{4GAAEpdsH+{ljkfQlXw5>x8;b=akNq#ipHvkf2yLikbFAnv-vjf zP;jt+gMU|2)&IgIU$TgvU1@JabPU~8)#t>vI9d>jmGW5ErXSXgrESKEYi3I<$}q}N z(?O9NPcgV;ip|iDmYxoOqa3vy5Z{5oN0U9@gC6k02?Kh#HuSYfGGR2~ysZXZP9!u~g8jC#n%YTJ9nM@N9g`PbrT3sk6^`zdOD59S7 z9j*Mqd68Ce3WbO*Jt@m{XrH*d7me`1SLA#3_Fwn8$8u<&k*=n_!ZU?Nh+DnL{m;I* zp+Y>BLcu;V4)Ovk#nN9FbfHmXX5$7_-AwVe40HG!g84#*S*s|m;d~m!s2#KKK;E{9 zvcwmubeDS()?DHZ3YLJ2Yx&gC+XW8P)grXR4uv~~no6k_BqdW9B|S1dj0GY%CiZ<@ zp+i+00#v1l`gC-x`T`U5zuox0h@p-JCMJY$=+&1_t2p4GV+IWq=Kd7b(7q3iQ%#AA zn3zG)e+sMLH6gz2-`ZVclU7*kEfl*<$lG8$1@q6)&rW+q$4ty6bNbU;?#FuSuQD$r zx3WLfuyO#FnVWF~pIA8F9NUmQkXG=mDF?GDO5B@8TW^y#3o8c>?Hd!(RnzALb)PzBrR>9>wzn3!ILXxiH&ztqBmkBy+YkAX#J(i z3F7kIRPW^wf#q;~i>>vhNvs`C<%TdAua2Y&6JimXLmBNMXCv-#;|jQQw<2cd&S5n~O0FE}t zi5Ko**=$Hd{5ae+<6M3k?xFo1WM{1}+(A>UiFFU+Yhd<6BHO!G}W{tP4B~gnLybg8`9d08+NC)?fFFgM9Of1K0BoSFp;`B?2(fw+F>6viDDi0 zrIRS$VSjrPMVXpYSX+tbj+8cvT2e%Q9>p3-d^V3JM(<4KTScDqwI598TSd6(w94I4 zx4X&a6njfbgYRVeSalnSZB^EpSOfZW3U#&_mlE;bEFRy;D~j0QMM(C_L4m6Z$==Sc zH&VxX3VSxC3EL`iHR+CCB5xJB8BG8NKgrxoW;(lNW7Tg84KSj-Yzn1C=~4c%lOxLf z8-(#y%!o2p4B0W#u%Ap87pG7+Bbavq-EY-f8XR4fjPi+kENlzR!QzDiDiHQU%JRQc zSBx^Qf6e&bRWG5cSTLT#uuGY`8?vuGNORQchN)9&x!RGdy~!@ma>7=0j2WBdkW=n% z$rX=Hr@o$zZHLAfqIUS$6d*26r#@|Up!5$hbgX(v>hPFB|KN6TV-Z!OqfD4dkF`!4 z#P*qV0&A_77o$V8go~T~rU>zL8FcGI^c`h1@=t*)#h~kPG}1!!TH};(o~E-A%=RRrAJ674Dl+ue6V4RGMh@2<3l;4bo)BvvqvXyy0ZSC&V`QaV6xa?^ zpU1^_k73llJW|X&i_>c!T|n)vP;=OXYt76HQ1UTy7f)AFCls2ERmiB2h7YR9U5*^$ z_55}U+sR%30*u3_BJh2Z68_|l6hRf#Ubt40)pfF5-aT0aSCT&*d`a76(XW#Bqd2%$ zQM|`wUc89iduSoi&{RTg9qv>_b%#+z^`*yX(!%s2>f}Zd&BiIcCZ6vb z35;9DDH9`>(PC`oJGzWAR9`MwP`KNKRGKnPnOKlYnK*vRZ!zKKMGvz`Ttc0KoeNJW z-&t)jM*WSUT>3mqaGda4OUT**nVO{M*KJAzD3NL)G#Sb2bDKjBMr@*MHAQHhGHyADG5OS}fr#h8s8DnPyXC6<;oR z@WM6)EZXE#h{dRC>L^;Cq{opXk32<_Znu<8PtiT<7*SYFQL)aICRA=R#;SMysy&dL zdo`Qdu)CVNsJO$V`ElBed-k6DJ6%RTS3QABk6-(LmgD`$8PV=Z3hH!c5hCqL3UvDU zE#Ojr3`ZtI@E2&SYQ)kR&&w9p4TdTkDuc24b81Jc}uWobOT<^@?(D)q1 zt738r-6h7YrhQ0#&_87AUDpuKjR+7p%5YSeBiY7YLZdjeCR4F26~VQ%xFMjHmYPM= zI@97jZ99M}5O(8x6c4lqaejiHR>!tl01(rXo?o zcO88wmb^ssM8L}!&EXjI#V=D25E@>l*bYAt%8q8ot|)oTxw!r^C8}SG@C~SeXT_yg zD4ehqzD4|f1Kq3sBF=4~X(*M$UZFg-Nxc3F_0hSa)Rum~6$jVpP4q9mcIVbhn6Q56f~ut-aO5iAM4`V} zE?#?$f`?VBMZEpl#U3)N9HRv6A9xt&HiTh~Ip4I$(<5A4&ko%2=E6>!3J+99bWSS5 z8O=01h1cu!){r{=MGI;$U%-o>vraBESLBs^cw^k+GRdtbd8XuFe175x}N9xed)vs>h-0kBfJ= zP(6oYKH{X67GVXTN=afGJRl;cW`I#vnsy#%41a4x%+1cHA3VE_s^-i$UKaBg=n0 zu$#n={o}|Bsj>kV%5JJgE(f-1W-i1K7v#>?gCV0$4?l$B&*fZan~2!zO689x-#b~Q zeDKc6Mjmqhf$3eDByMT=zEYVog|O+F;EbujKl~ZYmKq@L1b(r-!S7w zN<>WFNQtd%UCn;HlLj_iq1p@Y)+)A9dgLw@wg2=Vsy!X=tex*UbZYa*h`2W?r=jbc zWKqSk9hC2)pC-_7bq9s3{w|7j6^6BcH5!J$MZL`p)^{kxJz$TErI9C8Xvq?1@R=tl zU2;~jUu48jf!xCz}*jxXBp|Z3x&AL*)>G437 zMxk~KHFE(-&^PlSScEJ9*e4VgiLtbv;kYc8eG$_^nDZ!uXYn2!!u~`gQM|p65`8xr zgCmTEFf-?RgdvV~7sf)gn2++2X9;=RxHjG}v)-Ao7W;l^gTcm|i#<1vZ zaq}<@hLL%MQeadZ!H251#al-x(&fTJyhd3hnvP&bXV|+PrEqD-ZGvNtQiA_syfIL$ zeK>mDAj*_0=&TNi=Z{j9BiIK=>HeU`R#qNthT*USGfE5#u3IeneL?}6R3e`FgaQNh zqX_W!ax@1X{8EJv17R}sP6Dgg{0Vu7vPaD#lYS@-CN_pxjBF)u%_4F36WSmn(YQ!F zag362!0hg0G!sVrr_|lI8JU%hQY#k|wq2MKA^IQ3Fu34TyhGCUh?-AnZj3uRVbma` znNO8jvXHNbLqYtz8D&x0zUHl7AYJ-hR2`?~?T@?her4kT6_a@H1YVfo8%7Q`poxGJ zm|@ocCelt&l=T#9fZPX<-xxVqBT7zCFQ3o2mYD25a+9%}br&CkViP}|phTpE)g5gQB2g^nti969VhUiE4lz2l=ruGv^Qcheb$VNZgD;1 znXkl8=jh2!ej^oSl%go3f&Dn(jNvy@tT|7k-Tf9T$_7#txPLrP%cMJ1QPz&#bf>nH?y=3Z%;dMY z;dC=Spvr(Z-1UH$X%PtG&}Di^_qRy@%x|b0`xkvf#nQjVL;7F%hT_@Z`wD$4{de9a z{XMSg{^?hZc$c@A{)evOtrYm_TSHE42kAfmTk7u5>0J$X6(Y?~x>Zq%VD1+OFHxZS zq4=_==Ie6+J_mvMz+=Dy;E;InGWn$U8Z^DQVEFX%!m|9Lu_ZGKiwA;+^ec)DqJ|^w z{M5t#Z`v-cLW zf&C&(eoO$zp3PJQGvU|cXFu$p!aNR~09fToU8Prxp>jTW94g66QBHy9GvIUJw79>8 z0;4!)SHR}TpbD^k0rHo?8Gyw$>0;k^h>Zo0L+lOM&w}S1a2~iIEZ1mED5vC2W`p=z znEW`WcHpnnT|2e8T(R@p_IxK7~_oFSRuX;tZ?DA&Mq9rzx& z0f@ub@h+j)b$o-m?|br*`uA`cgxw62pEmm8=g_|d@_qpQN8l%b_21N!{OR`;nkMyw z$Dw}*>_3C&7vNXm7BHemY2nmf*;9*4$_lwWa+o@iaDxT}aK@iQki+n5gejj+ihW(I zSbl?M1T#IalO9zYOn$h=SA%DBobdU9&ZIKWWM7@f1d|`hW7uUfox-m0#S!WWmPsPV zrumD0zmcn~7A&SwjQf!iIb=D_^Hp|q==E6Z57~gWc4lBRV35|m;nN0Rws407Z>D| z6&6gNl3y-!TxR(N@T1? zYgMXcms%Ud?0I6F1b7${5nfMN^QDdt;*)9w(ax-+sn-4Y?1;x(Ixa$rp##eOl}a>^890Szo0ES{2s)q)%QBZ}o1$pQCl|mK;5>HYJdP4xzZ*69 z0s=bnxEB2Fz~>HF01q+tcN!MY5t#@Q>mLr29~0nc`D$#pYfx&aIQu)r&-6oZe;@z| z1i0to7Q8deU?2pr0Sn<53RC|ndvJq3y70lmvclpit+mG%db=^NgFOuV;XnkyNs82q z&C`ES#6&JOlfmOiQWNY^;OhcJ16=`KSK__X&~wZ#&6kQe+@a9hO>It?qI3gq3=j*j zo;a!JxfCrzHbl6*u2s!)*yF*L03-rQz;j8OH+osU1t<@D?gg!PIA`VRFwCmsWAPta-Ng0q|T0Td%HymaH__*vZ z`9QHOxF!CkYICi!*kNL{Vn2U$u8-h?CaZaSG0&v+kaX_|v=tvJmbK=|k$OQ4Fl*_u zzt|taDM21Z;-m?v#br-QI>1rxtLOh(vlbycg(cu|zhV#SiBfO)sz&&YqHAT4-Coe`=k23^2OCha#!L);BgVl2wjDJE6K>7lNJB%A0a zkd}YWB&=ljK)PPAXniDQMI5r}G*hteoGF7nv_5(^#UoW;Fr_*{7uVupXlene_6(C! zaf|`Ckk8*`gj$z?R5jrpu({bF4Q#LVkwqsbQU1J2Zjz$(M-dnRWC0JtdmtB`k+Rfy zfb1wWHLwo?%V1y#kS#nrXn`(Vw&y2_?j5u=x2E$PkNMs8cpU9ur0YTwiugq)#fnl- zq-(y_pwx87TFVblGNwNHHT8@v@p4u9Xf886x>ZScNo=fPZWIY9l ziBj#<&(=8kXZ6IFs>|3+u01NVu>$VuE39q<&S&7f`n;o|&!ZRa__@lYu{fK7NlU#A z(oT??zhx4o>ZAl8gH)7)?zTm-yx)GiK{^GJ>?MLyML;L*?>^WtpbSMMhXKO@&f&W` zhr`6@owQAHvTaDaoz2_9KLUIsfgE5IFd7&Gj1}8_HQ%n|V7&*p7sv&;4ZjcOc;J3u z0!BPU00<(ZJV74y39M(C&!@yjCrB}e52Rs5i z3M_=*d@;*k3-sa~@`hAL{CA{_H~qDto=<~q1@H{;EU;4i?5~B$K!@ULA3cLZZ%6gdFfH#4E0t?}{U3dm+ff}pa zE|LN@->Av`^bCFr9L3=H7fcM6lvzL-&;a)iRpj;3x{0-yanQilK+Q}3L__+CeSunk zA8Ur9ybZ2*fOi2dk~{VOA}dIXl{J4iv^Z*h4*1^#-!9;PfZgJmAT7k3k4eIOO?o0w&@-~Ynh2<(QN!G3$;-UlRS z;3@7lXCDFwV6a1mLHun_jsVoQh?7|HRN0CA2Y+XDL+VEGa_18@;&;vx_wI@+`(`5K`X zJa~^W!lw0>t>>-&=uVcYmSt8foy6}PF5b0iD<^V{a|WQ4&nqs^udo%Cm6epm<7l@z z#f256g;UB43v6BB)E(1{r%G2BC0?=FlmwicrP!jCuI@^VO>tLNV3Op(1jt>{@Mx%( zXZGR-f8k)n5f5UE$(L9csRaqQNUfVBp8N~3v&fIs;v_L~hz#fya;WrQ-q!zCq!u81 znPw3frG?8@oU%nwl-Ajj&r=IdX>7JAiqgU)ajZd{?I6z27CRlp4LZ@C2PQJ)Az|ra zNWEbMEOO9-hKdPY45?W|b(Ie~h($xiW)O$UqA?V0b$)>@zj&T)O8)F}Jz?k=;m=+A zIpofHU`%;ZcktzbFVDfpWuOUs+pC0Mv=-cZ$S@2O5#|E;F9OD7Dk+5nJ~*d%O8NAX zVuUU#8YpLPvEZ-8{e%}*HIzncwQA*RRF1C@@Dgw@1myzFuzwBQ5BmgQB5)b*Jec3W z%!hdeCSK6U$GOsRi@m;n%R;vfG=7i=O6~}89Xyk`csIB4$4DHJa-_jIlN|AN&ZIkJj#J)< zWwBas8|$b-IuL8c1aNpZIqyvPHAH@#mek-Gr-hrkT1TVD1#Lk5xUqxcQgI~12GwGU z7>ywrEH1+bA}Udfihtr&)uMV}Iswy1#$EntrzZn{LEFnb z?G^ixSH&ZVT7df>?8Y9bC+fu7L@hkz{W{gsp5K3YdGTL7?QnY(JXH%$9FO{s}A^e#}4qz_{#nc&@t#Z*sOYlqYGLYFW1pKK0`<&3~)m z$z+XGQQbrP)l&Z+ymwE=G;0rg|Dp25Cr|a#PMFpm6jM{Q%*r7%FlR?*xd5)5X?W`3 z=LUN_!_OV21@Hjw0@?!|04spk&GNA#j2G-30hZ$p_yC;%U%(IW2Lb?on!q1u!hw-N z@ZbQQfnXp6umPa}KU9PnIPBp7^F;uWKormgh;Epcs`XbpHh-*Ij=Ni@Va^TTZh)(J zFHH;V%x%NXspuab(*>?DSYjkgyWU!eXAfADft~=q3MeTevbPp9j$5TNaC7;Z43i&F z6;{G#wPCV<#B^P8DhM3SG@v)o2S^9{0{wst@k(zkV<3w*Aqb0Zx`XH-(7-L9)rROy zc(7t8ep6R1?6zP4mh`U)%Ir#VisWpnuay%Z=qc{W%EGHWn3Je2=19t->fRSQL zAFYcN+5BHbRv9955bXaJ8Jezjk?%7nAPC2VpC%*tsQ(&#A%g240Az6SX1W$t$%(#V zh=PQ_B-&{8dli+Sr7!H6mp6T8DS9l~;wPf~@$YExq+sAug!g&bQ_wYWi5dGJ=yMHv z`3$9pvw)sc%IB5p!S!FY1_JnTj#%|H@%O%3a3w3)-&R3t@tm2Z+%aXd20YAj#o%H0 zG}uQ&*cc?#s6 zpsNJdQeYNP2Fwi}7*`J4kk^btSse$3SMK z3xGHfTe(=c;VO0D-~wDHZq5mR6qf);TAutQ z;13duI%bFhwKYkJpgBbBfPE8)uNfj0XJ zQGHizgMm}iw4iY;V#9wCk&Hn#M|C%g0QLay1OE#&0(*gdzz4v7;6sk8uedT$bCdG@ zj6pd_t-0wO#X3X&0Wh%qgTNu+-@r$}$G~CW2yhhmM3+B#kmi=g@n8O5ZJAoQ9bW^BVZB1N;4f<&rt& zc_k0#mE{*tEo2@}T_X5643zdLn^RmqeP*GdR;TBH?ohlP_C$pH2{La2v&##5_vTsj zlzh=^wB{*4B0meJG3BYcH)igvq)rMEg`>47IdIzz_qr<<|Jxv)<$>;410lLKMgxS-tgx%{SG+N^at$RCGzCl z1n@I?vCe0P+nJBx*4WcUoF1#iByonP0xXxGov^cfSFkvTbA!7b;4V_fX)&oBtOjrd cD>tHL0gEG;hZ)V`<0gx#d>O_mY`JRse?C@4g#Z8m delta 50289 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 source_line_index; const char *error_pos = nullptr; + std::vector expected_tokens; const char *message_pos = nullptr; std::string message; // TODO: should be `int`. @@ -751,9 +752,7 @@ public: } } - void set_error_pos(const char *a_s) { - if (error_pos < a_s) error_pos = a_s; - } + void set_error_pos(const char *a_s, const char *literal = nullptr); void trace_enter(const char *name, const char *a_s, size_t n, SemanticValues &vs, std::any &dt) const; @@ -1601,6 +1600,22 @@ private: bool has_rule_ = false; }; +struct FindLiteralToken : public Ope::Visitor { + void visit(LiteralString &ope) override { token_ = ope.lit_.c_str(); } + void visit(TokenBoundary &ope) override { ope.ope_->accept(*this); } + void visit(Ignore &ope) override { ope.ope_->accept(*this); } + void visit(Reference &ope) override; + + static const char *token(Ope &ope) { + FindLiteralToken vis; + ope.accept(vis); + return vis.token_; + } + +private: + const char *token_ = nullptr; +}; + struct DetectLeftRecursion : public Ope::Visitor { DetectLeftRecursion(const std::string &name) : name_(name) {} @@ -1946,6 +1961,7 @@ public: bool ret; size_t len; const char *error_pos; + const std::vector expected_tokens; const char *message_pos; const std::string message; }; @@ -2100,13 +2116,9 @@ private: enablePackratParsing, tracer_enter, tracer_leave); auto len = ope->parse(s, n, vs, cxt, dt); - if (success(len)) { - cxt.error_pos = nullptr; - cxt.message_pos = nullptr; - cxt.message.clear(); - } - return Result{success(len), len, cxt.error_pos, cxt.message_pos, - cxt.message}; + return Result{success(len), len, + cxt.error_pos, cxt.expected_tokens, + cxt.message_pos, cxt.message}; } std::shared_ptr holder_; @@ -2129,7 +2141,7 @@ inline size_t parse_literal(const char *s, size_t n, SemanticValues &vs, for (; i < lit.size(); i++) { if (i >= n || (ignore_case ? (std::tolower(s[i]) != std::tolower(lit[i])) : (s[i] != lit[i]))) { - c.set_error_pos(s); + c.set_error_pos(s, lit.c_str()); return static_cast(-1); } } @@ -2167,6 +2179,25 @@ inline size_t parse_literal(const char *s, size_t n, SemanticValues &vs, return i; } +inline void Context::set_error_pos(const char *a_s, const char *literal) { + if (error_pos <= a_s) { + if (error_pos < a_s) { + error_pos = a_s; + expected_tokens.clear(); + } + if (literal) { + expected_tokens.push_back(literal); + } else if (!rule_stack.empty()) { + auto rule = rule_stack.back(); + auto ope = rule->get_core_operator(); + if (auto token = FindLiteralToken::token(*ope); + token && token[0] != '\0') { + expected_tokens.push_back(token); + } + } + } +} + inline void Context::trace_enter(const char *name, const char *a_s, size_t n, SemanticValues &vs, std::any &dt) const { trace_ids.push_back(next_trace_id++); @@ -2528,6 +2559,15 @@ inline void TokenChecker::visit(Reference &ope) { } } +inline void FindLiteralToken::visit(Reference &ope) { + if (ope.is_macro_) { + ope.rule_->accept(*this); + for (auto arg : ope.args_) { + arg->accept(*this); + } + } +} + inline void DetectLeftRecursion::visit(Reference &ope) { if (ope.name_ == name_) { error_s = ope.s_; @@ -3764,19 +3804,61 @@ public: private: void output_log(const char *s, size_t n, const Definition::Result &r) const { if (log) { - if (!r.ret) { + if (!r.ret || r.len != n) { if (r.message_pos) { auto line = line_info(s, r.message_pos); log(line.first, line.second, r.message); } else { auto line = line_info(s, r.error_pos); - log(line.first, line.second, "syntax error"); + + std::string message; + if (r.expected_tokens.empty()) { + message = "syntax error."; + } else { + message = "syntax error"; + + if (auto token = heuristic_error_token(s, n, r.error_pos); + !token.empty()) { + message += ", unexpected '"; + message += token; + message += "'"; + } + + size_t i = 0; + while (i < r.expected_tokens.size()) { + message += (i == 0 ? ", expecting '" : ", '"); + message += r.expected_tokens[r.expected_tokens.size() - i - 1]; + message += "'"; + i++; + } + message += "."; + } + + log(line.first, line.second, message); + } + } + } + } + + std::string heuristic_error_token(const char *s, size_t n, + const char *error_pos) const { + auto len = n - std::distance(s, error_pos); + if (len) { + size_t i = 0; + int c = error_pos[i++]; + if (std::ispunct(c)) { + while (i < len && std::ispunct(error_pos[i])) { + i++; + } + } else { + while (i < len && !std::ispunct(error_pos[i]) && + !std::isspace(error_pos[i])) { + i++; } - } else if (r.len != n) { - auto line = line_info(s, s + r.len); - log(line.first, line.second, "syntax error"); } + return std::string(error_pos, std::min(i, 8)); } + return std::string(); } std::shared_ptr grammar_;