From b92da07beddd286cc16ef3620793e297a5f17a6c Mon Sep 17 00:00:00 2001 From: yhirose Date: Mon, 9 Nov 2020 12:06:48 -0500 Subject: [PATCH] Fix #128 --- docs/native.js | 2 +- docs/native.wasm | Bin 353276 -> 353795 bytes peglib.h | 24 ++++++++----- test/test2.cc | 87 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 103 insertions(+), 10 deletions(-) diff --git a/docs/native.js b/docs/native.js index d47559a..32745cc 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":838,"maximum":838+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=5278128,DYNAMICTOP_PTR=35088;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={"a":___assert_fail,"d":___cxa_allocate_exception,"c":___cxa_throw,"q":___map_file,"p":___sys_munmap,"k":__embind_register_bool,"j":__embind_register_emval,"i":__embind_register_float,"t":__embind_register_function,"e":__embind_register_integer,"b":__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_viii=Module["dynCall_viii"]=function(){return(dynCall_viii=Module["dynCall_viii"]=Module["asm"]["A"]).apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return(dynCall_viiii=Module["dynCall_viiii"]=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_iii=Module["dynCall_iii"]=function(){return(dynCall_iii=Module["dynCall_iii"]=Module["asm"]["H"]).apply(null,arguments)};var dynCall_ii=Module["dynCall_ii"]=function(){return(dynCall_ii=Module["dynCall_ii"]=Module["asm"]["I"]).apply(null,arguments)};var dynCall_iiiiii=Module["dynCall_iiiiii"]=function(){return(dynCall_iiiiii=Module["dynCall_iiiiii"]=Module["asm"]["J"]).apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return(dynCall_viiiii=Module["dynCall_viiiii"]=Module["asm"]["K"]).apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return(dynCall_iiii=Module["dynCall_iiii"]=Module["asm"]["L"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["M"]).apply(null,arguments)};var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=function(){return(dynCall_iiiiiii=Module["dynCall_iiiiiii"]=Module["asm"]["N"]).apply(null,arguments)};var dynCall_iidiiii=Module["dynCall_iidiiii"]=function(){return(dynCall_iidiiii=Module["dynCall_iidiiii"]=Module["asm"]["O"]).apply(null,arguments)};var dynCall_iiiii=Module["dynCall_iiiii"]=function(){return(dynCall_iiiii=Module["dynCall_iiiii"]=Module["asm"]["P"]).apply(null,arguments)};var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=function(){return(dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=Module["asm"]["Q"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["R"]).apply(null,arguments)};var dynCall_iiiiid=Module["dynCall_iiiiid"]=function(){return(dynCall_iiiiid=Module["dynCall_iiiiid"]=Module["asm"]["S"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["T"]).apply(null,arguments)};var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=function(){return(dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=Module["asm"]["U"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["V"]).apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return(dynCall_v=Module["dynCall_v"]=Module["asm"]["W"]).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":839,"maximum":839+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=5278160,DYNAMICTOP_PTR=35120;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={"a":___assert_fail,"d":___cxa_allocate_exception,"c":___cxa_throw,"q":___map_file,"p":___sys_munmap,"k":__embind_register_bool,"j":__embind_register_emval,"i":__embind_register_float,"t":__embind_register_function,"e":__embind_register_integer,"b":__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_viii=Module["dynCall_viii"]=function(){return(dynCall_viii=Module["dynCall_viii"]=Module["asm"]["A"]).apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return(dynCall_viiii=Module["dynCall_viiii"]=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_iii=Module["dynCall_iii"]=function(){return(dynCall_iii=Module["dynCall_iii"]=Module["asm"]["H"]).apply(null,arguments)};var dynCall_ii=Module["dynCall_ii"]=function(){return(dynCall_ii=Module["dynCall_ii"]=Module["asm"]["I"]).apply(null,arguments)};var dynCall_iiiiii=Module["dynCall_iiiiii"]=function(){return(dynCall_iiiiii=Module["dynCall_iiiiii"]=Module["asm"]["J"]).apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return(dynCall_viiiii=Module["dynCall_viiiii"]=Module["asm"]["K"]).apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return(dynCall_iiii=Module["dynCall_iiii"]=Module["asm"]["L"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["M"]).apply(null,arguments)};var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=function(){return(dynCall_iiiiiii=Module["dynCall_iiiiiii"]=Module["asm"]["N"]).apply(null,arguments)};var dynCall_iidiiii=Module["dynCall_iidiiii"]=function(){return(dynCall_iidiiii=Module["dynCall_iidiiii"]=Module["asm"]["O"]).apply(null,arguments)};var dynCall_iiiii=Module["dynCall_iiiii"]=function(){return(dynCall_iiiii=Module["dynCall_iiiii"]=Module["asm"]["P"]).apply(null,arguments)};var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=function(){return(dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=Module["asm"]["Q"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["R"]).apply(null,arguments)};var dynCall_iiiiid=Module["dynCall_iiiiid"]=function(){return(dynCall_iiiiid=Module["dynCall_iiiiid"]=Module["asm"]["S"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["T"]).apply(null,arguments)};var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=function(){return(dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=Module["asm"]["U"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["V"]).apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return(dynCall_v=Module["dynCall_v"]=Module["asm"]["W"]).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 1b9f64951b7b66fd42945e80efcf3aa0f5716b89..7af8445db984f81680b270253679980e4b784297 100644 GIT binary patch delta 32780 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 delta 32278 zcmbS!2|!gv8}^wwbMC!x0WYo~C>LPe*`8fApqJlV8`zfHwI8>Q5j+B6SUBR#d$X2j-sPF)wH zDbz_+O(FPa6MxKq8c}?$|FlvB6?h0y6@@wM{&s)ObcoYoBLqGUe@$^Xn3JhCkYXaH zI-O3YC{(dkfTU8v*XHZ%t7)2_AM?aAd$7iAO1VH=IpJu5<@_9e<;wZ^P^XV4l?B() ze0(&2yLc#dg!qJ3bX0T%I2<7a$gd)CI8?g>|9l*tbF5x7#mN|>)vGm#U=>u#d^N^Y z<`du-=~JfyA&8w2WI!P*Rs9sg2nk@G&RQ^a`g)$%+Qj&Y?1P6mq@xg<=1bvclYe{( zwF?9JK?$YIt}4Vw0fa%|tC@io4_;tI!AEH&`4>FYWYIJmu?Z0o6MVrX_0nKq$k<9e z?21F`qn-w~Nz_)^v(i?tr%j_a@rVeRC|6Oy$R|`X*bsrfHXjm0^bF5#>a-`4YGk_d z&_P~T8j?4Z-!(Er$*1H^WxJ<>eF*u&Gr{hTS>Pm!PMrH}4;*XAx1is&j~pp*S2&jA z?`GS_+Q%$~EoF&p0h`T=)EnwW^|X3KJ)rJZx2PM{kJS|QzT;0vq2q?*isQWFl;c;& zVMj9A2QvTda-1OqNM=i3% zGu_b&e>XZ_i`i-4VQ(A!7rjHb+q3N3>|3q3Eq25Hwf!r+ZMJ9HzqEg0@6&sO{WJS| zxS!hBz(39YiTz{yYWtwzRqzW=5r3BB&oX4&Hya=mXn*Td{3=$UWO#+b#OH zt;mL?+WxfNw*6uI-F6Fag|?fv8@B7VYql$RyKF14U9w%Y<=f8N&e_h|&e;0&K509F zkmI&vwxhNqw&26?3eLr!A8kLtKjxtAfbDzRep_%3{Px-Q+V;TBw(Yd-fVAQ#xrE4EhHqklquvRynkU! zv8}Kzw=J_>rkCkl!fi2giTEcp%_Y-AmfGNiWZ05yzmi{x2O{E`9`XUu5?i8eG5ie2 zKeXUHE%>z7Bj%WPRQpByNjphT(w|7SmZ`1N)@q+>mG+bO*h6)vnx$@4zf!+cKUX)X z>(zAiQ#DOpt*%l(QXi6eESB9PzpJ;@LiM_OO)Vx@)hp^{bvC`EUQo}gXVpCQ`BUl% z^$z(#{a)R#=BVGQd(}V5LG>cL#=cYc#i)DKLBYWf)cb0&dQZKp{;mF{-hrY&)!XVH zYVcihmux3l_*bB2k>KCdW9oMD{PRcEzew=U>S6hENW26O3Qo~hXv?)h!OOH{jcdV6 zwGXuqv_$O-`UPF6Ezsh%xmuhS{GK*Td%%j>I=YVj&0_vyx7qKkkOkjh*V$EenH8{0 z>;lVY!ROgomdDPp)9e&G!G2?dg45`)>?r$%9brGSpV%&So4Q$Dqo%5x)OE;28r{Qo zvt2Bk?PNRH4%JY)Bcs z{0T!hzKkWaV9q{d!E>pHwZPvGJg5A^)%|3@hxmuE++QkO^SJ#JDyJ@@QB;XwJ^hJW zantB<#jWaTp56WtL0cBl=pI$w%&kUIzX;Nub=DIXQ9aR9?7xR(d$I$nXi0ca@|+BK zog{mnF85?iy3{5(f!u0Ks^}?T0U;8%5*?wy%dNW6_r2DVLbIMGgL?R@dNLSAu<(+g zoYSpY;X)(4O^t#P^bZ<6RbB1ch-63DdqBd>TUDo-r;rJ(+M@py6n{lOwuFYOYG+}7B|_01 z(cv(hzv9F=<5w|~BxE+OxPlRnXV$t4nO_7aQc{rFCG<%`ay$#Fy+kg0u2ri=c6cgO zPph5rkTg(W^C{2@>}uQ%U<1HLO&DBwHFD}3GEZ0Es*wy&a*g^`XEC=DMH#9C(cRHC zPh~D%~&)VAE%Uy**^t|7Rs2W6%^%U1`K@vSpquQVtCPW2SlLhK6K(`HL zN6oS$PCeE0aa4O$zB5sCL$gsR!c-)RIwC|hmV&A*dCx4&M^Zf>)*0fKWk;-v6;5dk zR1!Cv7Qw92^RL^YvZ!o!VVh*D*7^B4QPYRi9fw5it~(LBn$-J%BzgAMOC;HugX?2L zmhE|=!QgNRAQ5hDd_RB1&7x>fxC2cH08L0%O3zOXW;QapB8Xe-XI5>oH5LyOuV8gMb-!qR@)Z5p`d`*-Q-!+XC05fs=$YTh-6cn= ziBO?2+k_7E91%WlM<0J*w~t%xCo~w=8(Q8XQQH@*q zS=vPUvOVJ)kEMl6JVzRj(;%-O^mJ*`tsNq9~K2Fh5zuZc{5Yb5C=N6`N>ae?h1S)JIr?~*qf}%~v2%pUWrUAvHZn zp6gBBn(Qn+<(t)RVFrnEgHDtfT85Pk*0W6V-6WhL40Z{pdah?;vz8>+v!>YxT}A&Z zE3i~))=6*wYe(8;|Ldm;y=Ld;?P9&P9<^*{^Jlz+fa*r8@{6D)-KeLa`JQT`e~S>^ z6TH!@3k$k!{zPD`*8Y1(S=F<)VMWR17TV#^wl~(T&VZ53! zQ()^7yR~lJss%d9I#g*zU9dX}PhyAYI`Qs^7De`-WqZ<-);jv%lh)kxQk(f^(nx92 zL|3m&i?CV!x4rEJZ%ag@?}L6-v_#SVBOYmq4biW*Zx?}1VtBh?^c!!s%lY>dYzKR_ z4pqS3qC*bwgAPJ8sN-(46O%)w=s3`cAywM62+eJ#E75beV++w?xS23PvZqa_rI{x? zX^cF`JlFLT>gT5*jj*w+gR4tsT=(getnl1@vP)pXU6iv@)h${huzoVLPtOa4T=q2U zwYl6ej1xng?FhO|MK4V7-079(mn;1oQ0Mw7^V8mmnwmhmc`^o$p_ho~tt~Aw`#jx; zc-jtp!?S$Qb5EJ-!_meNO9b&oavv!{MU3elg48;pJO+a@)lc3h(#NehYa;?7f<(J& zM-bN>Plv&)$@0uIgFmHVYc#J$E7^}`foFeBs$^~(GT2FyG6P4QRLODAjj@$Uf=7Gh zG|9-!eCz5RP3|l%e^C!>y6uB9; z^gBw6QarVmjgQ=*g(IqNm^ET(3&kiTK~VScy3$q=9Tp6>d0A~*bl-DoS*_|t_eF`z zLdV=g^qvqfxb-rC=oVE`sh6^cRs-s zB4lOr8i@;to|}LO(ZXG)Fe6<+#1tf4qn)8y!<++*Q&-j{xtS|hp7WJcq}%2+Bk2!m z2BL4yj9VW-WBQ@6Fh^7U%8P2}?<#o@6z@Kz?=JCPyYwBCQ$>#`eGd@tCzMhTf8lYe zjEA4_I9bNS>C`g=H~vjYKaVq`s&?cLqVLVDo6+2kIyv0fASM)kTdS4JzCofJ5v83X zN{>c+#%$gB56!gYH^T^O%DcXFeP+k3j-=vF;&zUY(DY*EDHIZnGF{KeOx*q~(K51N zzRYVowiDNGiz&?H$;jNAJUutnYnfTe9m`=sIrl4t)a6kPw>7}1YCOSgJOlwMnUx=Ru(K;wA zm+Lc6lkcAlS+9lrAkZ7N%}q&F}FC7L@D~513%RBEm&mMW!Ld9 zf27po8daGmhLI0F8*>AkM@pK&k<4#%LkLOBJa_mltEzjt{@Rj!>6!WKN#}1Re7|Lm zIF?C$P7;c`gSzbLd!nwV$BEJO+TWf{C#J#4tZ}kCAty7(pL&jHXYVSmW}f}0Tlif- z4MZJm9IfZy&GbFfiugb6^_b%TPv5**6))aZ+zyxN?~2whOX2f*?`YQ~3OEz#X?yMo z&%v{;D&8!^3Z1`u88X|RYe~qd%qi#FGm?_I>5@Tf#TR1kP84T#Q6~y-Sxq~|oI_*I z6^(8(N%gee+Q^e|r6Kv=v+atT9QK^Nl0)`+)?D2-$ef>7wdU!1>f_USF>n9B3$2Pp zfoRRH6`sx4#)f}GT$P-aWU_Wz$#O-zf-s_(zB!)u*W1@N#{qN)A?Ufyj@=v!9__h3 ztF90H&${mE(=*r;a-%BE-{EO>qb`Z_ynJIa+WOBo?8Fxt6a5_KAfEi2Bd{{)UKoW2 zHmT6S$XWYVe=;C*#;w`}PU`QM8Jze3sv+J!FM5;tUwa@1IA4+a+YdY~?srGUfBSwM zS)EB9oK?vHex8sia0XM-$A5t9Bj%5ZnbRHM8en`*$xE95$x;RR4|u49JoE2^glFHB zF8qRnj3J-%-acdwS?3`S-28VRvWWEKvwX<}($BczOBz$e9Oe&(0ep==c?tucju6LNL&_;amEO|pi^v?kw^ zt^BDrq%GNE%xOdFqt`dSY)hVSl3o0-Ze*zMt`A5wmU6xP6~3z{sl+FDCr+gC?e63T zobf$KJ#g|Kq(7X39%MY6K~ItfRdywj==zEh;n*1A8z14M*mObR?&8T$O4iFylCf?} zcLarYr&!5=!Hf=bX^aqjRtr)m!0RWN^bEeXC+UHhZ}t?$VE8^oPEqnbFX&Bb1RvD& z7%aA6HMt~|os;VzIwk%}9}>m;^da-fA^vM0(v|#Zg!IK8am8HGWid=Tole=4!GNdu z&VHndc5oiiH6GKS)Lh!1L}|ryiLQ#*8rl&+Dk0gx-$Gza9DLC4V3p(&b6FSmOq}P4 zqUZlf^iPTvms2kUN-xIJ3;z_Cuj`iPD%4yzHP>~`bxm_!)m&FJ*JaIBpt&w-u8W!; z2j&m%D=wQ}^d8YyN|ZYr!=ka!mzt~{!L2ImabbKsn&u6)gPUehyUiQxYk4)|}w0sn`yh~PKifd3dA z@SoFMXEo<;O0*cav3dacSammz@Q3{|2X+YiW5joKQCg{qa7Dv*#qp7Y$y2^t{y?Cg z+pd4hjlra|Z`N(RyWPI}cLsTe3@2n3AMq@Dn5O)#XUR`A)@Jk@LT208KE-v7AAJ!V zNk+@z1Phax zR9x+<3I>xiy$mO?$tgf1%#6^Au=yZ*QXE@lda@9&K~njkC8R-V(qLb|2y+(@ zOo@EilE;(w<_F}FEnfcc17hv*Vy)}l;}v@n*tn(UE+HS{Az5zkz6ENCwR6G1g?%Aw zd)H{5gwxA_e1cKXJ1@#G`hG~_RdSjCnoJ5{r0iv+ZP;V8{KsZ?89aD7>CdD8W>L?N zB?M_opsoivaZEst%(LRv-ta14l}4(^WMH!x?5XqRc59Z&4J`ERxk)lt- zTsA_{W9L(`qv!00vOuO0j+SliuLGNz29GJ^st$ug2qAJCP;el(2-kCwl1M#41N`|a z|7H!T?vttN8AwX(e13KfsStzM3*#S)J$J4d`)AaQ9tCxyBBBK`^h#uj3 z&Lv@plRyO$6#yj^2*2AvX+SX%dh9%^XGzZlpo0=61LaAS26S7Z44}lzLO2U(i$pm< z$0RxeR4h>*Q0f)IcMT{*q9UMdiQ?j66^RmovSOs_6u>;`nGRGa(Pp4nS&-R4i4q+I zN|opsP=-YLK-mI0TZsC(A-2?3z|vN(uT?!AHit<>S0ub)AoxVl7!flTWpm8m+wrg5?{?7=ultuT)8 zM%okkjWuLd#AY#un2Y-jVpuR?a;a}3|NK+ZDA2CBv6*2vR}Oz-ZD8E|lsGAt3-{7V zG{sVF;YJc}%=-*CkjPI4UJg+5i}73rIYh~?X5dqqouk8p1vi%-Fj9FU(?(g%^H<8zuStjcueA;`n?U83m`JxI^(V z|9m3}<1Zd#P5I6gQh|5cPCEIBjUd--inZ1|+sRo>#D?!6jo~EjAl3Md9b_L#;G1`n zuC(wk{`XEY5Yxfl*(8!Qx-XT~?|AR#m{jlZ;mG!pKT z9VChoUy>R!^zJ4;LA*?UR#Hr^>*$$@;dYq=_>ej-uk6jAJviy5P9nTq{- z#g(k0qH|tlAL$wMAB=(n2aOo|$avRWhV5>6h||{p;0(vMe91J_jV)@-k#0&qsK->z z*;&E3n^h*`z-Dt@#PrR`Uu;5*Y_D5@@hc@hgQUsP>l0I=iz2%EX0T_t2h^tg{P6CNlyH>7lOQi7ZER z@+?x6%4dB`!eWqBv7$u*i{$u;3ALH7)P-gW5Fpq7ANWJN9_I~?1+bDWpp|R^b7dl3 z3z;i{A!77$8Bn!vhnN`uhp}VAWof!*$$38t5xw1BZD(lDdmcJpXtKv;wVsP$p@BN@&GI?0$N(6?;aVqfa0)F zNL}+v6_iQ|Xh{i}zE?^Km}g1d29A-D6#`k2322E4m@GG)^&(8MYl>16eg&3%-1}Bq zV*xC20WEO>v-ZhY1uV3r5`bl-@c>CNX3Z1W5)&}vTPY@BktLP{EX5K5tjGkkq>=$Q z9aGw2gGl)1n8{9gpSr4J+Z{f!7`ue2HUmpN830MwV`M}ETZ*>4PrGcw?Tu_rT;C7@ zg{H1-QlGVB#SuCEx~2>Kd?=Dgdyg1hk|IVt|WsrI_&EY>C|lmSTkfmY9H+ zn1H#*q?Givq>8;#MWs>#T2cb$AD2=R3aJ>FF>ZksSuB7RnShpl@NTL81J$@B={?4KkQzJ(?f zzFAf(_X5jQW&>F15YS3x4q%?COZes-k-CI$kqKjj_g+ic5n!n-7r;^`pr!2C0_wun zpzzszR4Nkipe39SEQRv`EMWmH;Q~`w_~ia7g#|pqCm$pghgj@|rR)Oco|Sw8rdVA< zF|drJ2*8pO(27LBoO4o2z%>5M59Bv~`bSd48~;c)@uP=GRH!M2>4zx#YVoBpw zbIA;{gnM#HGcO}foaF$CQK^J6j-SgVEy!Xc=rB1&$R^{?Pb7enja>VMbPU~u9idcg z=;_HU8XMXe_*k^7Zn!wS-o%Ihf{nwSM%pj9un)nFM@bSc25=~7ZoGb6Oo%t}w@+YK zeiP>>Bem^>V7 z;4m!y9C?kb;`h#xSIA0Z)Ok{YiYX@MbFK_KfBgbxj-T`87sxvS+jfvBMQN!Rn4{>M zdCiMB#Ms2I6q0a0^&Q!F>B=a>sEJEuj zJjI_@4XF_A8r6~p`S}QA{*@(;EZQpKoaK)!o*O`0kngyy9PP%wEn~!RUfrJ#<)_Qh zI%J>WaM44w+{G-?NWtXfps3*IviQaFv>mpet4Gps-n9ZK z6yCWSZOq4p&=5p5JA|$Y%d?UZ3W<|umT3@hP&BSDqWgVNhd$-#AC9W5r^fJpb!kg} zD3nehNBMy2v=VNMFHSb5ST!0d zO-%URDB6VAu170*wVrN3ga1`4?9!Y+)sR*u{SBz@h5HhGVOy^a8oXN3^Ex;k&Z6>D! z|H5{v6TL_NhnhZJgqnN*rsjty1lxU{-ko0lAKH+p>4d-4la6MwnzM)x8$*{H?>XqqrlmhhOLqv(4cL2Ec54jq1g>~~kn@Zl zgXmEq_a7Xoe|gNe-Y{BJhH3n8FfD$ZY1;_+E-@Cq zOfyLtW@wxsauv#5V`xtt$qpSu&r@t$bsUF2c^~1O#vyF+I5fb0JbfH(ivH!qIGT=+ zlyK2pUNn_ERoCvKo58#mtJz9U{@!>xo}}>`{TQydfp?nz5RZLIh-(vHG>6s>#sv<{(8zdyod012bm&RA(Sa+%IsC^t zv_a=QPF!h3T!VFsu3B6s!r9yey^!N8ibn(VEy<7b>f3p{xwH-0&Zp0%9YVK*0atHv z^+DD5Ni6k=yY5N+$GNmh+qef}6po-We<~7&BS9g7tG4(|A%cnnE&U&vc-TBz)i+Dt z4npz|@UHXda?FNK&%>aR#2xW8(rF4}^wHyZ%Xr#0q>P8y`xFI?(ZC7ICh-OFv^MHw zW;{*C4N=}_KCKmCUJ*qyaCa1bv*y#PF4GVDNP*&um7@E`XY*09%p0+pWV2B-fi|J! zE92Qkw5h{rmqt6O#{8ue*O@c;!(=p@fqdLD+PQ+bjnD`+d9@siK*ncp`&{xb|G1G#GhjR?pit`V5m9gC z-Xn@cX9+fA=0;kqg}@+A9f#Xu){UF$HE{a{x5zuA3GU=eGBL;biFeveEBPHD<~I3^ zXx9P$(q?4i5MRC-J<0}tb~AkrjiB9Ev?KYE&-@BC;#*$nYs@kZ@?Kxl1sFVk{hFRI zzBOobR_O$FRzT|#Tbtq(6@Q~$xohujqr|ws9XCjfds&nc{$Mvv2#fs_S1j?_mN=f) z=iw@)_y~=-E?~nNP5(W?4bjFanqy`wld9{V$OJWnA+p{s{J%5sPSW=Uz(vwyw@Qb9Q=6bMl-bdPu}|w z9nkfRyhrY}xx9Lb+X=rAXB8w?zxKCmwDQKnFX&;tcPJk5=Xr-{E=lBH8MO6$`6BBSrGsQ4^L+&)@xj84IoVE*73t$~q0@;I7wF@OFzMm+c?9*6HerVueb;Mkd`HK_&X!u=dY{g#pTit9#~6Q(;?nYFe(56m%*}?+ zC5rF+HuL3|G5gxgFJ4BQOXow&tFw*tD>PCi9~uX*)5ElU%5}?N6{AJ-334swO)9HZ zjBg7ucGJsOjkkWM14*@G=#bF_#ivdc#U6q`I=-g?(yxkYape#C7cK;yyG`o{d;_10 z=Aer%m}mS!tNmB$<6h~7{QRG^LcnFbi(AU_TZlR!!o& z?x8!8PJ82tV!A|p8+i0S9c5c@6+!*@q6aiWl=A~R2IdTUh{L(!=&S!lUvjl~2bclUL4ey| zj}<33LjW=64Ju{r@Ai+P8KPh6Zc|TgSm$d^?b%+Ww{diMIh}+%WrC61`tXxAAj(}1x9J?w5rM9%Roymm zVj=Q`)!>szR{(EkQ{Qm~T73bQQ-`E+a%}3za+bWm$a!Z}pSE_jWr!SyB79rYmt;aQ z>-GhJSzSx{96Ns9BAsuwtM!R5zi3xCR>{98Ow>HOGy=1~S?^Gz!J6WuR^^R+)CneD z?Z2&1k^48|p6X`)l&?A(jW5Gj9obQQor{`^TUFvT40o+5?$Stv!oxQM@MuXLXw*Jp z=Huh`0dIs8b2rJu2RPM_9@TE#b3(g+&Mg_EC}8~{f7M^@_L$dBfAtWm)8YX2X;Pk_ z4^V5u@hPXSKpxkWQzw%nMrD`kLn`99SaGG>oYll}kHb|t0_R!0UZDD_E%B0Qi(C&> z`|<06s^23Xeaov(vkA}tFO9a6;afqyM4iV84mF<>+K=&|%4(a?T-h<>AP7KiD7tZ$ zEc-@h2!FM*8iW&AV|-=xC6&J$st!OK84#(47*|8p0CCY6FN1l%>gt0scrPF8Ry#l9 zu`B#BkB~?eALJMif7PqTs8~~FB`*_em3hgjtzzFV*B~8GWqCmzwcR7yJJiEG-G*H`?$aih@82ie`>flG@{hO9@q%~FVm56@Ryfk2AOLZTw+_J=DEj+x* z=Q1#-wTdq&O&dv%;I@x>M7Jvu7gpTM_q7)(7a4uNM3)SBy;BM2TK~=^5g8+O)#l|i zc6LF{vSKvaJ^^EyFCoU{Zfd=f7o&U0OGW-y5B0QhAQ;72#rpPx=mqA7O}H*|o8XFd zVO4b|4(rEeg&EgwO1+wgz6Ep$72- z{nh5e{|B`ScQs&@c*8O3e*WhG^%?l~9;il=hn5NS2}$ z-Z)6q7yeRtR)yD_ptc7-8wK2Vu=I}`jCPo7Tp6s!3RQ~_A-?yXl|fscMWf5*enVsm zpBo|>cMef;+isCjZm4=hT*5%YtMGd-NP#B9q=1YzWtjAOXP!EdcYaZAKo%MkUsU5n z95Sx~FUh<@qzZq?*ebqrj9QTw7OHmsYB;OLC&#EhM#mAV-IA!nhrKKlFD1S(@#?qL z3Y?6Dagp*b)LO=GBh>{ZQOp`$YR;cVtBpj|WzG2qT}XK0&*}=E(TLf2hgfwHUwlus z@x&9V#)rM4*6`-f^|s3RN3W<&;34C`_=+^PRM&8v#L~d8kCVBcRhd=bJIAS^WSenv z9LfT6|Fe*O9WV3tSRn-&u@lr@LipgTvJ8SJN(Y4$WV|~Ol?g$gO;VSVFL{^AG8I!N ztNr1*cd{&rpegE0czbh-`UIREQ>174*VH%hmhhVNJp7s{R^Do=EbcE#Jtsp>#D zji#wD!}(yE+5^sSrV}w8Ny_CDr>if*`C+>H6r7;fg{Lv8YY{cm9N-UjwC1wIgZ5C;g?ai2%njHCkwQeI;)57O9x)=>_sH0$hs--&LfpUbnL!0vBJLal&OdE!9bsh@bs={bpe*EcqG7wE{ zh1t5ECVawtwV|276};v9uxu0FYpc4H-%M89@vaMGiO5#tS)iUpVB&IAf7e2_8#K#W zJ8mI{D(RojM=p}eHm0bD`Kv3{Kt64;jB({+^)`4;uY_#FC9=l6wnXiYUSaDJ^>@|G zL1iAl6b-8XQZ>Ac$LA)l!uxTxDRjV+D|j^|4%nN}H^4J?nR*&0C$D^?M)8TuRX=+z zH`TEf&f}M>1qh$ALLFr$a|NH0BE$_O(+*>4z6eyZY^J97DwwJ56j#`kO0Jys`&FPQ#P9f2pZNIMcQ&gE!Z z#l!R{zW5ilIZ}ry08)4O7xfdq_A@mHI)s^x*&EOypk-{`sIC&4W}QdhJ|#nTMyURY z79a2Sg&IVD<}ZFBTe0ZN*lf*>i_*u`GyJ8u(ETjluU6*mkE_q}g(p-856mp>p88~} zNnTsNvsumX;{9LAvXnOd`s-5siGd%mv26eM7U6He_MyZyxX6uZ>-FE@hklyy)!Wn? zU`fnU!vqTqD_BgM{=QwZ+})01jN6I+r3sgKYIZ4pd6yTb7z1~!lO0|=^b28P=^(oS z{eUX4>`^~GAbL^bn}3u8CMre+Ui>49 zIG1-lB)QOCiq7f8A$3eiVGjEV9J0#&$Y1+e464TdpH(b+tcETMo4@;u>OzJeFX5v+ zCJxPS`7dfUo_kbQurj5;@K?1O_SgA48`Y-#^sktk<{AaRs^^93)iqcRUU*!62YxR- zfH_53ibgF1PM=WUEeQy?ip5F7DU9>7(uDCNr^<-Q&{=0nL-(I46WVzx5M@RF2}DShKonNW8IVhg=2E3OQEo3hdj zBBf$ZBbAQ1T1Kq@O^7+Kd&R2or?1O-nk?oG*S$Sem9KB8@m8?}@fcrb=jk_v8nZrN z>hO*6SD_jqSgQW6)~7qMrglaE|~=HegTmqj5%&)xTi;t;`-xbaZL&k?^&V7SV@ z;t&78z%coa+LOmTM0EI@K7cuN~1$rJxs)xgfgrQrS+@uq1YS+{$J+s;h5PT;=XQaRV3qoNg0?A zce1qC;D;la=p_0_GF)YqF@B6!vojf4iw%aKESV#n87s{>B6L> z3V)#?n?n|IEK^dVEojE?b7gRaZ)FSRpu`|xihQItLbQ<{rG&HH6;Z+OJ{fZ*PYo|f!r8dmmH^RbEmO3MuX{Wqxfq0#2aXmhdG;p#&dvo zpTQ>cyf;~2L)x>5g|*z8B&>PrftxUWE5T!gnOX zLR}ZJAY;ZNR-NLKQHMn+ri7I&!1yGQMN=D2WbtV!Kf9Av8skhS;(yhuwF*s8}8%imw-ni&2*1SWj%r>(@#H3Lgo;m#Jb)6Q`W`-5{|BIwn2%f*)A@ z>f*yzggV2qrhydpqfK?#GsgF>yh{?R7Z@y-H&yYcffD4pOP!7R=Si%A@mUi4n>0Y} zvBijvudOmj?CvAs_;n)e0wOA_y}6pgY%$&am8$&0Qg*QiJ}ii$Ln1^IttyzYBZ?|1 zt`aEY%@zs?yvrXXLdu{W?Rbz|Dd&`z#1qQ78sM%t@0ZLv^5LH`Ut@4Gn{Gp?9azcM zi`MdbD*KI+6UKl~L>=48AFg55P?4*B%CJ*v4EU5`O5T*;N=NfK!Tr~<8KT73u_^c& zBBN+M!_|qV#=H$|l-(&dSl2o3I)^ek$9tbcCvcX} zIft(EtijH+wG{4#3mAOJc|PD0dlk;kOX%Rw^WQJAPTCRd{o(YzfX%IV`wwECyUbV7 zI^_vWKF=*+Yw(HE>zCP~w3y=MN&#@k05TV(usogF9S3O{s{{Z6hJy9+Tc z1zyJ4zs)-6Lrc0s`1b28*tmI%y-Br82vqsu9yqX_bDJ%|C6b|kGW?RGSOe86uZmL) zEOpu{V!exna1H)rPqu--a!1UX{$xFQ>>al3e+prdYzajbVW=s-MtEWotH~!7!MGps z8%6AGU04Zq>$I)(haetm&YFtr3r){*=$amT4fg1!OQ3Rbc}qEvM{ z6OLiD{rPY9?0{a1qVxvk;4+AyYxptlK6vj7>JJC z0Nw}kx9+lDQM zWhH`Ffl@&tqSgHHeO8O#BwDx`6ZpL`O#uJL;Q0iU23o_LP_2Sg`vQVuk$>@=1pXB6 zT2MMjs9h)0AH|nYEwYVBMiO|uYAgCH%6jm82HF7H2I@LUZn-KgtC<7!^e<4)&l8McNCa>1^0gCb^f-^yzL0|FvswNKnD={rH@N4)O zpe-PwWUI6e*~L0*kDT#E87g1-ahfP}{VW=(< zV`X%2hS2w5JODZf`hi!oX=7ytos1v{Uue^62mXkVL!excPn1J+aHA=@Undc(0tac zuiG3}ea!}|SM!VtigFG-=Rx_P3;e!A>m@a|L6CzF@PR2VBIFXN03@mzfxNi9)<_r8zfw(6I!oc>Ua+;!zcXQcn=2&ed75agDb`8 z>aM8usvsJ19Fm53^!yIaMZT@W_>%HkS3cCK`Ic`y9BM?43&0Wq)sg&EMXet!*PxR2 zysSVeVWk!51vdspaMc9W0*MM#TU4N0{O3wmyAA@6w*ut?M}e;ns4l1;uTD=RhdxG~V zP%n^(r?-g59Lm}w*c(MQa37%-)DMI!?mhaZ~S~pv3*;M!nx8%ERI(@?B z+o$2$RB7W4_06b8HBgkvP(KCq8c0}es%f2EIsKZLY)Vr_S%9Df5H1UdPM#;$(%wc^{cFpzj;^f@2@oQ0H^tt` z1;u&VpXb)rdLz^v8wBCy1GvE!Nji5~+5yj_lGeBQ}z66OV zGWkb!wJ=RY5zBYg)h1PsZ)vV6HiP3U(AOXXv<0-)(*6zbHc%F5J4k5X0e2@T8?*}~ zwD0B%>uDjCh4#r%>&-yLR+#@1{!Kk?C=aTyg~}Wjm0?H)!*9@W0(25|3UnHD29#%| z;Vkeu(0NckNTlHc+>4+~paPIc!)3m@z7`fE(hvu=-ZVsE$h!iTtDtM3>!2H;o1j9_ z6o}q}I~DFU&~(u6c>e=*8}uhgM0p49U!Wq;-yjj?UAX2r(BjDvQ@g!7dD@%2Qv=OM zn%TwsG|;Nl%0m3n;JpXl32=+yPJ}xNG#PXs?+>sa`GD1ZY(2NDffgb)rSY>3w62vW zw87j9+zQ3q3M48lrF@fyG4!Q|)}kg9Ox~_x1F#B42GT$_zOkVeCdc(e1fjpz_x_jKNi>}t1lYmr0EuS?AK6H2R7(W)ZmTHum52!wBibqvBPUG|&Z|?$MzoE< zPU)YDa}48K8fn92ADG@2U(4Q6oF`Z;uhm!^D_e4CJ5y&qTp#H71v#l`$#r?x##%_2 zoT-TdOaX_OdisIG-%81#_9c_nDw4gHU>6Bf+M9Zh!4;+sfJ8YEjvbUh80Z13UZ*^8 z1yDs$C6Fl6%5dL?TLo?qNEB%>|GtS9QcENv8|u8ZXix{tzrYd#3Iz$}43A)tUs+TQI}8YvCjiaScFGSZV3aUvHy@waI!yT3iW3dALD+ zpPtri`0%DpTD?4C)bKIWCyo?*3d2W^m@uK6oSCJ9-|tQQZi?|^8|@O7bZ?-xkw*L1pLLo4cb)ftbZ#X5Jm6 z6oXli@Eib!fuMXa7lHgNfwGGMp+rPbb}?`p?}ExM1}gTzm;jyGpd+9HPQ zpi71CXiyhkt(O)eR|l`aJL`2*q4KiHGDfg~usZ0aHRAETu$v|Ns&n8KH6$0Vc)+3v zwZbj3T;ZSevZ-e(0)(Dv{4%2Bj^0{(spmC>3qAeeiU%wudJ^C#-o@h>Y3g|k9zxIC z{GHy=lhRwO(L%`QgI7F)-={Q7CEx|+g6wg zOu$}F&ynb=#W1+{zl6VGh37vS-eTmmHz%9YrsWx`&g0QrCCG2~)q>4UeK5uHzbcE(!D@XemfMNn=cFalDK0WIn&2 zR*!G#r%iiW)U=@p7iM|_u6PJ&nuUeGJUf6R)Okz(?J939kc_q6O;||){KeM zUmZS~j~uA=lUXbHFOjEN{*Wv&m@*E(c=i)PJ_;X^0+=o8!ux#4s9aFB%u}0KgC#FCdPEA zJqs1*Kq80d`K>|PaM>HpN03nU1YGeTv?TGV!p}-{)CBZ62)tmaxF}Rqz1ouC3G!gTSQ>et` zB`o(uQp#IO#Q%o4qEJ$aZyBQXm6|$&M`$Yg2TemJDSF%)p^0J9C^S{FG*yOMg?D?- zO3pb;Ns3rs;sIw#0Tn|@dY({{ZYc?}lmx@A$}d4lSCOZ=2o@>nEEcGE$|^~nj2jDQ ziF3W58%t-Ak`PNtDBNnG>U`l)Y-0;W_bo*Q|DY%c;zF@_W>~7iELCo};h+eR)tR(@ zb@bG!BgT%N+Ea`pc>YgaXYboI5QgzK^eUu)6b1xC8A@9kDSX6fi`o!K0_}z>q%t5e z*v2tcMB7BJt9GIt_!~IJA~7&9B3Kw0Ix==E1AhQQ3>_F4_&xST%EBu>@^g33d-t9b z-&d4G0S5TVh68l)ptYlcbkqF*MMq9od1aqng)Y3z4~)ouq6~pax_goyf~Y1m)Fw zJE`A$?kC~aIx}$IxkKke`CPKIm3B8{*KA(?mGVKu)9iuU_|>R$4s55LdR;dx3hnF2 zT)3j177(qai+T2Tnniz^ymR&_GPBuoph~i2Pf5<`{str;1KBaxd8%Fjw*kLYIkIS5 z9aG7A_`yl_lD>ie0M8u%36C8A1J^ty%@|FDj+fv%J5v4xTxUq)Ww>S>@p-t$d+`=r zgC~4{ rule_stack; std::vector>> args_stack; - bool in_token = false; + size_t in_token_boundary_count = 0; std::shared_ptr whitespaceOpe; bool in_whitespace = false; @@ -2392,7 +2392,7 @@ inline size_t parse_literal(const char *s, size_t n, SemanticValues &sv, } // Skip whiltespace - if (!c.in_token) { + if (!c.in_token_boundary_count) { if (c.whitespaceOpe) { auto len = c.whitespaceOpe->parse(s + i, n - i, sv, c, dt); if (fail(len)) { return static_cast(-1); } @@ -2457,16 +2457,22 @@ inline size_t LiteralString::parse_core(const char *s, size_t n, inline size_t TokenBoundary::parse_core(const char *s, size_t n, SemanticValues &sv, Context &c, any &dt) const { - c.in_token = true; - auto se = make_scope_exit([&]() { c.in_token = false; }); - auto len = ope_->parse(s, n, sv, c, dt); + size_t len; + { + c.in_token_boundary_count++; + auto se = make_scope_exit([&]() { c.in_token_boundary_count--; }); + len = ope_->parse(s, n, sv, c, dt); + } + if (success(len)) { sv.tokens.emplace_back(std::make_pair(s, len)); - if (c.whitespaceOpe) { - auto l = c.whitespaceOpe->parse(s + len, n - len, sv, c, dt); - if (fail(l)) { return static_cast(-1); } - len += l; + if (!c.in_token_boundary_count) { + if (c.whitespaceOpe) { + auto l = c.whitespaceOpe->parse(s + len, n - len, sv, c, dt); + if (fail(l)) { return static_cast(-1); } + len += l; + } } } return len; diff --git a/test/test2.cc b/test/test2.cc index 9a91aa8..2ee83f7 100644 --- a/test/test2.cc +++ b/test/test2.cc @@ -3,6 +3,93 @@ using namespace peg; +TEST_CASE("Token boundary 1", "[token boundary]") +{ + parser pg(R"( + ROOT <- TOP + TOP <- 'a' 'b' 'c' + %whitespace <- [ \t\r\n]* + )"); + + REQUIRE(pg.parse(" a b c ")); +} + +TEST_CASE("Token boundary 2", "[token boundary]") +{ + parser pg(R"( + ROOT <- TOP + TOP <- < 'a' 'b' 'c' > + %whitespace <- [ \t\r\n]* + )"); + + REQUIRE(!pg.parse(" a b c ")); +} + +TEST_CASE("Token boundary 3", "[token boundary]") +{ + parser pg(R"( + ROOT <- TOP + TOP <- < 'a' B 'c' > + B <- 'b' + %whitespace <- [ \t\r\n]* + )"); + + REQUIRE(!pg.parse(" a b c ")); +} + +TEST_CASE("Token boundary 4", "[token boundary]") +{ + parser pg(R"( + ROOT <- TOP + TOP <- < A 'b' 'c' > + A <- 'a' + %whitespace <- [ \t\r\n]* + )"); + + REQUIRE(!pg.parse(" a b c ")); +} + +TEST_CASE("Token boundary 5", "[token boundary]") +{ + parser pg(R"( + ROOT <- TOP + TOP <- A < 'b' C > + A <- 'a' + C <- 'c' + %whitespace <- [ \t\r\n]* + )"); + + REQUIRE(!pg.parse(" a b c ")); +} + +TEST_CASE("Token boundary 6", "[token boundary]") +{ + parser pg(R"( + ROOT <- TOP + TOP <- < A > B C + A <- 'a' + B <- 'b' + C <- 'c' + %whitespace <- [ \t\r\n]* + )"); + + REQUIRE(pg.parse(" a b c ")); +} + +TEST_CASE("Token boundary 7", "[token boundary]") +{ + parser pg(R"( + ROOT <- TOP + TOP <- < A B C > + A <- 'a' + B <- 'b' + C <- 'c' + %whitespace <- [ \t\r\n]* + )"); + + REQUIRE(!pg.parse(" a b c ")); +} + TEST_CASE("Infinite loop 1", "[infinite loop]") { parser pg(R"(